我的老板太偏执了,想让我帮他组织某种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 如果将VPN2设置为默认网关,或者选择指定的主机,则可以从VPN1中使用它,如下所示:
vpn1 # route add -host 8.8.8.8 dev tun1 我不能使用的是来自客户端的全链VPN1-VPN2-Internet。我尝试将流量从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请求,但无法得到任何响应。
如何通过全链转发客户端的所有通信量?
编辑:(全部在vpn1上)
tcpdump -i tun0 icmp显示10.0.1.6(客户端)接入互联网的请求。
tcpdump -i tun1没有显示任何内容
tcpdump -i eth0显示与tun0相同,10.0.1.6(客户端)发送请求
我的想法是iptable规则应该将tun0转发给tun1,反之亦然,但出于某种原因,从tun0到eth0的通信量,然后再转到互联网,会不会是问题所在?
发布于 2013-05-31 12:06:47
我设法让这玩意正常工作了。基本上,我需要将来自客户端的所有数据包转发到VPN1的VPN1接口到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 很好走了!现在,为了测试,我在客户端上做了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
....就像自动化和后置脚本.谢谢你帮忙!
https://serverfault.com/questions/512160
复制相似问题