以下问题只是我遇到问题的一个更大的解决scheme。 所有其他元素似乎工作到目前为止,所以我会尝试描述我有问题的小片。
我有一台linux机器, tun0 (隧道接口)和eth0 (女巫是我的默认网关)。
目标:我的目标是接收来自tun0的数据包,并将它们转发到默认网关。 所以实际上非常简单的NAT情况下,我想与tun0共享互联网,它伪造了物理接口。
Tun已经创build使用
sudo openvpn --mktun --dev tun0 --user USER sudo ip addr add 10.2.0.1/24 dev tun0 sudo ip link set tun0 up
所以我已经启动并运行了,我可以ping通它等等。另外,我有C ++应用程序,它连接到这个TUN设备,可以读取和写入它。 (fti:这是我遵循的教程: http : //backreference.org/2010/03/26/tuntap-interface-tutorial/ )
我把一些正确的ICMP(ping)请求转到8.8.8.8到C ++的字节数组中。 现在,使用我的程序,我把它写到tun0设备上。 有ICMP请求
那么,我有以下路线:
iptables -F # flush iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE iptables --append FORWARD --in-interface tun0 -j ACCEPT
在这里我卡住:(包不会转发到默认的gw(tshark只能看到它在tun0收到,我想这是正确的)
less了什么东西? 也许一些替代方法(但它必须使用tun设备来完成,而且我必须能够使用它)。 附加信息:
预先感谢任何提示!
另一种解决scheme是使用bridge 。因此,您可以将eth0连接到eth0,并且不需要在tun0上设置nat或ip,只需将eth0的相同子网中的IP与您现在在客户端的隧道接口上使用的网关。
设置桥梁的命令:
# brctl addbr br0 # brctl addif br0 eth0 tun0
http://www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
要使用brctl,必须安装
bridge-utils软件包。
如果你的发行版是Ubuntu:aptitude install bridge-utils