前提条件
- 云主机绑定了两张或以上网卡。
- 其中至少一张网卡绑定了弹性公网,部分没有绑定弹性公网。
问题现象
无法通过远程登录云主机或无法访问公网。
问题原因
云主机绑定多张网卡时,可能存在默认路由冲突导致。
解决方案
一、通过开机启动项修改默认路由
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
6、部分操作系统中存在两条默认路由,可通过metric(度量值)的大小判断哪条路径更优:
上图中,两条默认路由的第一条metric小于第二条的值,默认路由优先选择eth0,可通过ip route get 8.8.8.8证明:
针对这种情况,可以通过修改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值相同。
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的默认路由优先选择权。
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 路由即刻生效,结果如下: