如何从虚拟 tun0 设备调试路由问题?

如何从虚拟 tun0 设备调试路由问题?

我有一个程序(由我编写)可以创建一个 tun0 设备并设置路由,以便可以从此设备读取发往 172.16.1.0/24 子网的数据包。我现在正尝试朝另一个方向前进,将数据包写入 tun 设备,以便

我的第一个尝试,只是更改源和目​​标地址和端口,效果很好。我可以运行以下命令:

nc -u -s MY_IP -p 4001 172.16.1.3 4000

我的输入得到了回应。

我的第二次尝试,实际上是从头开始生成输出数据包,但目前失败了。

我可以运行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  P-t-P: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

我如何调试 tun 数据包被丢弃的位置?

(顺便说一句,所有数据包都是 UDP。)

答案1

只是一种预感-Linux 是否允许数据包路由?

跑步cat /proc/sys/net/ipv4/ip_forward- 你期望看到 1. 如果它是 0 运行:

echo 1 > /proc/sys/net/ipv4/ip_forward

还要检查你的 iptables - 一开始你可能希望对 FORWARD 链有 ACCEPT :

iptables -P FORWARD ACCEPT
iptables -F FORWARD

在排除路由/防火墙故障时,我最常用的是 tcpdump [您提到过的]。

答案2

也许这有帮助:

ip route get 198.51.100.1

或者:

ip route get to 198.51.100.1 from 192.168.0.2 iif eth0

来源:http://www.microhowto.info/troubleshooting/troubleshooting_the_routing_table.html

相关内容