使用 iptables 将 IP 流量重定向到 tun0

使用 iptables 将 IP 流量重定向到 tun0

我想将所有来自互联网的数据包转发到 tun0。快速方案:

internet <-> eth0 (10.68.195.23) <-> tun0 (10.68.195.78) <-> 本地程序。

目前我正在使用 ROUTE 目标来实现这一点。>

iptables -A PREROUTING -t mangle -p tcp -s 10.68.195.78 -j ROUTE --oif eth0

iptables -A PREROUTING -t mangle -p tcp -d 10.68.195.78 -j ROUTE --oif tun0

然后我了解到 ROUTE 目标支持已从内核 2.6.32(iptables 1.4.8)中删除

经过一些快速搜索后发现,使用标记也可以实现这一点,但不确定如何做。

iptables -t mangle -A PREROUTING -i eth0 xxx -j MARK --set-mark 1

ip 规则添加 fwmark 1 表 (nb?)

顺便说一句,我正在运行带有安全更新的 Debian squeeze。

约翰尼艾伦

答案1

在两个接口上使用相同的网络地址会带来麻烦。我会重新编号 tun0 网络,然后设置 NAT 来处理后果。将 tun0 设置在 192.168.0.1(本地)和 192.168.0.2(远程)之间:

iptables -t nat -I PREROUTING -d 10.68.195.78 -j DNAT --to-dest 192.168.0.2

这仍然要求 10.68.195.78 的数据包到达此主机,因此此网络上的所有主机(或至少是那些需要联系另一端的盒子的主机)都需要

ip r a 10.68.195.78 via 10.68.195.23

或者,您可以使用代理 ARP,但这通常很混乱。

此外,另一端的盒子需要有其默认路由指向隧道,以便返回的数据包以相同的方式传输;您还可以在 POSTROUTING 中添加 SNAT 规则,以使所有连接都显示为来自另一个隧道端点的另一个盒子:

iptables -t nat -I POSTROUTING -d 10.68.195.78 -j SNAT --to-source 192.168.0.1

相关内容