我们的 DNSMasq 无法解析来自指定私有 IP 地址的公共域的 A、CNAME 或别名记录。
例如:
$ 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 可以访问它们。
这与在多个子网的 4 个不同公共域注册的所有 200 多台服务器都是 100% 一致的,所有服务器都使用私有不可路由 IP 地址。但是,使用公共可路由 IP 地址的所有其他记录都可以正常工作,在同一个域上!
其他一切都 100% 使用本地 dnsmasq 正常工作:
- 解析所有公共域
- 解析公共 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 的公共域。
@HåkanLindqvist 的评论为我指明了正确的方向。只要他回答,我就会将他标记为答案。直到那时...
他的评论向我指出了
rebind
dnsmasq 的选项:有了这些知识,我看到这实际上是正在发生的事情:
然后我将以下内容添加到我的 dnsmasq.conf 以修复它:
呜呼!有用!
我的 dnsmasq 必须使用默认的严格选项进行编译。