Networking

使 VPN 客戶端后面的伺服器保持可訪問性

  • December 30, 2019

我有一個在 Linux 下用作 Web 和 SSH 伺服器的伺服器。有一個帶有 OpenVPN 的 VPN 客戶端。如果我正確理解的話,VPN 會更改路由表,導致所有流量都通過 VPN 轉發。

然後,當我嘗試請求我在伺服器上託管的網站時,它變得不可用。我對網路有非常基本的了解,但我可以假設(如果我錯了,請隨時糾正我)是伺服器通過通常的介面正確接收到請求,讓我們命名它eth0,但鑑於路由變了,現在通過VPN,響應應該在VPN的介面上發送,這顯然是出於安全考慮是不可能的。

我查找了以下執行緒:

https://superuser.com/questions/753736/accessing-a-webserver-hosted-behind-vpn-with-closed-ports-remotely

使用 DNATed IP 在與傳入相同的介面上回复

https://unix.stackexchange.com/questions/4420/reply-on-same-interface-as-incoming

但不幸的是,他們一直沒有幫助。

我們稱之為 VPN 的介面tun0。我想做的是eth0在同一介面上回復請求,即eth0它本身,而不是tun0在 VPN 執行時。另一個精度是,我的伺服器位於與其不同的網關後面(兩個不同的 IP 地址)。

1)有可能這樣做嗎?

2)有哪些不同的方法可以做到這一點?

預先感謝您的回饋。

最後,對於我的問題,我找到了一個受以下啟發的解決方案:

https://lartc.org/howto/lartc.rpdb.multiple-links.html .

以下是如何進行。

為了配置伺服器的路由,使其可以在 VPN 客戶端后面實現,應該使用單獨的路由表來避免兩個介面的路由配置重疊。

<interface><table><ip><gateway><network>分別為介面名稱、表、IP地址<interface>、網關IP地址和網路IP地址(由ISP提供)。

要遵循的程序是:

  1. 具體路由表的創建:在中<interface>創建新表。<table>``/etc/iproute2/rt_tables
  2. <gateway>為通過特定表關聯的介面設置不同的路由配置。

往來的流量<network>與介面相關聯<interface>並遵循特定的路由表<table>

ip route add <network> dev <interface> src <ip> table <table>

通過此網關建構預設路由:

ip route add default via <gateway> table <table> 3. 開<interface>,強制流量<ip>通過<network>,使用介面<interface>

ip route add <network> dev <interface> src <ip>

src指定參數以確保選擇正確的傳出 IP 地址。 4. 將介面關聯到適當的<network>

ip rule add from <ip> table

關鍵思想

關於為什麼在這裡使用這種技術,要理解的關鍵思想是,對於通過 ISP 節點的任何請求,在這裡<network>,後者將是響應路由的中間節點。這似乎很明顯,但是忘記它會導致不明白為什麼<network>通常用於從外部與伺服器通信的介面的路由配置很重要。

可選

  1. 將所有目的地的路由設置為通過<gateway>而不是通過 VPN 的網關。當需要僅根據具體情況使用 VPN 時很有用。

<vpn>, 和<vpn's gateway>分別為 VPN 的介面名稱(一般為tun0)和 VPN 網關的 IP 地址。然後,通過 VPN 的任何目的地的路由,更準確地說是其網關<vpn's gateway>,必須由通過的路由替換<gateway>

ip route del 0.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 0.0.0.0/1 via <gateway> dev <interface>

ip route del 128.0.0.0/1 via <vpn's gateway> dev <vpn>
ip route add 128.0.0.0/1 via <gateway> dev <interface>

0.0.0.0/1代表範圍從0.0.0.1127.255.255.255128.0.0.0/1128.0.0.1到的 IP 地址255.255.254

那裡。

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