DNSMasq 无法解析公共域名上不可路由的 IP

DNSMasq 无法解析公共域名上不可路由的 IP

我们的 DNSMasq 无法解析来自指定公共域的 A、CNAME 或别名记录私有 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 来访问它们。

所有 200 多台服务器在多个子网中注册了 4 个不同的公共域,均使用私有的不可路由 IP 地址,这 100% 一致。但是,所有其他使用公共可路由 IP 地址的记录在同一个域中都可以正常工作!

使用本地 dnsmasq,其他一切都 100% 正常运行:

  • 解决所有公共领域
  • 解决所有公共 IP 的 IP 反向查找
  • 解析所有内部私有域和主机
  • 解决私有 IP 和 DHCP 租约的所有 IP 反向查找

它只是使用私有不可路由 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

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 客户端上的本地 LAN 完美配合,可以解析公共和内部域以及 LAN 甚至没有域后缀的主机(server-xyz -> 解析为 server-xyz.lan)。

它只是使用不可路由 IP 的公共域。

答案1

@HåkanLindqvist 的评论为我指明了正确的方向。他一回答,我就会将他的回答标记为答案。在此之前...

他的评论向我指出了rebinddnsmasq 的选项:

--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/

哇哦!成功了!

我的 dnsmasq 必须使用严格选项进行编译才能默认使用。

相关内容