veth pair对互相之间无法ping通
我们创建一对veth,然后配置ip
1 | [root@t-middle01 ~]# ip link add veth0 type veth peer name veth1 |

提两个问题?
ping -I 1.2.3.100 1.2.3.200能不能通?ping -I veth0 1.2.3.200能不能通?
我的测试结果
- ip ping能通
- veth0 不通
很困惑。看TCP dump抓包情况。对veth0、veth1、lo回环设备进行监听
ip ping的场景

可以ping通

veth0网卡没有任何流量

veth1网卡也没有任何流量

发现icmp的请求和响应包都是从lo回环设备上走的。
veth ping的情况

ping不通

veth0发起arp请求
因为veth0不知道1.2.3.200的MAC地址,于是,veth1广播了arp request

veth1也发起arp请求,找1.2.3.200
这个有点奇怪。自己就是1.2.3.200。为什么不响应呢?

lo回环设备返回1.2.3.200无法到达。
什么原因?为什么veth1不响应arp?
经多方查找,发现是系统内核中一些 ARP 相关的默认配置限制所导致的
当前的配置

修改为
1 | echo 1 > /proc/sys/net/ipv4/conf/veth1/accept_local |
再测试,还是不通
再次抓包。现在情况有些不同了。

veth0的情况,看到发出了arp request。并且收到了arp reply。

veth1收到了veth0的icmp request。但是没有发出icmp replay

lo没收到icmp request,但是发出了icmp replay