dnsmasq 转发

dnsmasq 转发

我正在尝试了解 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

相关内容