![当定义多个接口时,Ubuntu 如何确定默认路由?](https://linux22.com/image/1058976/%E5%BD%93%E5%AE%9A%E4%B9%89%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E6%97%B6%EF%BC%8CUbuntu%20%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E9%BB%98%E8%AE%A4%E8%B7%AF%E7%94%B1%EF%BC%9F.png)
我有一台 Ubuntu 服务器(无头,未安装网络管理器)。它有两个接口,eth0 和 eth1。我在 /etc/network/interfaces 中定义了以下内容:
auto lo
iface lo inet loopback
auto eth1
iface eth1 inet static
address 10.0.5.10
netmask 255.255.255.0
gateway 10.0.5.1
dns-search test.domain.com
dns-nameserver 10.0.2.3
broadcast 10.0.5.255
auto eth0
iface eth0 inet static
address 192.168.57.10
netmask 255.255.255.0
gateway 192.168.57.1
broadcast 192.168.57.255
目前,重新启动后,/etc/resolve.conf 为空,我的路由表如下所示:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.57.1 0.0.0.0 UG 0 0 0 eth0
10.0.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.57.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
为什么默认路由选择为 192.168.57.1?eth1 是列表中的第一个接口。我本来希望它获得默认路由。我希望重新启动后 /etc/resolve.conf 看起来像这样:
search test.domain.com
nameserver 10.0.2.3
我希望路由表如下所示:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.5.1 0.0.0.0 UG 0 0 0 eth1
10.0.5.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.57.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
我可以通过手动编辑 /etc/resolv.conf 并使用“ip route delete default”“ip route add default ...”来获得它,但它不会在重启后持续存在。
答案1
人们经常对“默认网关”的含义存在误解。通常可能只有一默认网关(有例外,但不是您的情况)。网络中不需要网关192.168.57.0
,因为它是直接连接的。
定义两个网关(每个接口一个)似乎最终只有一个,具体取决于定义的顺序。DNS 服务器也是如此 - 它们不绑定到特定接口,因此可能取决于定义/启动接口的顺序,最后一个定义将被使用。
如果需要,您可以更改接口定义的顺序(eth1,然后是 eth0),但使用 eth0 定义gateway 10.0.5.1
和dns-...
(或者,如果有疑问,对两个接口都定义相同)。