0%

Linux双网卡默认路由metric不正确,导致SSH连接失败问题定位

测试环境

VMware虚拟机 RockyLinux 9 x86_64

双网卡:eth0(访问外网): 10.206.216.92/24; eth1(访问内网) 192.168.1.4/24

问题描述

虚拟机重启后,SSH连接失败,提示”Connection time out”,重启之前SSH连接还是正常的。

定位过程

登录Vmware串口,先确认sshd进程是否启动,通过ps查看sshd进程运行进程正常, netstat查看22号端口LISTEN,这一步没问题。

1
2
3
4
ps axf | grep sshd
996 ? Ss 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
ss -antp | grep 22 | grep LISTEN
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=996,fd=3))

再通过tcpdump -i eth0 port 22 抓包,确认是否收到SSH请求报文,排除防火墙设置的原因。

从抓包结果看,只有收的包,没有发出去的包。再用route命令查看路由表,发现问题:eth0默认路由Metric值为101,大于eth1的Metric(100),这说明eth1默认路由优先级更高,结果应答报文从eth1发出去了,导致客户端收不到应答,显示”Connection time out”

通过dmesg查看虚拟机启动日志,发现eth1居然先于eth0 UP,所以系统自动分配给eth1的metric更小(优先级更高)。而之前SSH连接正常的时候,都是eth0先UP。

解决方法

手动设置下两个网卡的metric值,保证eth0的ipv4.route-metric小于eth1就行。写个脚本每次启动跑一下:

1
2
3
4
5
nmcli connection modify eth0 ipv4.route-metric 100
nmcli connection modify eth1 ipv4.route-metric 101
nmcli c up eth0
nmcli c up eth1
nmcli c reload

查看网卡配置文件确认修改生效:
image5.png