我正在尝试了解 dnsmasq 的转发工作原理。我从手册中读到的内容如下:
“[...]Dnsmasq 接受 DNS 查询并从小型本地缓存中回答它们或将它们转发到真实的递归 DNS 服务器。[...]”
据我所知,如果我发出 DNS 请求,我的机器会向 dnsmasq 询问给定域的 IP 地址。如果 dnsmasq 无法回答,dnsmasq 会将此请求转发“到真实的递归 DNS 服务器”。
这种转发是如何工作的?我尝试通过谷歌搜索来自己回答这个问题,但这并没有真正回答我的问题。
当我通过 wireshark 查看它时,我看到了这种模式:
127.0.0.1 -> 127.0.1.1 (standard query)
192.168.1.2 -> 192.168.1.1 (standard query)
192.168.1.1 -> 192.168.1.2 (standard query response)
127.0.1.1 -> 127.0.0.1 (standard query response)
有人能解释一下那里发生了什么事吗?
编辑:
我问的是 dnsmasq 如何知道 192.168.1.1 的答案是什么。事实上 192.168.1.1 只告诉 192.168.1.2 IP 地址。127.0.1.1 如何知道 IP 地址?信息是如何传输的?
我希望是这样的:
192.168.1.1 -> 127.0.1.1 OR
192.168.1.2 -> 127.0.1.1
我期望有一些路由可以传输信息,但事实并非如此。
答案1
Wireshark 在 TCP/IP 模型上介于网络和传输之间。因此,您看不到在应用程序级别交换的数据,这就是为什么当您尝试监视 DNS 时,wireshark 输出没有多大意义的原因。在应用程序确定要发生什么之后,您只会看到数据包的流动和方向。您必须监视 dnsmasq 才能找到所需的信息。如果您-q
在脚本中添加启动 dnsmasq 的内容,它会将日志发送到syslog
。
这是我能找到的一个示例输出。
Jan 17 23:33:15 server001 dnsmasq[10708]: query[A] sgi.com from 192.168.0.20
Jan 17 23:33:15 server001 dnsmasq[10708]: forwarded sgi.com to 127.0.0.2
Jan 17 23:33:15 server001 dnsmasq[10708]: query[AAAA] sgi.com from 192.168.0.20
Jan 17 23:33:15 server001 dnsmasq[10708]: forwarded sgi.com to 127.0.0.2
Jan 17 23:33:15 server001 dnsmasq[10708]: dnssec-query[DS] sgi.com to 127.0.0.2
Jan 17 23:33:15 server001 dnsmasq[10708]: dnssec-query[DS] sgi.com to 127.0.0.2
Jan 17 23:33:15 server001 dnsmasq[10708]: validation result is INSECURE
Jan 17 23:33:15 server001 dnsmasq[10708]: reply sgi.com is 192.48.138.174
Jan 17 23:33:15 server001 dnsmasq[10708]: validation result is INSECURE
Jan 17 23:33:15 server001 dnsmasq[10708]: reply sgi.com is NODATA-IPv6