与发夹式 NAT 的 SSH 连接速度缓慢

与发夹式 NAT 的 SSH 连接速度缓慢

我的局域网中有一个 http 和 ssh 服务器,位于家用路由器后面。路由器配置为将范围在 1:1024 内的 TCP 和 UDP 端口从公共接口 (1.2.3.4) 转发到局域网内的服务器 (192.168.0.12)。我可以从互联网和局域网内部访问公共 IP 地址上的服务器。

问题是 LAN 中的客户端与民众与 LAN 中的客户端到路由器的连接相比,路由器的 IP 速度极慢(约减少 10 倍)。私人的服务器的 IP。HTTP 连接不是这种情况。

由于执行 NAT 的开销,使用公共 IP 时速度可能会有所降低,但我希望这与协议无关。

一些例子

下载速度约为 3MB/s,且经常停顿:

tleonardi@host ~ $ scp 1.2.3.4:/path/to/file.txt .

下载速度约为30MB/s:

tleonardi@host ~ $ scp 192.168.0.12:/path/to/file.txt .

在公有 IP 上通过 HTTP 下载相同文件仅比私有 IP 慢约 2MB/s。

更多信息

  • ssh 服务器配置如下UseDNS no

  • 在从 1.2.3.4(较慢的版本)传输文件期间运行 Wireshark 发现大量标记为 TCP Dup Ack 的数据包

  • 路由器的 MTU 设置为 1500

  • 除了 scp 之外,与远程终端的 ssh 连接也经常会出现冻结的情况。

任何帮助深表感谢!

答案1

连接到服务器时是否显示路由器的 IP 地址。如果没有,则可能是发生了非对称路由。来自客户端的数据包到达路由器,然后转换目标地址。由于源地址是本地的,因此您的客户端可以直接从路由器查看和获取数据包。路由器也可能会看到响应并将其发送回客户端。这可以解释重复的数据包。客户端的 IP 堆栈可能非常忙于处理重复的数据包。

执行发夹式 NAT 时,通常需要转换源地址和目标地址(双重 NAT)。最好使用拆分 DNS,将外部 DNS 名称解析为本地网络上的本地 IP 地址。

相关内容