我想转发来自互联网的所有数据包到tun0。 快速scheme:
internet < – > eth0(10.68.195.23)< – > tun0(10.68.195.78)< – >本地程序。
目前我正在使用ROUTE目标来实现这个function
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)
经过一番快速search,原来这也是可能的,但是不知道该怎么办。
iptables -t mangle -A PREROUTING -i eth0 xxx -j MARK –set-mark 1
ip规则添加fwmark 1表(nb?)
顺便说一句,我正在运行Debian与安全更新挤。
约翰尼·艾伦
在两个接口上使用相同的networking地址是很麻烦的。 我会重新编号tun0networking,然后build立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的数据包到达这个主机,所以在这个networking上的所有主机(或至less那些需要联系另一边的盒子)需要
ip ra 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