Linux

OpenVPN,偽裝連接凍結

  • February 11, 2021

我有一個連接到遠端 OpenVPN 伺服器的 OpenVPN 客戶端。而且我還使用 NAT(偽裝),所以我的客戶端后面的 LAN 可以訪問我伺服器後面的 LAN。

----------------       ----------------       ---------------       ------------------
| Client LAN   |  <--> |OpenVPN Client|  <--> |OpenVPN Server| <--> |   Server Lan   |
|192.168.1.0/24|       |  10.9.0.82   |       |   10.9.0.1   |      |  172.31.0.0/20 |  
----------------       ----------------       ----------------       -----------------

偽裝:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o tun0 -j MASQUERADE

一切正常(大部分時間)。

當我做某些操作時,我相信當我發送大數據包時。連接凍結。

範例:如果我在客戶端 LAN 中打開 FileZilla 並通過 SSH 連接到伺服器(在 LAN 伺服器中)。它可以工作,我可以導航、查看和傳輸小文件,但如果文件很大(> 20kb),它會凍結。

首先,我認為這可能是 MTU 問題或其他問題,我嘗試了幾件事(mssfix,片段,…),但都沒有奏效。

但這裡有一個問題,如果我連接到 OpenVPN 伺服器(通過 SSH)並嘗試傳輸文件,例如。如果我連接到 IP 10.9.0.1,它可以工作,但如果我使用 172.*,它會凍結。

由於兩者都是相同的伺服器,只是由於介面不同的 IP 並且通過相同的路徑,所以我不再認為這可能是 MTU 問題。

我還認為這可能與 TSO 或 LRO 有關。因為我在 OpenVPN 客戶端節點上監控了數據包(使用 Wireshark),它顯示了一些比 MTU 更大的數據包。我認為作業系統可能正在創建一個大數據包,而 OpenVPN 無法正確處理它。但它也沒有奏效。

在數據包跟踪中,我還可以看到很多“TCP Previous Segment Not Captured”和“TCP Acked unseen segment”。所以數據包被發送,沒有確認。它一直在嘗試發送,直到 TCP 視窗已滿,它才會重新傳輸(我認為,根據我的分析)……

而不是我被困住了。

我的分析是錯誤的。它與 OpenVPN、Masquerade、…無關

在我的客戶端 LAN 中,有一個帶有非對稱路由的 pfSense。

在狀態超時(TCP 開放)之後,pfSense 正在終止狀態,因為沒有“答案”,因為它是從另一條路徑路由的,導致連接凍結。

我更改了網路拓撲以使路由對稱並且有效。

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