我的老板有些偏执狂,要我为他组织一些VPN链接。 我提出了以下计划:
Client VPN1 VPN2 10.0.1.x[tun0]------10.0.1.1[tun0] [1.1.1.1][eth0] 10.0.2.x[tun1]----------10.0.2.1[tun0] 2.2.2.2[eth0] 3.3.3.3[eth0]------internet
我可以通过iptables转发从客户端使用VPN1,如下所示:
vpn1 # iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT vpn1 # iptables -A FORWARD -d 10.0.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT vpn1 # iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 2.2.2.2
如果我使用默认网关,或者如果select指定的主机,我可以使用VPN1中的VPN2,如下所示:
vpn1 # route add -host 8.8.8.8 dev tun1
我不能使用的是从客户端的全链VPN1-VPN2-Internet。 我尝试转发stream量从tun0到tun1,反之亦然,如下所示:
vpn1 # iptables -A FORWARD -i tun0 -o tun1 -j ACCEPT vpn1 # iptables -A FORWARD -i tun1 -o tun0 -j ACCEPT
在这种情况下,我可以在两个VPN1 tun接口上看到客户端IP上的ICMP请求,但无法获得任何响应。
我怎样才能从客户端通过全链路转发所有stream量?
编辑:(全部在vpn1上)
tcpdump -i tun0 icmp显示请求与10.0.1.6(客户端)上网
tcpdump -i tun1什么都不显示
tcpdump -i eth0显示与tun0,10.0.1.6(客户端)发送请求相同
我的想法是,iptables规则应该将tun0转发到tun1,反之亦然,但由于某种原因tun0的stream量到达eth0,然后closures到互联网,这可能是问题吗?
我设法使这个事情工作。 基本上,我需要将来自Client的所有数据包转发到VPN1的tun0接口到VPN1 tun1的IP地址(10.0.2.6)。
iptables -A FORWARD -s 10.0.1.0/24 -j ACCEPT iptables -A FORWARD -d 10.0.1.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -j SNAT --to-source 10.0.2.6
其次,我需要通过添加这个规则来利用iproute2系统:
这将默认路由添加到表120
ip route add default via 10.0.2.6 table 120
并且这个基于规则的路由,使用分组的src作为条件
ip rule add from 10.0.1.0/24 table 120
好,去! 现在要testing,我在客户端做了traceroute 8.8.8.8:
1 10.0.1.1 (10.0.1.1) 223.570 ms 444.898 ms 444.875 ms 2 10.0.2.1 (10.0.2.1) 444.845 ms 666.709 ms 889.544 ms ....
现在只是像自动化和后期脚本的小东西…感谢您的帮助!