几周前,这种情况突然出现。本质上,我已将家用路由器设置为将 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 服务器,它在网络外部运行良好。我家里还有一些安全摄像头,可以毫无问题地传输到他们的应用程序(不通过有问题的主机)。
我该如何调试它?