Назад | Перейти на главную страницу

DNSMasq не разрешает немаршрутизируемые IP-адреса в общедоступных доменных именах

Наш 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 должен быть скомпилирован со строгим параметром по умолчанию.