我有一台运行 ubuntu 16.04 的便携式 Linux 机器,它只有一个网络接口,当插入网络时,应该确保该网络上有一个 DHCP 服务器。有两种情况:
(a) 如果网络上已运行 DHCP,则该盒子应该在那里获取一个 IP。
(b) 如果网络上不存在 DHCP,则该盒应该启动 DHCP 服务器。
对于 (b) 的情况,我已运行 dnsmasq。但是,我希望系统自动检测 (a) 或 (b),并根据结果启动 dnsmasq 服务。
到目前为止,我的方法是将 eth0 的 /etc/network/interfaces 设置为静态(作为内部提供的 DHCP 的基础),并将 eth0:1 配置为 dhcp。我尝试寻找在链接可用后启动/停止 dhcp-client 的 dnsmasq 服务的方法,但找不到这样的选项。
答案1
我解决这个问题的方法是编写一个 bash 脚本,根据 dhclient 的输出启动 dnsmasq。如果 dhclient 没有收到响应,则启动 dnsmasq。实际上应该很简单。不用看,我假设如果 dhclient 无法获得 DHCP 租约,它将给出一个非零的退出代码。
使用 udev 触发脚本,或者将其放入 /etc/network/interfaces 中,如果 dhclient 给出非零退出代码,则启动 dnsmasq。