OpenVPN,偽裝連接凍結
我有一個連接到遠端 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 正在終止狀態,因為沒有“答案”,因為它是從另一條路徑路由的,導致連接凍結。
我更改了網路拓撲以使路由對稱並且有效。