Vpn

使用 openvpn 的 VPN 連結

  • May 31, 2018

我的老闆非常偏執,希望我為他組織某種 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

在這種情況下,我可以在兩個 VPN1 tun 介面上看到來自客戶端 IP 的 ICMP 請求,但無法得到任何響應。

如何通過全鏈轉發來自客戶端的所有流量?

編輯:(全部在vpn1上)

tcpdump -i tun0 icmp 顯示帶有 10.0.1.6(客戶端)的請求進入網際網路

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

其次,我需要通過添加以下規則來使用 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
....

現在只是自動化和後期腳本之類的小東西……感謝您的幫助!

引用自:https://serverfault.com/questions/512160