![DNSMasq 无法解析公共域名上不可路由的 IP](https://linux22.com/image/694132/DNSMasq%20%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90%E5%85%AC%E5%85%B1%E5%9F%9F%E5%90%8D%E4%B8%8A%E4%B8%8D%E5%8F%AF%E8%B7%AF%E7%94%B1%E7%9A%84%20IP.png)
我们的 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 的评论为我指明了正确的方向。他一回答,我就会将他的回答标记为答案。在此之前...
他的评论向我指出了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/
哇哦!成功了!
我的 dnsmasq 必须使用严格选项进行编译才能默认使用。