我有4个tap接口,tap0和tap1连接,tap2和tap3
也是如此vde_switch -d -tap tap0 -tap tap1 click
vde_switch -d -tap tap2 -tap tap3 --sock /run/vde.ctl/ctl2
然后我为tap1和tap2
指定了ipip addr add 1.1.1.1/24 dev tap1
ip addr add 1.2.1.1/24 dev tap2
从原始套接字应用程序中,我从tap0发送了一个udp数据包,其中包含源IP 1.1.1.3和目标ip 1.2.1.3,它到达tap3(根据wireshark)。
问题是,如果我发送碎片的ip / udp数据包,Linux不会将它转发到tap3。
我检查了碎片的ip包(第一段),它的校验和和目标mac addr都没问题。有趣的是,如果我删除ip header中的“more fragment”位(ip checksum将改变),那么它就会被转发。
顺便说一句,我在64位笔记本电脑上使用Linux 3.19.0-65。
知道为什么吗?非常感谢!
EDIT1
以下是ip route list
default via 10.0.0.1 dev wlan0 proto static
1.1.1.0/24 dev tap1 proto kernel scope link src 1.1.1.1
1.2.1.0/24 dev tap2 proto kernel scope link src 1.2.1.1
10.0.0.0/24 dev wlan0 proto kernel scope link src 10.0.0.3 metric 9
172.16.83.0/24 dev vmnet1 proto kernel scope link src 172.16.83.1
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.181.0/24 dev vmnet8 proto kernel scope link src 192.168.181.1
EDIT2
这是在tap0接口上捕获的IP片段数据包的pcap的link。