使用 openvpn 的 VPN 链接

use*_*985 5 vpn iptables openvpn

我的老板变得特别偏执,并希望我为他组织某种 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
Run Code Online (Sandbox Code Playgroud)

我可以通过 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     
Run Code Online (Sandbox Code Playgroud)

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

vpn1 # route add -host 8.8.8.8 dev tun1      
Run Code Online (Sandbox Code Playgroud)

我不能使用的是来自客户端的全链 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
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:(全部在 vpn1 上)

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

tcpdump -i tun1 什么也没显示

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

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

use*_*985 5

我设法让这件事发挥作用。基本上,我需要将来自客户端的所有数据包转发到 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
Run Code Online (Sandbox Code Playgroud)

其次,我需要通过添加以下规则来利用 iproute2 系统:

这会将默认路由添加到表 120

ip route add default via 10.0.2.6 table 120 
Run Code Online (Sandbox Code Playgroud)

这个基于规则的路由,使用数据包的 src 作为条件

ip rule add from 10.0.1.0/24 table 120 
Run Code Online (Sandbox Code Playgroud)

很高兴出发!现在为了测试,我在客户端上执行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
....
Run Code Online (Sandbox Code Playgroud)

现在只是一些小事情,例如自动化和后期脚本...感谢您的帮助!