添加dummy接口后本地设备SSH连接中断及ping异常的原因排查
问题描述
为研究网络协议栈,在本地网络开展实验:
- 两台设备IP分别为
192.168.1.25和192.168.1.232,从第一台设备通过SSH连接到第二台设备(192.168.1.232归属第二台的wlo1接口)。 - 在第二台设备的tmux会话中执行以下命令:
sudo ip link add vvv_0 type dummy ifconfig vvv_0 192.168.1.250
(该IP未分配给其他设备)
执行第二条命令后,SSH连接中断,一段时间后会话自动终止并显示Broken pipe信息。
后续补充实验:
- 在第一台设备执行:
ping 192.168.1.232
- 同时在第二台设备执行:
sudo tcpdump icmp
观察到:第一台设备ping请求全部超时;第二台设备捕获到了所有ICMP请求数据包,但第一台未收到回应。
在第二台设备执行:
sudo ifconfig vvv_0 0.0.0.0
之后,两台设备可重新建立SSH连接。
请问此连接中断的原因是什么?
原因分析
核心原因是Linux系统的源地址选择策略导致响应数据包走了虚拟dummy接口,无法正常发出:
- 当在第二台设备上创建dummy接口
vvv_0并配置同网段IP192.168.1.250后,系统路由表中会新增一条指向该接口的同网段路由。此时,系统拥有两个处于同一网段的接口(wlo1和vvv_0)。 - 当第二台设备收到来自
192.168.1.25的SSH或ping请求时,生成响应数据包时,Linux的源地址选择规则会优先选择vvv_0的IP作为响应的源IP(同网段多接口场景下,系统可能选择新增的接口作为默认出口)。 - dummy接口是纯虚拟的网络接口,没有对应的物理链路来转发数据包,因此响应数据包无法被传递到本地网络中。第一台设备收不到任何响应,SSH连接因长时间无交互心跳触发超时中断,最终显示
Broken pipe;ping请求也会全部超时。 - 当将
vvv_0的IP设为0.0.0.0后,该接口不再参与同网段的路由计算和源地址选择,系统恢复使用wlo1接口的192.168.1.232作为响应源IP,数据包能正常通过物理链路发送,因此连接可以重新建立。
内容的提问来源于stack exchange,提问作者vglv
相关产品推荐
相关产品推荐

