Контролировать IP источника локальных DNS запросов к локальному серверу?

while IFS= read -r l; do
   read -r -a A <<<"$l"
   case $l in
      'pos'[\ \   ]* )
         echo "${A[@]:0:2}"
         C=("${A[@]:1}")
         ;;

      * )
         p=0 x=${A[0]}
         for e in "${A[@]:1}"; do
            echo "$x ${C[$p]} $e"
            ((p++))
         done
         ;;
   esac
done < yourfile


sed -E '
   /\n/bloop

   y/\t/ /;s/  +/ /g;s/^ +//;s/ +$//

   1{
      h
         s/ /\n/2
      x
         s/ /\n/;s/.*\n//
      x
         s/\n.*//
      b
   }

   G;s/\n/ &/

   :loop
      #  1     2     3   4   5
      s/^(\S+ )(\S+) (.*)(\n)(\S+) ?/\1\5 \2\4\1\3\4/
      /\n$/{
         /\n.*\n/!d
      }
       P
      /\n.*\n/D
   tloop

' yourfile

Результаты

pos COL1
18691441 COL1 C
18691441 COL2 A
18691441 COL3 G
18691572 COL1 G
18691572 COL2 C
18691572 COL3 G
18691620 COL1 A
18691620 COL2 T
18691620 COL3 G
18691716 COL1 C
18691716 COL2 G
18691716 COL3 C

Объяснение

  • Прежде всего, мы преобразуем любые остаточные символы TAB в пробелы, затем сжимаем несколько пробелов и, наконец, обрезаем все начальные/конечные пробелы.
  • Мы делаем специальную обработку первой строки:
    • а) сделать копию строки.
    • б) отметить конец 2-го столбца на потом.
    • c) поменять местами эту отмеченную строку с копией, хранящейся в резервном пространстве.
    • d) удалить первый столбец, затем вернуться назад и в этом отображении cols1,2.
  • Для всех остальных строк (от 2 до eof) мы добавляем имена столбцов к строке.
  • Затем настройте цикл do-while, в котором на каждой итерации мы переставляем поля так, как показано, чтобы имя столбца вместе со значением выводилось на печать. Мы останавливаемся, когда видим строку, имеющую \n в конце И это единственный символ \n, оставшийся в строке. В противном случае мы просто обрываем начальную часть и возвращаемся к началу цикла.
1
06.11.2016, 23:26
2 ответа

Для настройки исходного запроса, отличного от первичного интерфейса сервера, вы используете query-source в параметрах BIND.

Настройка такова, что с этого IP отправляются только запросы, инициированные сервером / демоном.

Помните, что , если это внутренний / RFC 1918 частный адрес , вам придется преобразовать его через NAT при выходе на внешнюю территорию.

Согласно моему серверу, в /etc/bind/ named.conf.options :

options {
    query-source address X.X.X.X;
}

где X.X.X.X - ваш IP-адрес.

Другой вариант - использовать службу динамического DNS, зарегистрировать там свой IP-адрес и выполнять правила на основе имени DNS. Конечно, есть небольшое неудобство, связанное с необходимостью создания сценария, который будет помещен в качестве ловушки DHCP для повторного применения правил при изменении IP-адреса.

0
28.01.2020, 01:07

Комментарий @ roaima привел меня в правильное русло.

Мое правило POSTROUTING iptables выглядит так:

-t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to <мой общедоступный IP-адрес>

Просто добавьте правило выше этого, чтобы исключить собственный IP-адрес маршрутизатора исправил все:

-t nat -I POSTROUTING 1 -s 192.168.1.1 -j ACCEPT

@roaima, если вы хотите отправить сообщение в качестве ответа, я дам вам голос за.

0
28.01.2020, 01:07

Теги

Похожие вопросы