OpenVPN、Masqueade 连接冻结

OpenVPN、Masqueade 连接冻结

我有一个连接到远程 OpenVPN 服务器的 OpenVPN 客户端。我还使用 NAT(Masquerade),这样客户端后面的 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、fragment……)但都没有用。

但问题是,如果我连接到 OpenVPN 服务器(通过 SSH)并尝试传输文件。如果我连接到 IP 10.9.0.1,它就可以工作,但如果我使用 172.*,它就会冻结。

由于两者都是同一台服务器,只是由于接口而具有不同的 IP 并且通过相同的路径传输,所以我认为这不再是 MTU 问题。

我还认为这可能与 TSO 或 LRO 有关。因为我在 OpenVPN 客户端节点上监控了数据包(使用 Wireshark),它显示一些数据包大于 MTU。我认为操作系统可能正在创建一个大数据包,而 OpenVPN 无法正确处理它。但它也没有用。

在数据包跟踪中,我还可以看到很多“未捕获 TCP 上一个段”和“TCP 确认未见段”。因此数据包已发送,但没有确认。它继续尝试发送,直到 TCP 窗口已满,它才会重新传输(我认为,根据我的分析)...

我并没有被困住。

答案1

我的分析错了。这与 OpenVPN、Masquerade 无关……

在我的客户端 LAN 中,有一个具有非对称路由的 pfSense。

在状态超时(TCP 打开)之后,pfSense 正在终止状态,因为它是从另一条路径路由的,因此没有“答案”,从而导致连接冻结。

我改变了网络拓扑以使路由对称并且它起作用了。

相关内容