一台机器通过 NAT 进行 SSH 转发超时,另一台机器则正常

一台机器通过 NAT 进行 SSH 转发超时,另一台机器则正常

几周前,这种情况突然出现。本质上,我已将家用路由器设置为将 SSH 转发到我的家庭服务器。我可以从外部顺利通过 SSH 进入我的服务器,但当我尝试通过 SSH 转发任何内容(使用标志-L)时,发送 100-300kb 后连接就会挂起。

以下是一些详细信息:

  • TP Link Archer C2300 路由器,带库存固件
  • 运行 Ubuntu 18.04 的家庭服务器

我简化了问题以测试修复。首先,我通过 ssh 进入我的家用机器并转发一些任意端口。然后我使用 netcat 将该端口上的数据转储到一个文件中:

# make a tunnel into my network:
remote_host$ ssh -L 9999:localhost:9999 myhostname.whatever.com
myhostname$ nc -l 9999 > test.junk

然后,在一个单独的 shell 中,我通过该转发转储数据:

remote_host$ cat /dev/urandom | nc localhost 9999

以下是我的观察:

  • test.junk被创建并增长到 100-300kb 之间然后停止
  • SSH 连接锁定
  • 最终它超时或者我收到“对端重置连接”的消息(或者我只是从另一个 shell 中将其终止)
  • 与同一台机器的其他 SSH 连接正常

以下是我为缩小问题范围所做的尝试:

  • 我在网络内尝试了同样的技巧(无 NAT)。这很好用!
  • 我尝试改变 NAT 以指向网络内的另一台主机(完全排除路由器)。这很有效!
  • 我尝试完全禁用相关主机上的防火墙(iptables)。没有运气。
  • ssh -vvv只是停止显示输出(没有关于断开连接或任何消息)
  • sshd在调试模式下运行( sshd -ddd)也没有显示任何值得注意的内容
  • SSH 客户端连接IPQoS=throughput无效

这似乎只发生在 SSH 转发中。同一台主机正在运行 Plex 服务器,它在网络外部运行良好。我家里还有一些安全摄像头,可以毫无问题地传输到他们的应用程序(不通过有问题的主机)。

我该如何调试它?

相关内容