如何透過兩個網關路由 VPN 流量?

如何透過兩個網關路由 VPN 流量?

我希望能夠建立一條從互聯網到位址 192.168.1.45 上的 OpenVPN 伺服器的 VPN 隧道。我的家庭網路設定有點複雜,因為我使用 Raspberry pi 作為網關,透過另一個 VPN(圖中稱為 VPN 1,由粗線表示)來路由家庭網路上的所有流量。

連結到網路設定的架構(顯然我還無法嵌入圖像)

我的設定工作正常,但在此配置中無法透過 VPN 2 建立連線。

更多設定詳細資訊:所有網關都有固定 IP。 LAN 閘道由 VPN1 閘道使用,並將連接埠 8787 上的傳入流量轉送至連接埠 1194(使用我的 ISP GW GUI 的規則集)。以下是 VPN 1 閘道上的 iptables 規則:

Chain PREROUTING (policy ACCEPT 15038 packets, 1421K bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 10 packets, 1246 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 344 packets, 25041 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 183 packets, 13486 bytes)
num   pkts bytes target     prot opt in     out     source               destination
3     9959 1007K MASQUERADE  all  --  any    tun0    anywhere             anywhere
Chain INPUT (policy DROP 3111 packets, 248K bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
2        8   688 ACCEPT     icmp --  eth0   any     anywhere             anywhere
3     3507  233K ACCEPT     tcp  --  eth0   any     192.168.1.0/24       anywhere             tcp dpt:ssh
4        0     0 ACCEPT     tcp  --  eth0   any     10.8.0.0/24          anywhere             tcp dpt:ssh
5     193K  202M ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
6        0     0 ACCEPT     udp  --  eth0   any     anywhere             anywhere             udp dpt:openvpn

Chain FORWARD (policy DROP 16 packets, 1408 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp spt:ssh
2        0     0 ACCEPT     tcp  --  eth0   eth0    anywhere             anywhere             tcp dpt:ssh
5    97203   12M ACCEPT     all  --  eth0   tun0    anywhere             anywhere
6     190K  190M ACCEPT     all  --  tun0   eth0    anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 104K packets, 18M bytes)
num   pkts bytes target     prot opt in     out     source               destination

我嘗試新增規則,例如:

sudo iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.45 --dport 1194 -j SNAT --to-source 192.168.1.43

sudo iptables -t nat -A PREROUTING -p tcp --sport 1194 -j DNAT --to-destination 192.168.1.1:1194
sudo iptables -t nat -I POSTROUTING -p tcp -d 192.168.1.1 --sport 1194 -j SNAT --to-source 192.168.1.45

sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
sudo iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT

但沒有成功。我現在陷入困境,無法在網上找到解決方案...不幸的是,我在這個領域也是一個菜鳥,我這樣做只是為了好玩,並且只是通過反複試驗來學習。任何幫助是極大的讚賞 :)

答案1

成功!我終於設法按照我想要的方式路由資料包。解決方案是僅 iptables 是不夠的,我還需要修改 VPN 封包的路由並使用命令新增規則ip

如果有人想做類似的事情,我是這樣處理的:

# do port forwarding to the VPN 2 server and allow forward traffic
iptables -t nat -A PREROUTING -p tcp --dport 1194 -j DNAT --to-destination 192.168.1.45:1194
iptables -I FORWARD -i eth0 -o eth0 -p tcp --dport 1194 -j ACCEPT
iptables -I FORWARD -i eth0 -o eth0 -p tcp --sport 1194 -j ACCEPT
# mark all packets that have to be routed through the 192.168.1.1 gateway
iptables -t mangle -A PREROUTING -p tcp --sport 1194 -j MARK --set-mark 1
# define desired specific route for marked packets
echo 201 openvpn1194.out | tee --append /etc/iproute2/rt_tables
ip rule add fwmark 1 table openvpn1194.out
ip route add default via 192.168.1.1 dev eth0 table openvpn1194.out

請注意,這些變更在重新啟動後不會持續存在,如果它們確實適合您,您需要將它們永久化。

相關內容