我正在嘗試在兩個 openvpn 伺服器之間路由流量;我想要有以下連接:
客戶端 --> OpenVpnServer1 --> OpenVpnServer2 --> 網際網路
我的兩台伺服器分別運行和工作,但我嘗試設定 OpenVpnServer1 以使用 iptables 將所有客戶端流量轉送到 OpenVpnServer2,但失敗了。
OpenVpnServer1 介面與設定:
eth0-公共互聯網
tun0-用於連接到該伺服器的用戶端
tun1 -- 第二個伺服器的連線介面(使用 openvpn 用戶端連線時處於活動狀態)
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.0.0/8 -o eth0 -j MASQUERADE
COMMIT
OpenVpnServer2 介面與設定:
ens33-公共互聯網
tun0-用於連接到該伺服器的用戶端
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o ens33 -j MASQUERADE
COMMIT
更新:
我已經測試了 server1 和 sever2 之間的連接,並且 server1 可以從其 tun1 適配器 ping google。問題是我不知道如何在不更改 server1 上的預設路由的情況下轉送流量。如果我將預設路由更改為 tun1,則用戶端無法連接到 server1。
答案1
好的,首先介紹一些基礎知識。用戶端開啟到 Server1 的 VPN 連線。伺服器與 server2 有一個活動連接,並且該連接被配置為預設路由(您這樣做了,對嗎?)
首先,我會將 server1 和 server2 之間的隧道配置為網站到網站 VPN - 但這是另一個主題。
在 server1 上,您的 iptables 規則是錯誤的。正確的規則是:
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
為什麼?
如果您希望此設定起作用,您需要假設所有透過 vpn 隧道從 server1 到 server2 的流量都是由 server1 發起的,具體來說有您的 tun1 介面的 IP,以便回覆到達 server1,並且可以正確路由回客戶端。這就是規則的作用。相較之下,您的規則只會偽裝所有進入公共網路的流量,而不是透過任何 VPN。