![当其中一个配置的接口被拔掉时,如何防止 dnsmasq 完全失败?](https://linux22.com/image/10945/%E5%BD%93%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E9%85%8D%E7%BD%AE%E7%9A%84%E6%8E%A5%E5%8F%A3%E8%A2%AB%E6%8B%94%E6%8E%89%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%20dnsmasq%20%E5%AE%8C%E5%85%A8%E5%A4%B1%E8%B4%A5%EF%BC%9F.png)
我在 Arch Linux 上运行 dnsmasq,路由器上有 4 个 LAN 端口,用于有线、无线、DMZ 和管理接口。 dnsmasq 是我的 LAN 的 dhcp 服务器(并提供 dns 功能)。
我并不总是将东西插入所有 4 个 LAN 端口。但是,当我重新启动设备时,我希望它能够正确连接设备所连接的端口,特别是有线 LAN。
我的配置是这样的:
如果您希望 dnsmasq 仅在指定接口(和环回)上侦听 DHCP 和 DNS 请求,请在此处给出接口名称(例如 eth0)。对多个接口重复这一行。
interface=eth0
interface=eth1
interface=eth2
interface=eth3
我使用这个配置是因为我不希望 dnsmasq 在 WAN 端口上运行,在本例中我将其称为 eth4。
我的问题是,如果系统重新启动时没有将电缆插入 eth1(例如),dnsmasq 不会继续使用 eth0 或其他有效接口;它完全失败,如下所示:
Sep 16 14:16:10 router systemd[1]: Starting A lightweight DHCP and caching DNS server...
Sep 16 14:16:10 router dnsmasq[876]: dnsmasq: syntax check OK.
Sep 16 14:16:10 router dnsmasq[879]: dnsmasq: unknown interface eth1
Sep 16 14:16:10 router dnsmasq[879]: unknown interface eth1
Sep 16 14:16:10 router dnsmasq[879]: FAILED to start up
Sep 16 14:16:10 router systemd[1]: dnsmasq.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Sep 16 14:16:10 router systemd[1]: dnsmasq.service: Failed with result 'exit-code'.
Sep 16 14:16:10 router systemd[1]: Failed to start A lightweight DHCP and caching DNS server.
此后,我的 LAN 没有 DHCP 服务器,并且我缺少 dnsmasq 提供的其他关键功能,直到我手动修复它并编辑配置文件,这只是临时(且不需要)的更改。在我的情况下,有没有办法让 dnsmasq 仅使用有效/连接的接口启动?
答案1
在评论中回答时,该选项的完整描述是(引自域名解析 手动的):
-I, -- except-interface= 不监听指定的接口。请注意, --listen-address --interface 和 -- except-interface 选项的顺序并不重要,并且 -- except-interface 选项始终覆盖其他选项。关于 --listen-address 接口标签的注释适用于此处。