Я хотел бы настроить базовый сервер пересылки DNS, который выполняет две функции.
Во-первых, он просто перенаправляет запросы DNS вверх по течению. Во-вторых, если вышестоящие DNS-серверы не могут разрешить имя хоста, этот DNS-сервер пересылки должен вернуть мусорный IP-адрес, например 127.255.255.255
или 100::
.
Результатом этого может быть то, что все имена хостов всегда должны разрешаться, но имена хостов, которые обычно не разрешаются, разрешаются в мусорный IP-адрес.
Например, если бы у меня было два имени хоста: resolvable
который, как известно вышестоящему DNS-серверу, находится на 1.2.3.4
; и notresolvable
для которого вышестоящий DNS-сервер не знает IP-адрес. Если я затем запрошу DNS, перенаправленный с этими двумя именами хостов, resolvable
вернется 1.2.3.4
и notresolvable
вернется 127.255.255.255
(а не не нашел).
Hostname: resolvable notresolvable
| / \ | / \
| | | |_________
\ / | \ / |
DNS Forwarder: forward found forward not __\ use garbage ip
upstream ip=1.2.3.4 upstream found / ip=127.255.255.255
| / \ | / \
| | | |
\ / | \ / |
Upstream DNS found ip=1.2.3.4 not found
server:
Ближе всего к созданию этой системы я смог использовать dnsmasq. dnsmasq по умолчанию отправляет DNS-запросы вверх по течению, поэтому он работает для моего первого требования.
Я также могу добавить address=/#/127.255.255.255
до конца /etc/dnsmasq.conf
который затем преобразует все имена хостов в мусорный IP-адрес. Однако это также разрешает имена хостов, которые может разрешить вышестоящий DNS-сервер, что мне не нужно.
После прочтения страница руководства dnsmasq Я нашел это в разделе адресов:
Запросы в доменах никогда не пересылаются
что говорит мне, что то, что мне нужно, невозможно с dnsmasq.
Итак, мой вопрос: какая программа лучше всего подходит для такой настройки и как мне это сделать?
У меня есть приложение, работающее внутри контейнера докеров, которое использует сеть докеров для подключения к другим контейнерам докеров с использованием имен хостов.
Проблема, которую я пытаюсь решить, заключается в том, что приложение не запускается или не продолжает работу, если имя хоста не разрешается (что происходит, если контейнер, на который оно ссылается, не запущен).
Таким образом, DNS-сервер, о котором я упоминал выше, будет сервером, который работает вместе с приложением внутри контейнера докеров.
Я также удалил ссылку на resolv.conf
так как не кажется необходимым, чтобы это работало. DNS-сервер просто должен перенаправить на внутренний DNS-сервер докера, который просто случайно указан в resolv.conf
.