使用 openvpn 进行 VPN 链接

使用 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     

如果我将其设为默认网关,我可以从 VPN1 使用 VPN2,或者如果我选择指定的主机,如下所示:

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

在这种情况下,我可以看到 ICMP 请求从两个 VPN1 tun 接口上的客户端 IP 发出,但无法得到任何响应。

如何通过完整链转发来自客户端的所有流量?

编辑:(全部在 vpn1 上)

tcpdump -i tun0 icmp 显示 10.0.1.6(客户端)的请求进入互联网

tcpdump -i tun1 没有显示任何内容

tcpdump -i eth0 显示与 tun0 相同,10.0.1.6(客户端)发送请求

我的想法是 iptables 规则应该将 tun0 转发到 tun1 反之亦然,但由于某种原因,来自 tun0 的流量到达 eth0 然后流向互联网,这可能是问题所在吗?

答案1

我设法让这个东西工作了。基本上,我需要将所有来自客户端到 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 

一切顺利!现在进行测试,我在客户端上执行 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
....

现在只是一些像自动化和发布脚本这样的小事......谢谢你的帮助!

相关内容