社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

SSH与MySQL突然断连,我是这样排障碍的

晓技术 • 1 周前 • 75 次点击  

哈喽,大家好,我是干货满满的晓技术老师。 本文是一篇技术总结,适用于开发者,或者网络运维人员;其他老铁可以划走了。

这两天,我想更新一下云服务器上的MySQL数据库,可是,使用navicat死活都连接不上;用xftp和xshell试了试,都显示无法连接。

这的确让人抓狂。

接下来,跟我将复盘这次排障过程,希望能帮你少走一些弯路。

一,故障现象:阿里云服务器上的web项目正常,但远程连接全断。

我尝试用 Xshell(22端口)和 Navicat(3306端口)连接阿里云 ECS 服务器,均提示连接超时。

本地CMD中执行ping命令,显示100%丢包。诡异的是,服务器上部署的Web项目通过浏览器(80端口)可以秒开。

二,抽丝剥茧:四大排查步骤。

1. 排查本地网络与云安全组。

首先怀疑是校园网限制了出站流量。由于台式机无法开热点,通过手机流量开热点,笔记本电脑CMD测试发现,可以ping通。

这说明,可能是校园网的限制。

随后,登录阿里云控制台检查安全组入方向规则,发现80/443端口对全网开放(0.0.0.0/0),而22和3306端口则启用了IP白名单限制。

网页查询发现,当前本机公网IP为121.28.19.101,且已在白名单中。

2. 利用 VNC 穿透排查服务器内部。

既然网络和配置看起来没问题,我们绕过 SSH,使用阿里云控制台的VNC远程连接进入系统内部。通过执行以下命令进行排查:

iptables -L -n:发现系统内防火墙全通,无拦截规则。

systemctl status sshd:SSH 服务显示绿色 active (running)。

ss -lntp | grep :22:服务正常监听在 *:22 端口。

3. 对照实验找出“真假”漏洞。

在本地 CMD 进行对照测试:

telnet 服务器IP 80:屏幕全黑(成功)。

telnet 服务器IP 22:连接失败。

这证明网络链路完全畅通,问题就出在22端口被安全组拦截上。但为什么白名单里明明填了查到的IP,却依然被拦截?

4. 真相大白—寻找真实的出口IP。

问题就出在“校园网/运营商的NAT 转发”上。通过常规网页(如 ip.cn)查到的IP,往往经过了代理或CDN的伪装,并非真实的公网TCP出口IP。

通过在VNC中直接临时全开安全组(0.0.0.0/0)让2 端口连通,随后用 Xshell 登录服务器,执行命令:

bash

echo $SSH_CLIENT

输出结果如123.45.67.89 54321 22,其中123.45.67.89才是本机真正的公网出口IP。将该真实 IP 配置到阿里云安全组白名单后,Xshell、Xftp和Navicat 瞬间全部恢复连接。

网页查到的IP不一定是真实 IP:在复杂的校园网或企业NAT环境下,网页查到的IP可能与真实TCP握手IP不一致。echo $SSH_CLIENT 是寻找真实出口IP的利器。

云安全组与系统防火墙:阿里云安全组相当于外层虚拟防火墙,iptables 是内层系统防火墙,两者需分别检查。

如何1分钟快速制作『 装系统 』的启动U盘?

纯小白也能训练大模型,百度啊、你终于干了件好事儿!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/202772