![如何启用 TUN/TAP 转发?](https://linux22.com/image/551670/%E5%A6%82%E4%BD%95%E5%90%AF%E7%94%A8%20TUN%2FTAP%20%E8%BD%AC%E5%8F%91%EF%BC%9F.png)
10.3.0.2
我有一个将数据包(目标地址)写入TUN/TAP 接口的程序。
网络:
host1|tun0----eth1(10.3.0.1)|-------------------host2|eth1(10.3.0.2)|
Wireshark 从接口捕获这些数据包,tun0
但它们不会被转发到接口eth1
。
命令:
sysctl -w net.ipv4.ip_forward=1
sysctl -p
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT
/etc/init.d/networking restart
/etc/init.d/openvpn restart
答案1
您用的是桶还是水龙头?
如果您希望远程主机位于同一子网,则应使用 tap 而不是 tun,从 eth1 中删除 10.3.0.1,在 eth1 和 tap0 之间创建桥接,并将 10.3.0.1 分配给桥接接口。
这比 tun 效率稍低,但可以允许您的 vpn 主机和本地网络之间的非 IP 和广播流量。(因此,允许您的 vpn 主机在本地网络上使用 dhcp 服务器,或者如果他们愿意的话,欺骗他们的地址)。
如果您希望为 vpn 主机提供单独的网络,则应为隧道指定一对地址(如果您在多客户端服务器模式而不是 p2p 模式下使用 openvpn,则应指定更多地址),并且应确保这些地址已绑定到 tun 接口,并且 tun 已启动。在您的绘图中,没有隧道的地址。
根据您的发行版,重新启动网络服务可能会破坏您对 iptables 所做的更改。
答案2
您需要在两个接口(tun0 和 eth0)之间设置桥接,以下是一些有关如何设置桥接的文档:
http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge
答案3
您遇到的问题是由于没有在内核中启用 gre 模块:sudo modprobe ip_gre