数据包不通过 iptables 路由,如何调试

数据包不通过 iptables 路由,如何调试

我正在使用 OpenStack 和 OVS。这是我的情况:

  • 从远程主机,我使用 IP A ping 虚拟机。
  • 本地网关收到回应请求,然后发送一个包含 IP A 和 MAC 地址 A' 的数据包(基于网关上固定的 IP-MAC 映射)
  • 主机上的虚拟路由器(MAC 地址为 R)以某种方式在其外部接口上接收了数据包。我使用 tcpdump 进行了检查。
  • 在虚拟路由器上,有 NAT 规则将地址 A 转换为内部地址 192.168.100.40:
Chain neutron-l3-agent-PREROUTING (1 references)
target     prot opt source               destination         
DNAT       all  --  anywhere             46.105.252.217       to:192.168.100.43
DNAT       all  --  anywhere             46.105.252.219       to:192.168.100.40

但问题是这些规则从未被满足。我用

iptables -t nat -L -v -n

并发现这些规则的命中次数 = 0。

我不知道该如何调试这种情况。是不是因为 MAC 地址与路由器的 MAC 不同导致数据包被丢弃?如果是,为什么 tcpdump 显示消息。

如果通过了 MAC 地址检查,为什么这些数据包没有命中 iptables 规则。我该如何调试这种情况?

相关内容