我有一个 Ubuntu 盒子,它有两个网络接口(eth0 和 wlan0)。它们都配置为 DHCP /etc/network/interfaces
,但它们都分配了一个默认网关:
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
wireless-essid test
的结果route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.1 0.0.0.0 UG 100 0 0 wlan0
0.0.0.0 10.0.0.1 0.0.0.0 UG 100 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
如何/etc/network/interfaces
在我想要的接口上设置只有一个默认网关?
最坏的情况是,我怎样才能至少控制route -n
每次启动时哪一个命令处于领先地位?
笔记:
这个盒子将会经常移动,并且会连接到不同的网络,所以我事先不知道它会有的 IP 地址/范围。
有时默认的 gw 接口是 eth0。有时是 wlan0 ... 因此,这需要某种程度的自动化...
答案1
通常与网络相关的东西是由“网络管理员”来管理的,并且它配备了一个相当好的玻璃灯泡,知道如何做正确的事情(TM)。
如果您坚持使用 /etc/network/interfaces,并且您的计算机经常出差,则应将可执行脚本放入 /etc/network/if-up.d。每次接口启动时,都会执行此目录中的所有脚本。在新脚本中,您可以实现根据需要修改路由表的逻辑。
我建议你开始阅读接口手册页中的“IFACE OPTIONS”部分。但请注意,没有确定路由表“正确”设置的“方法”。
您可以通过分配不同的度量来更改默认路由的顺序。度量是一个简单的数字,内核将优先选择度量最低(我认为)的默认路由。因此,您应该想出一些测试,让您的脚本运行这些测试,并根据测试结果,您的脚本将度量分配给默认路由。