设置是这样的:
linux 系统(debian 7 作为 VBox 来宾)具有以下接口:
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:de:a3:54 brd ff:ff:ff:ff:ff:ff
inet 201.1.1.1/24 brd 201.1.1.255 scope global eth0
3: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/ether 9e:7a:83:ec:5e:47 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 brd 10.0.0.255 scope global tap0
路由表由 quagga ripv2 守护进程填充,如下所示:
$ ip route
10.0.0.0/24 dev tap0 proto kernel scope link src 10.0.0.1
201.1.1.0/24 dev eth0 proto kernel scope link src 201.1.1.1
202.1.1.0/24 via 10.0.0.2 dev tap0 proto zebra metric 2
通过接口 tap0 从另一个子网接收 UDP 数据包。他们的目的地总是 201.1.1.1:30000。
但是,根据它们的源地址,netcat 侦听器会看到或不会看到其中的一些。
这是 tcpdump 输出:
$ sudo /usr/sbin/tcpdump -i tap0 port 30000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes
17:25:36.060532 IP 10.0.0.2.38353 > 201.1.1.1.30000: UDP, length 6
17:25:52.073758 IP 202.1.1.1.30000 > 201.1.1.1.30000: UDP, length 457
和 netcat 输出:
$ netcat -vnulp 30000
listening on [any] 30000 ...
connect to [10.0.0.1] from (UNKNOWN) [10.0.0.2] 38353
hello
第一个数据包(len 6,用 netcat 发送)被正确接收。未收到第二个数据包(len 457,使用绑定到 202.1.1.1 的数据报套接字发送)。
我应该怎么做才能让 netcat 正确接收两个数据包?
注意:iptables 是空的;/proc/sys/net/ipv4/ip_forward=1