我用机器 A←–→B←–→C 设置了一个物理网络。 IP 和以太网配置总结如下:
A(eth0: 10.10.10.2) ←—→ (eth0: 10.10.10.3)B(eth1: 192.168.0.3) ←—→ (eth1: 192.168.0.2)C
我想从 A 向 C 发送一个 UDP 数据包。tcpdump
数据包 A 如下所示:10.10.10.2:10000-->192.168.0.2:10001
(10000 或 10001 是端口号)。当然,数据包必须经过 B,从eth0
B 进入并通过 出去eth1
。
B 的路由表已配置为子网 192.168.0.0/24 至eth1
。且/proc/sys/net/ipv4/ip_forward
为 1。
tcpdump
B 确认可以在 接收 UDP 数据包eth0
。但eth1
什么也没有(C 也没有),这意味着数据包没有正确转发。 ( iptables
B 站没有任何下降政策。)
我在虚拟机上重新创建了拓扑,并且它有效。但在真实的物理机上,它不起作用。我还尝试编写一个简单的内核模块,每当检测到目标端口为 10001(如前面的示例)的传入 UDP 数据包时,netfilter
该模块就会执行此操作printk("some messages")
,但 Linux 内核仍然不会打印任何内容。
附言。 B的操作系统是Debian 6.0.10(挤压)。
如果有人能够阐明这个问题,我将非常感激。