SSH和FTP连接问题及解决方案

事件起因:

博主本地电信宽带(有动态公网IPv4),2023年05月12日,使用Xshell通过SSH连接某国外VPS时,遇到连接失败。根据自建VPS的监控显示,VPS网络、端口及网站都正常,因此问题出在电信上(当时未考虑是由于GFW高墙)。凭借以往的经验,重新拨号换一个与当前IPv4同网段的不同IP通常能解决问题;即便不行,拨到另一个网段也可行。然而博主尝试了重新拨号,甚至三个不同的B段的IP,SSH连接仍然失败。这时,博主意识到问题并不简单,随后连续SSH连接了自己持有的约80台VPS,发现了一个关键点,具体将在本文后半段中描述。

事件表现:

正常情况下,当SSH连接到VPS时,按下Ctrl+Alt+]后应能顺利连接。然而此次实际情况却是在Ctrl+Alt+]之后卡住,约20秒后显示Error: 10053,接着就是Socket close,最后显示Connection closed by foreign host。

1
Connecting to 174.139.***.***:*****... Connection established. To escape to local shell, press 'Ctrl+Alt]'. Socket error Event: 32 Error: 10053. Connection closing...Socket close. Connection closed by foreign host. Disconnected from remote host(*********************) at 23:22:32.

图1,VPS 1首次连接失败后,隔了一分钟左右重新尝试连接,最终连接成功。

图2,VPS 2首次连接失败后,隔了2~3分钟再次尝试连接,依旧失败。

图3,VPS 1 Ping正常。

图4,VPS 1 TCPing正常。

事件描述:

1、最初:早在2025年,博主经常遇到SSH连接失败的问题。当时出现的问题是,SSH连接失败时,该VPS Ping和TCPing均不通,网页访问超时或连接重置;而在Ping.pe上Ping和TCPing都正常。此时基本上所有非国内网站都无法直接访问。博主当时猜测是家里宽带拨号拨到了一个被重点关注的IP,导致问题出现。以往只需重新拨号,最少重拨到另一个A/B段也能解决。
2、此次:2025年01月,博主遇到了前文所述的连接问题,VPS一切正常,但SSH连接失败。本地网络监控显示,SSH连接状态在Ctrl+Alt+]时为已连接,而在Error: 10053发生时则为关闭状态。经观察,这种异常连接情况是间歇性出现的,其间隔难以预测。
3、时间:问题大约从2025年01月10日开始出现。博主为了方便备份,在家里的群晖上搭建了FTP服务,VPS通过FTP客户端连接群晖进行自动备份,备份时间定于凌晨3点至4点。根据备份日志,问题首次出现在01月10日备份过程中,报错:Error:File upload error: Unable to connect to the FTP, please check whether the configuration parameters are correct。此情况也是间歇性的,不同日期同一时间段的备份有成功也有失败。值得说明的是,博主没有测试本地FTP客户端连接VPS的FTP服务是否存在问题。
4、华点:博主尝试SSH连接多台VPS,发现一个现象。当本地与VPS之间的国际出口为电信时,间歇性阻断几乎是必然的;而当国际出口为联通时,则不存在该情况。例如,博主有一台伦敦VPS,去程链路为本地电信→北京电信→北京联通出口→伦敦;另一台东京VPS的去程链路为本地电信→上海电信→上海联通出口→东京。目前在发文时,这两条特殊链路的VPS不受阻断影响,SSH连接正常。
5、其它:在尝试SSH连接的过程中,博主监控到一个不寻常的OCSP(尽管博主不确定它是否真的为OCSP,只是监控标记显示为OCSP)。比如,博主的IP为55.55.1.55,网关为55.55.2.1,OCSP的IP为55.56.3.2。经确认,该IP确实属于本地电信。博主猜测这可能是高墙的电信分墙,因为本地电信任意去程都未经过此IP。但是在后来的尝试中未能复现,因此仅为猜测。
6、补充:2025年01月07日,在非大规模SSH阻断发作时段的下午,博主在本地宽带下尝试复现SSH阻断。操作过程中连续SSH超过100台VPS(包括高墙重点关注的商家/地区),并在每台VPS上进行约1分钟的正常操作后手动断开。当天晚上,博主再次SSH连接几台VPS,却遇到了前文所述的连接问题(特定链路的SSH正常)。因此,博主重拨宽带,得到了与重拨前不同的A段公共IPv4,重新SSH几台需求VPS后正常连接。博主猜测,当本地IP的外部SSH连接数超过一定数量时,会触发SSH阻断,此阻断针对的是当前本地IP,且仅影响SSH连接;博主不确定此是否与重点商家地区相关。此次未复现之前事件描述中的部分情况,只是SSH不通。

TMD,博主可能被标记了。

经此一役,博主现在SSH全都走本地代理,力求在本地网络监控中不出现任何SSH连接信息。
7、补充:2025年01月12日,从本文发文至今,任何非HTTP/HTTPS的外网连接均存在阻断现象。博主在玩某游戏的亚服时频繁掉线,掉线间隔相对规律为15分钟、30分钟、1小时、2小时,而在掉线后3分钟内无法重连(3分钟的阻断)。自06月07日操作后,博主仅遭遇了一次游戏掉线(时长3分钟)。博主推测:高墙可能针对外网连接实施间歇性阻断,非HTTP/HTTPS外网连接时如果本地不直连重点商家的IP,可能会导致本地IP被标记,进而触发一系列阻断现象;若遇此情况,果断重拨宽带换IP(如果没有公网IPv4就无能为力)。尽管IP更换了,仍然可能被标记,但至少目前是基于标记IP的阻断,较少情况变成标记宽带的阻断。如果重拨宽带IP不变,重启光猫IP不变,光猫断电几分钟IP仍无变化,则可认为当前宽带被标记,需等待两天再尝试重拨。

博主猜测:

目前国内与国外非HTTP/HTTPS连接都会遇到阻断现象,特殊网络链路除外。而去程是阻断还是回程阻断,亦或是双向阻断尚不明确,博主没有过多日志进行分析,因此不再赘述。相较于直接解决问题,博主更擅长间接解决方案,因在此问题上,博主无能力直面解决问题,也无法影响提出问题的“人”。因此,博主将在之后发布教程,教您如何让Xshell通过代理连接到VPS,具体见下方。

解决办法:

主要是让Xshell通过不同方式的隧道或者代理来实现正常的SSH连接。
1、旧文 第5、6、7、8条。