![数据包不通过 iptables 路由,如何调试](https://linux22.com/image/636260/%E6%95%B0%E6%8D%AE%E5%8C%85%E4%B8%8D%E9%80%9A%E8%BF%87%20iptables%20%E8%B7%AF%E7%94%B1%EF%BC%8C%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95.png)
我正在使用 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 规则。我该如何调试这种情况?