ask*_*djd 7 networking iptables icmp
总之,我想让 Tun 设备流量通过另一个具有 Internet 连接的网络接口来回转发。虽然我可以看到流量传到互联网并返回,但它没有路由回我的 Tun 设备。
这是我的设置:
我在 VirtualBox 下使用 Mint Linux 15 VM 进行了非常简单的设置,Win7 作为主机。
在 VM 中,有两个网络接口 - eth0 和 tun0。
tun0 接口被分配为10.0.5.1/24。
ip tuntap add dev tun0 mode tun user askldjd
ip link set tun0 up
ip addr add 10.0.5.1/24 dev tun0
Run Code Online (Sandbox Code Playgroud)我设置了我的 iptables 规则来伪装所有通过 eth0 流出的流量。
iptables -I FORWARD -i tun0 -o eth0 -s 10.0.5.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
我使用一个简单的ping -I
. 所以在某种程度上,我的 iptable 规则是有效的。
ping -I 10.0.5.1 google.com
PING google.com (74.125.228.65) from 10.0.5.1 : 56(84) bytes of data.
64 bytes from iad23s07-in-f1.1e100.net (74.125.228.65): icmp_req=1 ttl=55 time=7.46 ms
Run Code Online (Sandbox Code Playgroud)
我的下一步是创建一个 src = 10.0.5.1 和 dst = 74.125.228.6 (google.com) 的 ICMP 请求数据包。这是通过 tcpdump 捕获完成的,所以我知道数据包字段/校验和都是有效的。我使用一个非常简单的 Python 脚本将此数据包发送到原始 IP 套接字。
在运行python脚本之前,我设置了tshark来监控eth0和tun0。
tshark -i eth0
tshark -i tun0
Run Code Online (Sandbox Code Playgroud)
然后我运行脚本。从 tshark 控制台,我可以看到 ICMP 请求发出,ICMP 回复从谷歌返回。
1811.947250 192.168.1.115 -> 74.125.228.6 ICMP 98 Echo (ping) request id=0x0990, seq=1/256, ttl=64
1811.955146 74.125.228.6 -> 192.168.1.115 ICMP 98 Echo (ping) reply id=0x0990, seq=1/256, ttl=55
Run Code Online (Sandbox Code Playgroud)
从 tun0 tshark 窗口,我什么也没看到。
在我看来,由于 ICMP 请求数据包设置为 source = 10.0.5.1,我希望 IPTable 在返回时取消对 ICMP 回复的处理。这不会发生。
所以要么我的 IPTables 设置不正确,要么我只是误解了 Tun 设备的概念。任何指导将不胜感激。
如果我误用了任何术语,我深表歉意。我是网络方面的新手。
小智 2
您的主要错误是:假设此类流量将被转发。事实并非如此。从虚拟机的角度来看,这是传出流量,而不是转发流量。ICMP 回复到达 eth0 并进入协议栈,因此,您在 tun0 设备上看不到它们。有关更多详细信息,您可以查看此处:https://serverfault.com/questions/554477/tap0-not-receiving-traffic/554698
归档时间: |
|
查看次数: |
14916 次 |
最近记录: |