Dnsmasq
DNSMasq 無法解析公共域名上的不可路由 IP
我們的 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 的選項:--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 必須使用預設的嚴格選項進行編譯。