多宿主机需要为 DHCP 配置多个上行链路。它需要忽略除一个DHCP 上行链路之外的所有默认路由和 DNS。
这里有一个类似的问题 [ Debian 接口文件 - 忽略来自 dhcp 的网关和 dns 条目],但那里的答案并不能解决我的问题:
- 编辑全局 DHCP 客户端配置 (/etc/dhcp[3]/dhclient.conf) 将导致默认路由和 DNS 在所有DHCP 上行链路上被忽略。
- 该
ifmetric
建议仅涉及路由,而不涉及 DNS。
另外,我希望自 2009 年以来情况有所改变。
请注意,我说的是无头嵌入式系统。NetworkManager 不是一个选项。
首选解决方案仅是 /etc/network/interfaces{.d/}。我正在寻找这样的东西:
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
ignore-dhcp-option routers domain-name-servers domain-name
附录:
我们在各种环境中安装了几十个这样的盒子。网络不在我们的控制之下。在某些情况下,盒子需要在多个接口上执行 DHCP。我们通常事先不知道默认路由和 DNS,即使它们知道,它们也可能会随着时间的推移而更改,恕不另行通知。因此,我们不能静态设置它们,而必须通过“主”DHCP 客户端进行配置。
(我仍然对仅 touch 的解决方案感兴趣
/etc/network/interfaces{,.d/}
,但不是/etc/dhcp/
。在没有此类解决方案的情况下,我使用这个。)在中,从全局语句
/etc/dhcp*/dhclient.conf
中删除选项。然后添加这个(假设是默认路由和 DNS 不应被忽略的设备):routers, domain-name-servers, domain-name, domain-search
request
eth0
该解决方案至少适用于 isc-dhcp-client 版本 4.2.2.dfsg.1-5+deb70u8,因为它随 Debian 7 一起提供。我认为它也适用于更高版本。
编辑:
eth0
必须引用,应该是request
,不是required
)而不是使用
inet dhcp
你可以使用inet manual
然后指定你自己的dhclient
调用,你可以传递一个自定义dhclient.conf
文件(注意-cf <file>
参数):然后在您的自定义
dhclient.conf
(/etc/dhcp/dhclient_no_routers.conf
在这种情况下)中,您可以设置所需的 DHCP 选项。inet dhcp
要查看该方法还有什么作用,请查看源代码中的inet.defndhclient
文件(这是我从上面得到一些调用的地方)。通过添加到 /etc/dhcp/dhcliet.conf 可以解决同样的问题:
}
request
并从配置中删除全局参数(将我之前的评论变成答案)
更新:
添加如下建议的脚本确实会导致工作初始情况。但是,在某些情况下(例如断开然后连接电缆),dhclient 会很高兴地重新添加默认路由,并且脚本不会运行,因此不会再次被删除。因此,您将拥有两条默认路由。
长话短说:这种方法(不幸的是)不起作用。
旧答案 - 忽略这个
在 dhclient.conf 中乱搞对我来说有两个缺点
因此我选择了一个脚本
/etc/network/if-up.d
:缺点:由于这是在接口实际启动后运行的,因此如果数据包可能朝错误的方向前进,将会有一个(短暂的)时间段。设计良好的应用程序应该能够处理丢失的数据包,所以这应该不是问题:-)。如果您不希望任何数据包泄漏到错误的网络中,则需要防火墙规则来阻止它们。