You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

单向Ping通故障求助:PC可Ping通笔记本但反向无响应

单向Ping通故障求助:PC可Ping通笔记本但反向无响应

问题背景

我有两台设备(PC和笔记本)通过以太网组成小型局域网,都配置了静态IP:

  • 笔记本网卡:IP 192.168.1.101,逻辑接口 enp0s31f6
  • PC网卡:IP 192.168.1.103,逻辑接口 enp1s0f2

PC向笔记本发起ping请求完全正常:

$ ping -I enp1s0f2 192.168.1.101

PING 192.168.1.101 (192.168.1.101) from 192.168.1.103 enp1s0f2: 56(84) bytes of data.

64 bytes from 192.168.1.101: icmp_seq=1 ttl=64 time=0.354 ms
64 bytes from 192.168.1.101: icmp_seq=2 ttl=64 time=0.377 ms
64 bytes from 192.168.1.101: icmp_seq=3 ttl=64 time=0.260 ms
64 bytes from 192.168.1.101: icmp_seq=4 ttl=64 time=0.418 ms
64 bytes from 192.168.1.101: icmp_seq=5 ttl=64 time=0.253 ms
64 bytes from 192.168.1.101: icmp_seq=6 ttl=64 time=0.250 ms
^C

--- 192.168.1.101 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5123ms
rtt min/avg/max/mdev = 0.250/0.318/0.418/0.067 ms

但反向从笔记本ping PC时,完全收不到响应。在PC上通过tcpdump抓包,能看到笔记本发来的ICMP请求,但PC没有发送任何回复:

sudo tcpdump -i enp1s0f2

[sudo] password for user:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp1s0f2, link-type EN10MB (Ethernet), capture size 262144 bytes

20:22:38.442345 IP 192.168.1.101 > user: ICMP echo request, id 62, seq 19, length 64
20:22:39.465977 IP 192.168.1.101 > user: ICMP echo request, id 62, seq 20, length 64
20:22:40.490038 IP 192.168.1.101 > user: ICMP echo request, id 62, seq 21, length 64
20:22:41.518012 IP 192.168.1.101 > user: ICMP echo request, id 62, seq 22, length 64

查看PC的ARP缓存,发现存在两个关于192.168.1.101的条目:

$ arp -a

? (192.168.1.101) at 48:9e:bd:75:b7:16 [ether] on enp1s0f2
? (192.168.1.101) at <incomplete> on enp1s0f3

我尝试清空ARP缓存后重试:当PC ping笔记本成功时,第一个正常条目出现;当笔记本ping PC失败时,第二个<incomplete>条目就会生成。

想请教大家这是什么原因导致的?


排查建议

看起来你遇到了典型的多网卡路由/ARP决策异常问题,结合你的ARP缓存和抓包信息,我整理了几个排查步骤:

  • 重点关注PC的第二个网卡enp1s0f3
    你的PC显然有两个以太网接口,当笔记本的ICMP请求到达enp1s0f2后,PC可能错误地选择了enp1s0f3作为回复的出口。如果这个接口未连接网线、IP不在同一网段,就会导致ARP解析失败(也就是那个<incomplete>条目),最终ICMP回复无法发出。

  • 检查PC的路由表
    在PC上执行ip route show,查看192.168.1.0/24网段的路由指向哪个接口。如果该网段的路由同时存在两个接口,或者默认路由指向了enp1s0f3,就会出现回复走错误接口的情况。你可以手动添加一条明确的路由规则,强制192.168.1.0/24流量走enp1s0f2

    sudo ip route add 192.168.1.0/24 dev enp1s0f2 metric 100
    
  • 验证防火墙规则
    虽然能抓到ICMP请求,但还是要确认PC的防火墙是否拦截了ICMP回复。可以临时关闭防火墙测试:

    • Debian/Ubuntu系:sudo ufw disable
    • CentOS/RHEL系:sudo systemctl stop firewalld
      如果关闭后能正常ping通,就需要调整防火墙规则,允许ICMP echo-reply从enp1s0f2发出。
  • 绑定静态ARP条目(临时测试)
    你可以手动将笔记本的IP和MAC绑定到enp1s0f2接口,强制PC通过该接口与笔记本通信:

    sudo arp -s 192.168.1.101 48:9e:bd:75:b7:16 -i enp1s0f2
    

    绑定后再测试反向ping,如果能通,就说明PC的ARP选路逻辑存在问题。

  • 禁用闲置网卡
    如果enp1s0f3是闲置状态,建议直接禁用它:

    sudo ip link set enp1s0f3 down
    sudo ip neigh flush all
    

    多网卡共存时,系统的路由和ARP决策很容易出现这种“跑偏”的情况,禁用闲置网卡是最简单的解决办法。


备注:内容来源于stack exchange,提问作者stochasticlover1

火山引擎 最新活动