使用真實 IP 的 OpenVPN 端點到端點
我想通過網際網路將兩台伺服器相互連接。由於各種原因,我不能為此使用 IPSec。
我希望像使用 IPSec 傳輸模式一樣對流量進行透明加密。我決定為此使用路由(但我願意接受更好的選擇)
我的隧道開通了
10.255.255.0/30
,A用.1
,B用.2
。假設伺服器 A 在192.168.0.100
和伺服器 B172.16.0.200
。雖然我可以添加一個路由來加密所有流量(在 A 上使用
ip route add 172.16.0.200/32 dev tun0 via 10.255.255.2
),但這樣做會殺死隧道,因為 OpenVPN 流量使用相同的遠端 IP 來保持隧道正常執行。我需要一種方法來路由實際的 OpenVPN 隧道,
eth0
但用於tun0
在伺服器 A 和 B 之間傳輸所有流量。我在兩台伺服器上都啟用了 ip_forward,並有適當的防火牆規則來允許流量,但我不確定從 iptables 的哪裡開始來實現這一點。
我想你需要的是一個額外的路由表,用於除 openvpn 之外的 2 台主機之間的所有流量。你可以嘗試這樣的事情:
iptables -t mangle -A OUTPUT -d 172.16.0.200/32 -p <vpn_protocol> ! --dport <vpn_port> -j MARK --set-mark 2
ip route add default via 10.255.255.2 dev tun0 table 2
ip rule add fwmark 2 table 2
在隧道的兩側
您應該通過隧道介面添加到遠端網路的路由和更具體的路由,以確保您到遠端 OpenVPN 網關的流量不會通過隧道介面發送。例子:
ip route add 192.168.0.0/24 via 10.255.255.2 dev tun0 ip route add 192.168.0.100 via 172.16.0.1 dev eth0
第一個
ip route
是添加到目標網路的路由,而第二個ip route
是添加到位於同一網路中的 OpenVPN 網關的主機路由。172.16.0.1
是具有到 192.168.0.100 的有效路由的網關,並且eth0
是連接到與網關相同的網路的本地介面。請注意,如果您已使用and語句ip route
配置 OpenVPN,則第一個將是不必要的,因為它將由 OpenVPN 守護程序在啟動/成功連接設置時添加。route``push "route ..."