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 然后关闭到互联网,这可能是问题吗?
我设法让这件事发挥作用。基本上,我需要将来自客户端的所有数据包转发到 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)
现在只是一些小事情,例如自动化和后期脚本...感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |