我在装有 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