我的局域网中有一个 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 地址。