Vpn

使用真實 IP 的 OpenVPN 端點到端點

  • April 3, 2013

我想通過網際網路將兩台伺服器相互連接。由於各種原因,我不能為此使用 IPSec。

我希望像使用 IPSec 傳輸模式一樣對流量進行透明加密。我決定為此使用路由(但我願意接受更好的選擇)

我的隧道開通了10.255.255.0/30,A用.1,B用.2。假設伺服器 A 在192.168.0.100和伺服器 B 172.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 ..."

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