我有一个程序(由我写的)创build一个tun0设备,并build立一个路由,以便可以从这个设备读取去往172.16.1.0/24子网的数据包。 我现在试着去另一个方向,把数据包写到可以被接收的tun设备上
我的第一个努力,只是改变源和目的地址和端口工作正常。 我可以运行以下内容:
nc -u -s MY_IP -p 4001 172.16.1.3 4000
和我的input得到回应。
我的第二个努力,实际上从头开始生成输出数据包,目前正在失败。
我可以运行tcpdump -i tun0并查看我写的数据包:
11:30:14.433489 IP (tos 0x0, ttl 32, id 0, offset 0, flags [none], proto UDP (17), length 56) 172.16.1.2.54167 > Ubuntu-dbacher.local.4011: [udp sum ok] UDP, length 28
但是我的听众( nc -l -u -s MY_IP -p 4011 )没有看到任何东西。
我怀疑有什么问题阻止了tun0设备将数据包路由出去,但是我不知道如何查看数据包被丢弃的位置。
$ ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:172.16.1.1 PtP:172.16.1.1 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.16.1.0 172.16.1.1 255.255.255.0 UG 0 0 0 tun0 10.10.48.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 0.0.0.0 10.10.48.1 0.0.0.0 UG 0 0 0 eth0 $ cat /proc/sys/net/ipv4/ip_forward 1
如何debuggingtun数据包被丢弃的位置?
(顺便说一下,所有的数据包都是UDP。)
只是一个预感 – Linux允许包路由?
运行cat / proc / sys / net / ipv4 / ip_forward – 你期望看到1.如果是0运行:
echo 1 > /proc/sys/net/ipv4/ip_forward
也检查你的iptables – 一开始你可能想要接受FORWARD链:
iptables -P FORWARD ACCEPT iptables -F FORWARD
当排除路由/防火墙故障时,我经常使用tcpdump [你提到过]。