我已经有几个星期没法在家访问朋友的 SFTP 服务器了。用 Wireshark 测试了一下,发现我的连接尝试已经从电脑上发出,但没有任何响应(另见下面的 filezilla 日志)。
Trace: CControlSocket::ResetOperation(66)
Trace: CControlSocket::ResetOperation(66)
Trace: CControlSocket::SendNextCommand()
Trace: CSftpConnectOpData::Send() in state 0
Status: Connecting to XXXX:YYYY...
Trace: Going to execute /usr/bin/fzsftp
Response: fzSftp started, protocol_version=11
Trace: CSftpConnectOpData::ParseResponse() in state 0
Trace: CControlSocket::SendNextCommand()
Trace: CSftpConnectOpData::Send() in state 3
Command: open "ZZZZ@XXXX" YYYY
Trace: Looking up host "XXXX" for SSH connection
Trace: Connecting to XXXX port YYYY
Trace: We claim version: SSH-2.0-FileZilla_3.66.5
Error: Connection timed out after 20 seconds of inactivity
Trace: CControlSocket::ResetOperation(2114)
Trace: CSftpConnectOpData::Reset(2114) in state 3
Error: Could not connect to server
当我使用其他路由器、通过手机进行网络共享,或者在我的Fritzbox 7530AX路由器上将设备设置为“暴露主机”时,连接都正常。所以我很确定是我的路由器导致了这个问题(也许是固件更新导致的?!)
在这些工作场景下使用 Wireshark 进一步调查后,我注意到服务器的响应来自一个与我初始请求不同的端口(该端口似乎是在某个范围内随机的)。由于存在潜在的安全风险,我不想转发此范围内的所有端口。
所以,我的问题是:
- 如何在不暴露大量端口或恢复到旧路由器固件的情况下解决此问题?
- 更笼统地说,SFTP 响应怎么可能到达与请求不同的端口?路由器需要做什么才能实现这一点?我的工作方法只是转发所有流量吗?这似乎不对,但如果不对,服务器响应是如何传递到我的电脑的?
任何有助于理解路由器/网络方面以及可能的 Fritzbox 解决方案的帮助都将不胜感激!