我的设置如下:我正在编写一个程序来创建一个屯接口并将原始(第 3 层)数据包写入该接口。例如 ICMP ping 数据包(为了让事情变得简单)。
现在我想将这些数据包从 tun 接口重定向到我的 eth 接口。我已经尝试了典型的 FORWARD iptables 规则,并且选项 ip_forward 设置为 1。
我可以在 wireshark 中看到 tun 接口的有效 ICMP 数据包,但重定向不起作用,wireshark 中没有显示任何 eth 接口的信息。ping 指向外部服务(例如 8.8.8.8)。
我想我遗漏了为什么这不起作用的一个关键因素,但却看不到它......
信息:我已经搜索了所有“转发至 XX”的帖子,但没有找到真正有效的解决方案。
编辑:
Iptable 规则:
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -A FORWARD -i tun0 -o wlp4s0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.0.0.1/24 -o wlp4s0 -j SNAT --to-source 192.168.2.73
SNAT
我也尝试了以下 MASQUARADE 规则:
sudo iptables -t nat -A POSTROUTING -s 10.0.0.1/24 -o wlp4s0 -j MASQUERADE
两次均未成功。
输出ip addr
:
46: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 10.0.0.1/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1218:6be2:934b:355b/64 scope link stable-privacy
valid_lft forever preferred_lft forever
输出ip route
10.0.0.0/24 dev tun0 proto kernel scope link src 10.0.0.1
和sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1