多网卡Linux云主机无法远程登录

前提条件

  • 云主机绑定了两张或以上网卡。
  • 其中至少一张网卡绑定了弹性公网,部分没有绑定弹性公网。

问题现象

无法通过远程登录云主机或无法访问公网。

问题原因

云主机绑定多张网卡时,可能存在默认路由冲突导致。

解决方案

一、通过开机启动项修改默认路由

1、通过vnc登录云主机。

2、查看虚拟网卡和ip信息:ip a。

3、查看云主机默认路由:ip route。

从上面图片可以看到有一条默认路由且当前云主机的默认路由走eth1 网卡,对应内网IP地址是:192.168.10.7。

4、通过控制台点击云主机详情查看默认路由的网卡是否绑定了公网IP:

从网络信息可以看到当前云主机的内网IP:192.168.10.7对应的网卡没有绑定公网IP。因此,需要将主机的默认路由从eth1修改为eth0。

5、通过命令行临时修改默认路由,将eth1修改为eth0。

ip route del default

ip route add default via 192.168.10.1 dev eth0

说明
其中,192.168.10.1是相应网卡对应的网关地址,设置时请修改为相应的地址。

6、部分操作系统中存在两条默认路由,可通过metric(度量值)的大小判断哪条路径更优:

上图中,两条默认路由的第一条metric小于第二条的值,默认路由优先选择eth0,可通过ip route get 8.8.8.8证明:

说明
metric默认值越小,路由选择越优先,用户预期使用的路由,其metric值必须是最小。

针对这种情况,可以通过修改metric值得大小改变路由优先顺序:

ip route del default dev eth1

ip route add default via 192.168.10.1 dev eth1 metric 10

修改后的结果如下:

7、如果需要使默认路由永久生效,需修改开机自启动配置/etc/rc.local,在最后添加如下内容:

ip route del default

ip route add default via 192.168.10.1 dev eth0

或者

ip route del default dev eth1

ip route add default via 192.168.10.1 dev eth1 metric 10

说明
  • 部分系统默认没有开机启动配置,例如:ubuntu 18.4。
  • 如果最后一行exit 0 没有注释,需先在exit 0 之前添加上述内容,或者将其注释。

8、修改完成后,重启云主机。

二、通过netplan修改默认路由

Ubuntu 18.04默认没有/etc/rc.local开机启动配置,但是在Ubuntu 18.04新增了netplan 工具,它是一款是用于配置 Linux 网络的简单工具。下面以Ubuntu 18.04为例我们将介绍如何通过netplan修改默认路由:

1、通过vnc登录云主机。

2、查看虚拟网卡和ip信息:ip a。

3、查看云主机默认路由:ip route。

从上图可以看到当前云主机有两条默认路由,且metric值相同。

说明
metric默认值越小,路由选择越优先,用户预期使用的路由,其metric值必须最小。

4、通过命令行临时修改默认路metric 值,以eth1为例:

ip route del default dev eth1

ip route add default via 192.168.10.1 dev eth1 metric 101

将eth1的metric修改为更大的值,或者将eth0的metric修改为更小的值,提升eth0的默认路由优先选择权。

说明
其中,192.168.10.1是相应网卡对应的网关地址示例,设置时请修改为相应的地址。

5、如果需要使默认路由永久生效,需通过netplan实现:

vim /etc/netplan/01-netcfg.yaml (不同的镜像可能01-netcfg.yaml 名称不一样)

在相应的网卡下面添加如下内容:

gateway4: 192.168.10.1

说明
  • 配置文件为YAML文件格式,您在配置时需要遵循YAML语法规则。
  • YAML不支持制表符(Tab)缩进,请使用空格缩进。
  • 可通过netplan try 检查语法。

6、修改完成后执行netplan apply 路由即刻生效,结果如下:

本文档内容整理自移动云官方帮助中心(查看原文),仅供参考。