Несколько авторитетных DNS-серверов на одном IPv4-адресе

Я хотел бы поддерживать DNS-туннель на моем сервере, размещенном на сайте example.com. У меня также есть DNS-сервер, который обслуживает все для example.com. В настоящее время я использую dns2tcp для туннелирования DNS в домене tunnel.example.com. NSD3 используется для обслуживания авторитетных зон, поскольку он прост и безопасен.

Однако у меня есть только один публичный IPv4-адрес, что означает, что NSD и dns2tcp не могут прослушивать один и тот же IP/ порт.

Так что в настоящее время я использую PowerDNS Recursor, используя forward-zones параметр как этот:

forward-zones-recurse=tunnel.example.com=1.2.3.4:5354
forward-zones=example.com=1.2.3.4:5353

Это позволяет запрашивать авторизованную зону для правильного сервера, а также для туннельных запросов. NSD прослушивает порт 5353 и dns2tcp через порт 5354.

Однако это плохо, потому что рекурсор должен быть открытым. И это фактически отвечает на любой рекурсивный запрос.

У вас есть какое-то решение для этого? Я действительно предпочитаю решение, которое не включает настройку BIND, но если вы хотите меня убедить, не стесняйтесь;)


РЕДАКТИРОВАТЬ: я изменить название, чтобы быть более понятным.

2 ответа

Решение

Я нашел решение своей проблемы. Однако это не общее решение вопроса.

В моем случае я полагаюсь на протокол, используемый dns2tcp, который взаимодействует с использованием запросов поддоменов на tunnel.example.com. Поэтому идея состояла в том, чтобы сопоставить пакет, содержащий такие запросы, и создать правило сетевого фильтра:

iptables -t nat -I PREROUTING -p udp --dport 53 -m string --algo bm --from 42 --hex-string "|0674756e6e656c076578616d706c6503636f6d00|" -j REDIRECT -to-ports 5354
  • hex-string Параметр - строка, соответствующаяtunnel.example.com как видно в пакетах DNS.
  • from 42 гарантирует, что в dns2tcp перенаправляются только подзапросы, а не обычные запросы для самого домена, такие как запросы SOA или NS.
  • NSD теперь прослушивает порт 53, что намного лучше, чем раньше.
  • Больше нет общедоступных рекурсивных серверов, что еще лучше.

Это не идеально, но оно использует гораздо меньше программного обеспечения, чем раньше.

Два сервера не могут одновременно прослушивать одну и ту же комбинацию IP+ порт.
Все, что вы делаете, чтобы включить такого зверя с двумя спинами, - это хакерство - оно плохое и неправильное и не должно быть сделано. Боль, Печаль, Безумие и Смерть лежат на этом пути - поверните назад, иначе вас съест злость.


Правильное решение

Получить другой IP. В идеале, получите другой сервер целиком и не запускайте рекурсивный DNS на том же компьютере, на котором находится ваш авторитетный сервер.


Простое решение

Преодолейте страх / недоверие / ненависть к BIND (приобретите копию DNS и BIND и создайте себе симпатию) и используйте allow-recursion{…}; директива для ограничения, кто может делать рекурсивные запросы.

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

Другие вопросы по тегам