Windows

如何為 IPSec VPN 設置路由,其中 VPN 端點本身必須能夠聯繫遠端網路

  • October 2, 2015

我的情況與IPSec VPN 上的問題相同:流量路由不正確(但是我似乎無法直接聯繫該使用者,也無法對該問題發表評論 - 沒有人回答過)。

我也有一台 Windows 2008 R2 伺服器,IPSec VPN 直接在伺服器端結束。

伺服器有一個網路介面,上面有一個公共 IP 地址(例如,我們稱之為 203.10.10.10)。

我希望遠端專用網路 (10.16.0.0/255.254.0.0) 上的電腦能夠在以該伺服器結束的 IPSec 隧道(而不是路由器)末端的專用 IP 地址上連接到該 Windows 伺服器在伺服器前面)。

同樣重要的是(這可能是癥結所在)我需要伺服器能夠啟動與遠端 (10.16.0.0) 網路上的設備的 TCP 連接(例如通過 HTTP 下載圖像)。

這是它的樣子:

網路圖

我為伺服器選擇的專用 IP 是 192.168.70.1/255.255.255.0,建立到遠端專用網路的隧道的 IPSec 過濾器用於源/目標 192.168.70.0/24 和 10.16.0.0/15。

如果我從 Windows 伺服器 ping 遠端網路上的地址,並設置了源參數,那麼我可以建立隧道並且 ping 將起作用(即ping -S 192.168.70.1 10.16.0.1)。

但是,任何發送到 10.16.xx 地址的“正常”流量(包括沒有將源地址強制發送到 192.168.70.1 的 ping)都會通過預設路由輕鬆發送到 Internet,並且不會啟動或進入隧道。

問題

這樣的設置甚至可能嗎?還是不能讓 VPN 端點本身通過隧道發送來自其私有地址之一的數據?(對於通過隧道發送數據的設備而言,VPN 端點是否總是需要位於單獨的路由器上?)

如何設置 Windows Server 以確保與 10.16.0.0 網路的所有通信都源自其私有 IP 地址。

私有地址不必192.168.70.1 - 如有必要,可以選擇另一個子網(我這麼說是因為我已經讀過,在所有其他條件相同的情況下,Windows vista 及更高版本將使用最接近匹配的源 IP目的地 - 所以也許使用 10.XXX ip 作為伺服器的私有地址會有所幫助?)

但是,我無法輕鬆測試,因為此 VPN 隧道的另一端不受我的控制 - 如果我選擇更改 192.168.70.1 地址,我需要讓另一端的網路工程師進行配置更改.

額外資訊:到目前為止我嘗試了什麼

我嘗試了兩種設置私有 IP 地址的方法(在 Windows 伺服器上),試圖讓數據包正確路由滿足建立隧道的 IPSec 規則。

主界面上的私有地址

將 192.168.70.1 地址添加到主網路介面(除了公共 IP)後,似乎無法定義任何到 10.16.0.0 的路由,這會導致 Windows 使用 192.168.70.1 作為源地址。任何發往預設網關的流量最終都會以公共 IP 作為來源。

如果在 Windows 上有一些我不知道的魔法可用路由,我很想听聽!但是,命令:

route add 10.16.0.0 mask 255.254.0.0 192.168.70.1

將導致按如下方式添加路由(它在同一介面上獲取公共 IP 以用作源/連結網關)。

10.16.0.0 255.254.0.0 On-link 203.10.10.10 11 10.17.255.255 255.255.255.255 On-link 203.10.10.10 266

第二個虛擬適配器上的私有地址

我嘗試將虛擬網路適配器添加到伺服器 - 首先使用 Microsoft Loopback Adapter 設備。Loopback 設備在網路連接列表中顯示為“媒體已斷開連接”。看到虛擬 NIC 沒有連接,Windows 然後只是退回到通過預設路由(使用公共源地址)發送流量。

然後我嘗試使用不同的虛擬設備驅動程序——OpenVPN 附帶的 TAP 虛擬適配器驅動程序。該驅動程序允許您強制它進入“始終連接”狀態。但是,似乎在第一次 ping 之後,Windows 再次發現該適配器上沒有連接,並返回通過主(公共)介面上的預設網關發送流量。

所以,就是這樣……有什麼想法嗎?

嘗試執行此操作時,您有點與源 IP 地址選擇如何工作的自然趨勢作鬥爭。那麼為什麼不稍微改變你的設計讓它更自然地流動呢?

問題是源 IP 地址選擇是在決定將流量推入隧道之前完成的。這意味著它將選擇使用“公共”IP 地址作為源自隧道的任何流量的源 IP。

在某些作業系統上,您可以通過路由來做一些有趣的事情,在路由上為主機發起的流量指定源地址。我在 Windows 上找不到類似的東西。

但是,考慮到您的網路設計,我認為解決此問題的最簡單方法是停止與伺服器端的 RFC1918 地址衝突,並繼續在您的公共 IP 203.10.10.10 和私有 IP 之間建立一條帶有 SA 的隧道地址 10.16.0.0/15。

然後,客戶端會將伺服器定址為 203.10.10.10 而不是 192.168.70.1,其他一切都有望神奇地到位。這樣,源 IP 選擇就已經選擇了一個合適的地址。

您可以在過渡期間保留舊的 ipsec 策略,以便您的客戶端可以使用舊的 RFC1918 地址或新的公共地址來定址伺服器,而您的 DNS 記憶體過期(假設您為此使用 DNS -如果沒有,這是個好主意)。經過一段過渡期後,地址 192.168.70.1 不再起作用。

另一種選擇是在從您的伺服器啟動連接時明確選擇源 IP 地址 - 如果它是您自己編寫的自定義軟體,這可能是可能的,但這有點麻煩。

最後,這個環回適配器的想法很有前途,但奇怪的是它顯示為“媒體斷開連接”。這聽起來像是環回適配器本身的問題,而不是想法。

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