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
在這種情況下,我可以在兩個 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 ....
現在只是自動化和後期腳本之類的小東西……感謝您的幫助!