我在 debian-jessie 上的 dnsmsasq 有一个小问题,它似乎将传入的 DNS 查询转发到 2 个端口而不是 1 个。
背景:
在 LAN IP 为 192.168.0.10 的机器上运行。坐在家用路由器后面。家庭路由器配置为将 DNS 流量转发到 192.168.0.10。这部分有效,我确实看到从 LAN 到这台机器的传入流量。
dnsmasq 配置:
>cat /etc/dnsmasq.conf | grep -v ^# | grep -v ^\s*$
domain-needed
bogus-priv
server=127.0.0.1#5053
cache-size=10000
我的resolv.conf告诉本地进程将 DNS 查询发送到 dnsmasq
>cat /etc/resolv.conf
# Generated by resolvconf
nameserver 127.0.0.1
而 dnsmasq,如果它无法从其缓存中应答,则将传入的 DNS 流量转发到另一个在本地运行并通过server=127.0.0.1#5053
配置侦听端口 5053 的服务。该服务是我自己构建的,它不会将 DNS 查询转发到 8.8.8.8
这有效,但不是我想要的方式。DNS 查询得到正确回答。正如预期的那样,端口 5053 显示流量,甚至提供答案(虽然比 GoogleDNS 慢)
>tcpdump -l -n -i any '(port 5053) and (port 53)'
13:57:53.817522 IP 127.0.0.1.47207 > 127.0.0.1.53: 7494+ [1au] A? www.example.com. (44) # dnsmasq receives a query from `dig www.example.com` running locally
13:57:53.818609 IP 127.0.0.1.5258 > 127.0.0.1.5053: UDP, length 44 # dnsmasq forwards to local DNS Server listening on 5053
13:57:53.818970 IP 192.168.0.10.5258 > 8.8.8.8.53: 50849+ [1au] A? www.example.com. (44) # dnsmasq forwards to 8.8.8.8 on port 53 (Google DNS)
13:57:53.862170 IP 8.8.8.8.53 > 192.168.0.10.5258: 50849$ 1/0/1 A 93.184.216.34 (60) # dnsmasq receives answer from 8.8.8.8
13:57:53.862559 IP 127.0.0.1.53 > 127.0.0.1.47207: 7494 1/0/1 A 93.184.216.34 (60) # dnsmasq forwards answer to dig running locally
13:57:53.980238 IP 127.0.0.1.5053 > 127.0.0.1.5258: UDP, length 49 # dnsmasq receives answer from local DNS Server
所以看起来 dnsmasq tee 对两者的 DNS 查询
- 127.0.0.1 在端口 5053 上,几乎立即也转发到
- 8.8.8.8 在端口 53
为什么,我的 dnsmasq 配置有什么问题,我只希望端口 5053 上的流量?
那个 8.8.8.8 是从哪里来的。是的,我知道那是 Google DNS,但是 dnsmasq 或 linux 从哪里获取该 IP,我可以编辑哪个配置文件来更改它?
>grep -r 8\.8\.8\.8 /etc/*.conf
什么都不返回。