事情是这样的,我使用了tcpdump并从生产环境中创建了一个UDP专用的pcap文件。
然后使用工具tcprewrite,将UDP数据包dst和MAC地址更新为vm2,src更新为vm1,src更新为00:00:00:00:00:00。我重新计算校验和。
然后我从tcpreplay中提取了精心构建的pcap文件,然后检查了vm2上的tcpdump,我看到vm2实际上得到了UDP数据包,但是src MAC被更新到了网络网关。
我使用gcloud,vm1和vm2在相同的子网中。
|-----| |-----|
| vm1 | ---|gw|----| vm2 |
|-----| |-----|然后我在vm1上运行vm1,我看到UDP数据包作为MAC地址00:00:00:00:00:00发送,所以路由器(网关)接受它(尽管它是“错误的”)并更新该MAC并转发给vm2。
所以我发现,只要IP地址和数据包校验和是好的,MAC地址就不重要了,否则路由器为什么不放弃它呢?
发布于 2022-06-27 10:25:06
我是否正确理解vm1-gw连接有一个不同于vm2-gw的IP网络?
如果是这样的话,那么gw就像L3路由器一样工作。MAC地址是仅绑定到第二层的值,当数据包通过路由器时总是丢失。更改您描述的MAC地址是正常行为。路由器在这两个接口上都有不同的广播域。MAC地址仅在广播域中保持不变,其中L2层值,即MAC地址(ARP除外)足以进行通信。ARP协议将帮助广播域中的节点使用各自的IP地址查找彼此的MAC地址,然后节点之间的连接仅由MAC进行。
如果您想使用gw作为防火墙过滤不同IP网络之间的连接,则需要使用IP地址,而不是MAC。
如果你的意图不同,请澄清这个问题。
https://unix.stackexchange.com/questions/706231
复制相似问题