使 dnsmasq 仅在一个接口上监听

使 dnsmasq 仅在一个接口上监听

我在装有 Raspbian 的树莓派上运行了 dnsmasq。树莓派在 wlan0 上有一个 wifi 棒,并通过 eth0 连接到本地网络/互联网。我的目标是让 dnsmasq 将所有主机解析为树莓派的静态 IP(仅适用于 wifi 连接)。这是我的 dnsmasq.conf

address=/#/192.168.42.1
interface=wlan0

但是现在,当我通过 eth0 ssh 到 pi 并 ping google.com 时,它也会解析为 192.168.42.1。也许这是因为这个(来自手册页):

当使用 --interface 选项时,Dnsmasq 会自动将环回(本地)接口添加到要使用的接口列表中

如果是这样,我该如何让 dnsmasq 仅监听 wifi 连接?

解决方法

就我的目的而言,这样的逻辑是可以的:“如果插入了以太网电缆,则关闭dnsmasq。如果拔掉了以太网电缆,则将其重新打开”。

因此,我习惯于ifplugd管理这个过程。在文件中,/etc/ifplugd/ifplud.action我添加了service dnsmasq stop“up”案例和service dnsmasq start“down”案例。完全成功!

答案1

尝试

except-interface=eth0

避免 dnsmasq 监听 eth0

答案2

您的做法是错误的。dnsmasq 根本没有错。

Linux 上的大多数 DNS 解析器都使用/etc/resolv.conf。那里定义的是与接口无关的。事实上,它必须是:除非您有数字 IP 地址,否则您不知道要使用哪个接口和路由。

所以基本上你想要的事情是无法实现的。

当然,除非它实际上根本不适用于 dnsmasq 主机,而是 WiFi 客户端或其他。在这种情况下,您需要从中删除本地 DNS 响应器resolv.conf并使其直接使用上游(您的路由器、ISP、Google DNS、OpenDNS 等)。

使用 Google DNS 时,典型resolv.conf情况如下:

nameserver 8.8.8.8
nameserver 8.8.4.4

相关内容