为什么通过 libpcap 发送的数据包会被本地主机过滤掉?

为什么通过 libpcap 发送的数据包会被本地主机过滤掉?

我有一些在 Linux 上运行的模拟器软件(Linux 主机)其中有另一个 linux (linux_sim) 正在运行。模拟器使用 libpcap 访问以太网,以提供网络模拟linux_sim. 网络已开启linux_主机linux_sim好的。我可以从以下位置访问 LAN 中的任何主机linux_sim(例如,它使用 dhcp 来设置 IP)。

问题是从linux_sim达不到linux_主机,但它们以相反的方向传播。后者我可以通过运行 wireshark 来证明linux_主机:如果我 pinglinux_simlinux_主机- 我看到了 ICMP 请求和回复(来自linux_sim) 未达到linux_主机如果我反过来 ping,我只会看到 ICMP 请求(来自linux_sim)。

下面大致描述了我所拥有的架构:

                   LAN
                    |
   linux_host-----[eth0]
                    |              
                  libpcap         
                    |
                 simulator
                    |
                linux_sim

附言

linux_主机linux_sim具有不同的 MAC 地址、IP 并且从 LAN 看起来像独立的 Linux 主机。

我在三台不同的 Linux 机器上尝试过,结果相同(Debian、CentOS 和 Gentoo)。

那么,在这种情况下,您可以建议检查/调整/配置什么?我认为需要一种不寻常的路由/过滤配置linux_主机在这种情况下。

更新

广播流量确实来自linux_simlinux_主机因为我看到 IP 地址已通过 ARP 解析(请求广播已得到回复),所以 ping 启动时 OK。

答案1

我认为一个很好的测试是将 linux_host 和 linux_sim 放在不同的子网上。在这个 VLAN 上放置一个路由器(可能是另一个 Linux 设备),并给它两个子接口,IP 都在两个子网中,让它能够在设备之间路由。我认为您在反向路径检测方面遇到了某种问题。您已经关闭它了吗?

http://www.wlug.org.nz/ReversePathFiltering

答案2

您没有太多关于网络配置的信息。如果您的模拟器通过桥接接口访问外部世界,您必须考虑 NIC 硬件(及其驱动程序)正在做什么。例如,在大多数较新的 Intel NIC 上,您必须禁用 GRO 才能使 TCP 与桥接虚拟机一起工作。NIC 硬件卸载和 IO-SRV 也经常出现问题。查看驱动程序文档以获取有关桥接的说明。

相关内容