Mar*_*ski 10 nat routing icmp forwarding tun
以下问题只是我遇到问题的更大解决方案的一部分。到目前为止,所有其他元素似乎都在工作,所以我将尝试描述我有问题的非常小的部分。
我有一台 linux 机器,带有tun0(隧道接口)和eth0(witch 是我默认的互联网网关)。
目标:我的目标是接收从 tun0 传入的数据包,并将它们转发到默认网关。所以实际上非常简单的 NAT 案例,我想与伪造物理接口的 tun0“共享”互联网。
Tun 是使用创建的
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Run Code Online (Sandbox Code Playgroud)
所以我让它启动并运行,我可以 ping 它等等。此外,我有 C++ 应用程序,它连接到这个 TUN 设备,可以读取和写入它。(fti:这是我遵循的教程:http : //backreference.org/2010/03/26/tuntap-interface-tutorial/)
我将一些对 8.8.8.8 发出的正确 ICMP(ping)请求转储到 C++ 中的字节数组中。现在,使用我的程序将它写入 tun0 设备。ICMP 请求有
然后,我有以下路线:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
在这里我被卡住了 :( 数据包没有被转发到默认的 gw (tshark 只在 tun0 上看到它,我想这是正确的)
缺少了什么?也许有一些替代方法(但必须使用 tun 设备来完成,而且我必须能够对它进行读写)。附加信息:
提前感谢您的任何提示!
小智 1
替代解决方案是使用bridge
。因此,您可以将 tun0 与 eth0 桥接,并且无需在 tun0 上进行 nat 或设置 ip,您只需将来自 eth0 的同一子网的 IP 以及您现在在客户端隧道接口上使用的同一网关放置即可。
设置桥接的命令:
# brctl addbr br0
# brctl addif br0 eth0 tun0
Run Code Online (Sandbox Code Playgroud)
www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
要使用 brctl,您必须安装
bridge-utils
软件包。
如果您的发行版是 Ubuntu:aptitude install bridge-utils
归档时间: |
|
查看次数: |
2031 次 |
最近记录: |