我遇到了双网卡虚拟机(例如 eth0 和 eth1)的问题。例如,当路由表如下所示时,一切正常:
$ sudo route -n
default 10.100.0.1 0.0.0.0 UG 20100 0 0 eth0
default 192.168.100.1 0.0.0.0 UG 20101 0 0 eth1
默认 GW10.100.0.1
处理所有流量,包括 DNS 查找等。
周末发生了一些事情(我不确定是什么),但是当我周一来时,我看到我想要的默认 GW 现在有一个更高的指标,所以它没有被使用。
$ sudo route -n
default 192.168.100.1 0.0.0.0 UG 20101 0 0 eth1
default 10.100.0.1 0.0.0.0 UG 20102 0 0 eth0 <<< ISSUE 20102
LAN 网段 192.168.100.1 仅与用于测试的主机有连接。当我启用网络段(我在 vSphere 中运行此虚拟机)时,会自动创建默认网关。
结果是我的 DNS 服务器无法访问。 解决方法是重新启动主机,或者删除并重新添加默认网关。
这个问题解释了这个问题:为什么删除网关路由然后重新添加它会使路由突然起作用?
我正在努力寻找解决这个问题的方法。该解决方案应确保所需的默认 GW 始终具有定义的两个网关中的最低度量。
寻找解决方案
我还没有找到适合我遇到的问题的搜索词,所以我一直在阅读有关 Linux 网关如何工作的文章,但这对回答我的问题没有帮助。
首先,我会使用 ip 路由,而不仅仅是路由。iproute2 软件包将很快取代 net-tools。
虽然我可以建议更好的解决方案,但如果我有有关您的设置的更多详细信息,例如:您是否使用 netplan,或者您是否使用旧的接口配置配置了接口。
该解决方案应该适用于任何 Ubuntu 版本。
在 /etc/network/if-up.d/ 中创建一个文件并使其可由 root 执行
根据额外信息,我建议最好的解决方案是:
创建文件 /etc/systemd/network/99-eth1.network
这将确保 vSphere 不会通过 dhcp 分配网关。我怀疑您的 vSphere、更新或设置更改中发生了某些更改,导致您的虚拟机通过 dhcp 分配了网关。或者由于某种原因,您的网卡在启动过程中的设置顺序发生了变化。如果首先设置 eth1,则路由度量将增加 eth1 到 eth0 到达网关地址的成本,因此度量更高。
如果您想 110% 确保首先设置 eth0,并且具有较低的指标,如果 eth0 通过 dhcp 接收其地址,您还可以创建以下文件,如果它是静态分配的,请将 DHCP 更改为 no 下面,并添加地址部分,并输入网关地址
一位同事提供了另一种解决方案,即使用
nmcli
命令行界面,该解决方案基于在此处询问 Ubuntu将网络接口指标设置为固定值中的答案该解决方案将问题中所需接口eth0 的指标设置为较低值。
注意:我不确定当eth0接口被弹回时如何/为什么维持较低的指标,但在测试时它确实有效。
这个答案和选定的答案都适用于OP。