如何在Tun设备和eth0之间转发流量?


7

总之,我希望通过另一个具有互联网连接的网络接口来回转发Tun设备流量。虽然我可以看到流量传输到互联网并返回,但它不会路由回我的Tun设备。

这是我的设置:

我有一个非常简单的设置,使用VirtualBox下的Mint Linux 15 VM,Win7作为主机。

在VM中,有两个网络接口 - eth0和tun0。

  • eth0接口连接到Internet,分配为192.168.1.115/24
  • 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
    

我设置了我的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

我用简单的方法测试了规则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

我的下一步是创建一个ICR请求数据包,其中src = 10.0.5.1,dst = 74.125.228.6(google.com)。这是通过tcpdump捕获完成的,所以我知道数据包字段/校验和都是有效的。我使用一个非常简单的Python脚本将此数据包发送到原始IP套接字。

在运行python脚本之前,我设置了tshark来监视eth0和tun0。

    tshark -i eth0
    tshark -i tun0

然后我运行脚本。从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

从tun0 tshark窗口,我什么也看不见。

在我看来,由于ICMP请求数据包被设置为source = 10.0.5.1,我希望IPTable在它返回时取消ICMP Reply。这不会发生。

所以我的IPTables设置不正确,或者我只是误解了Tun设备的概念。任何指导将不胜感激。

如果我滥用任何术语,我会道歉。当它涉及网络时我是新手。

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.