事情是这样的,我在生产环境中使用tcpdump
并创建了一个仅 UDP文件。pcap
然后使用该工具tcprewrite
,我将UDP数据包的dst IP和MAC地址更新为vm2,src IP更新为vm1,但src MAC地址更新为00:00:00:00:00:00
。我重新计算校验和。
然后我从 vm1tcpreplay
制作了文件,然后检查了vm2,我看到 vm2 实际上收到了 UDP 数据包,但 src MAC 已更新为网络网关的。pcap
tcpdump
PS我用的云云,vm1 和 vm2 位于相同的子网。
|-----| |-----|
| vm1 | ---|gw|----| vm2 |
|-----| |-----|
然后我tcpdump
在 vm1 上运行,我看到 UDP 数据包作为 MAC 地址发送00:00:00:00:00:00
,因此路由器(网关)接受它(尽管它是“错误的”)并更新 MAC 并转发到 vm2。
所以对我来说,只要IP地址和数据包校验和良好,MAC地址并不重要,否则路由器为什么不丢弃它呢?
答案1
我是否正确理解 vm1-gw 连接具有与 vm2-gw 不同的 IP 网络?
如果是这样,则网关就像 L3 路由器一样工作。 MAC 地址是仅绑定到第二层的值,并且当数据包通过路由器时始终会丢失。更改您所描述的 MAC 地址是正常行为。路由器在两个接口上都有不同的广播域。 MAC 地址仅在广播域内保持不变,其中 L2 层值(即 MAC 地址(ARP 除外))足以进行通信。 ARP 协议将帮助广播域中的节点使用其 IP 地址找出彼此的 MAC 地址,然后节点之间的连接仅通过 MAC 进行。
如果你想使用网关作为防火墙来过滤不同IP网络之间的连接,你需要使用IP地址,而不是MAC。
如果您另有目的,请澄清问题。