Наш DNSMasq не может разрешать записи A, CNAME или Alias из общедоступных доменов, которые указывают частные IP-адреса.
Например:
$ nslookup
> server 172.16.1.1
Default server: 172.16.1.1
Address: 172.16.1.1#53
> www.work-domain.com
Server: 172.16.1.1
Address: 172.16.1.1#53
Non-authoritative answer:
Name: www.work-domain.com
Address: 55.77.XXX.XXX
> server-b.work-domain.com
Server: 172.16.1.1
Address: 172.16.1.1#53
Non-authoritative answer:
*** Can't find server-b.work-domain.com: No answer
Но переход на публичный DNS работает нормально:
$ nslookup
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> www.work-domain.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.work-domain.com
Address: 55.77.XXX.XXX
> server-b.work-domain.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: server-b.work-domain.com
Address: 10.1.XXX.XXX
Обратите внимание на server-b.work-domain.com
запись правильно разрешается в немаршрутизируемый IP-адрес 10.1.XXX.XXX
? Это моя проблема, это не работает с моим локальным dnsmasq в локальной сети.
Эти IP-адреса являются частью наших частных подсетей Amazon AWS, и у нас есть VPN для доступа к ним.
Все это на 100% согласовано для всех 200+ серверов, зарегистрированных в 4 разных общедоступных доменах в нескольких подсетях, и все они используют частный немаршрутизируемый IP-адрес. Но все же все остальные записи, использующие общедоступные маршрутизируемые IP-адреса, работают нормально в том же домене!
Все остальное на 100% нормально работает с локальным dnsmasq:
Это просто публичные записи с использованием частных немаршрутизируемых IP-адресов.
Должно быть, мне не хватает какой-то опции, которую я не могу прервать при чтении страницы MAN.
Версия:
Dnsmasq version 2.73 # (part of AdvancedTomato)
Конфигурация (удаленные конфиденциальные записи, оставленные примеры):
# dhcp-option=lan,3,172.16.1.1
cache-size=8192
log-async=25
strict-order
#local=/lan/
#domain=lan,172.16.1.0/24,local
expand-hosts
domain-needed
# network devices
address=/router-gateway.lan/172.16.1.1
address=/router-office.lane/172.16.1.2
...and so on x 70
# arpa entries
ptr-record=1.1.16.172.in-addr.arpa,"router-gateway.lan"
ptr-record=2.1.16.172.in-addr.arpa,"router-office.lan"
...and so on
Local resolvs на AdvancedTomato выплевывает:
# cat /etc/resolv.conf
nameserver 127.0.0.1
# cat /etc/resolv.dnsmasq
nameserver 8.8.8.8
nameserver 8.8.4.4
Опять же .. Все отлично работает с локальной сетью на клиентах Windows, OSX и Linux, разрешая общедоступные и внутренние домены, локальные сети и даже хосты без суффикса домена (server-xyz -> преобразуется в server-xyz.lan).
Это просто публичные домены, которые используют немаршрутизируемые IP-адреса.
@ HåkanLindqvist прокомментировал, указал мне в правильном направлении. Как только он ответит, я отмечу его как ответ. До тех пор...
Его комментарий указал мне на rebind
параметры для dnsmasq:
--stop-dns-rebind
Reject (and log) addresses from upstream nameservers which are in the private IP ranges. This blocks an attack where a browser behind a firewall is used to probe machines on the local network.
--rebind-localhost-ok
Exempt 127.0.0.0/8 from rebinding checks. This address range is returned by realtime black hole servers, so blocking it may disable these services.
--rebind-domain-ok=[<domain>]|[[/<domain>/[<domain>/]
Do not detect and block dns-rebind on queries to these domains. The argument may be either a single domain, or multiple domains surrounded by '/', like the --server syntax, eg. --rebind-domain-ok=/domain1/domain2/domain3/
Вооружившись этим знанием, я вижу, что происходит на самом деле:
# cat /tmp/etc/dnsmasq.conf
...
rebind-localhost-ok
...
Затем я добавил в свой dnsmasq.conf следующее, чтобы исправить это:
rebind-domain-ok=/work-domain1.com/work-domain2.com/
Woohoo! Оно работает!
Мой dnsmasq должен быть скомпилирован со строгим параметром по умолчанию.