I have a physical network set up with machines A←–→B←–→C. IP and Ethernet configurations are summarized as following:
A(eth0: 10.10.10.2) ←—→ (eth0: 10.10.10.3)B(eth1: 192.168.0.3) ←—→ (eth1: 192.168.0.2)C
I would like to send a UDP packet from A to C.
tcpdump of the packet looks like:
10.10.10.2:10000-->192.168.0.2:10001 (10000 or 10001 are the port numbers). Of course the packet must go through B, coming in at
eth0 of B and going out through
B's routing table is already configured as subnet 192.168.0.0/24 to
/proc/sys/net/ipv4/ip_forward is 1.
tcpdump on B confirms that the UDP packet can be received at
eth1 has nothing (neither for C), which means the packet is not correctly forwarded. (There is not any dropping policy by
iptables at B.)
I recreated the topology on virtual machines, and it works. But on real physical machines, it is not working. I also tried to write a simple kernel module using
netfilter which does
printk("some messages") whenever it detects an incoming UDP packet with destination port, say, 10001 (as previous example), but still the Linux kernel does not print anything.
PS. B's OS is Debian 6.0.10 (squeeze).
I would very much appreciate it if somebody can shed some light on the problem.