使用openvpn进行VPN链接

我的老板有些偏执狂,要我为他组织一些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 .... 

现在只是像自动化和后期脚本的小东西…感谢您的帮助!