华为云代理返现 华为云端口不通排查
凌晨1:23,手机在枕头底下疯狂震动,像一只被踩了尾巴的电子仓鼠。
我睁眼,没看屏幕,先摸了摸左手边——空的。右手边——还是空的。床头柜上那杯冷透的美式,正用它最后一点余温提醒我:你已经连续盯屏5小时47分钟,而问题,还没解决。
微信弹出新消息,来自运维老张,ID叫「张总不总」,头像是他家金毛叼着路由器蹲在机房门口的照片。消息只有9个字:
「华为云RDS连不上,端口死活不通!」
我叹了口气,把手机倒扣在胸口,闭眼默念三遍:不是网络问题,不是云平台故障,不是运营商抽风……是人的问题。然后坐起来,灌了半杯凉咖啡,打开终端,敲下第一行命令:
telnet rds-xxxxxx.mysql.rds.cn-north-1.amazonaws.com 3306
——连接超时。
(注:此处域名已脱敏,真实环境请勿复制粘贴,否则会连上亚马逊……哦不,连上空气)
第一关:你以为的“通”,其实是假通
先别急着骂华为云。很多同学一上来就ping,看到ICMP回包就拍胸脯:“网络肯定通!”
醒醒,朋友。Ping通只说明三层(网络层)能走通,而MySQL用的是TCP 3306——那是四层(传输层)的事。就像你家楼道灯亮着(ping通),不代表你家厨房插座有电(端口开放)。中间可能隔着物业电闸、跳闸的断路器、被邻居误拔的插线板……甚至,你压根没交电费。
所以第一步,永远是:用telnet或nc实测目标端口。
第二关:安全组——云上的铁门卫
登录华为云控制台,直奔「ECS实例→安全组→入方向规则」。很多人在这里栽跟头:以为自己加了规则,其实加在了出方向,或者加在了另一个同名不同ID的安全组上(华为云允许同名安全组共存,且列表默认不显示ID,堪称云上薛定谔的安全组)。
查规则时,请务必确认三点:
✅ 目标端口(3306)是否开放
✅ 协议类型是TCP(不是UDP,也不是ALL)
✅ 源地址是否精确——是填了0.0.0.0/0(全网放行),还是只给了ECS的内网IP段?如果是后者,检查你的ECS和RDS是否在同一个VPC、同一个子网?跨子网?跨AZ?跨Region?每跨一级,都多一道隐形墙。
那天,我们发现规则里写的是192.168.10.0/24,而ECS实际IP是192.168.20.12……原来子网掩码配错了,/24只认前24位,后8位全被当成了“非法访客”。
第三关:网络ACL——安全组的双胞胎表哥
安全组管的是实例级别,而网络ACL(访问控制列表)管的是子网级别。它像小区大门保安,安全组是各家防盗门。你家防盗门开着,但保安不放行,照样进不去。
尤其当RDS和ECS不在同一子网时,ACL规则必须双向放行:ECS出方向(源IP+ECS端口→目标IP+3306),RDS入方向(源IP+ECS端口→目标IP+3306)——注意,ACL是无状态的,来去都要配。
我们翻ACL时发现,入方向规则写着“拒绝所有”,而那条“允许3306”的规则,排在它下面……在ACL里,规则按顺序执行,第一条匹配即生效。所以,那条“允许”永远没机会被执行。
第四关:RDS白名单——数据库的VIP俱乐部
华为云RDS有个反人类设计:即使你开了安全组、放了ACL,还必须手动配置白名单IP。它不认安全组,不认子网段,只认具体IP或CIDR。
问题来了:ECS是弹性IP?还是私有IP?如果你填了ECS的公网IP,但ECS其实是通过NAT网关访问RDS(内网访问),那白名单就得填它的私有IP——而这个IP,在ECS控制台里藏得比你前任的聊天记录还深。
我们当时填了ECS的公网IP,结果RDS日志里全是“Access denied from xxx.xxx.xxx.xxx”,一查,xxx.xxx.xxx.xxx是NAT网关的IP……白名单填错了对象,相当于给保安递了隔壁老王的会员卡。
第五关:ECS本地防火墙——自家院墙刷了迷彩
别忘了,Linux服务器自己也带iptables或firewalld。有些镜像出厂自带防火墙策略,比如CentOS7默认开firewalld,Ubuntu20.04默认开ufw。
执行:sudo ufw status verbose 或 sudo iptables -L -n -v,看OUTPUT链是否拦住了出站连接。曾有次,客户在ECS上装了个“安全加固脚本”,自动封禁所有非HTTP/HTTPS出向流量……MySQL?不好意思,不属于“互联网礼仪范围”。
第六关:绑定IP与DNS解析——名字叫对了,人找错了
RDS连接地址看着像域名,其实是CNAME指向一个内部VIP。如果本地/etc/hosts里手抖加了一行映射,或者公司DNS劫持了rds开头的域名……恭喜,你连的可能是某台测试库,甚至是一台早已退役的虚拟机。
验证方法:nslookup rds-xxxxxx.mysql.rds.cn-north-1.amazonaws.com,看返回的A记录是不是华为云分配的内网IP(通常是10.x.x.x或172.x.x.x)。如果不是?清DNS缓存,换公共DNS(如114.114.114.114),再试。
第七关:端口监听状态——服务自己睡着了
最后一步,也是最容易被忽略的:RDS真在3306上听着吗?
当然不能登录RDS(你又不是DBA),但可以间接验证:
① 登录华为云RDS控制台 → 监控 → 网络流入流量,看是否有突增;
② 查看RDS错误日志,搜索“Can't connect to local MySQL server”或“Address already in use”;
③ 最绝的一招:让DBA执行show variables like 'port';——万一管理员手滑,把端口改成3307了呢?
那天,我们就是靠这招翻盘的。DBA回了一句:“哦,上周升级,我顺手改了端口,忘了发邮件……”
结语:端口不通,从来不是技术问题,是沟通问题
凌晨3:41,telnet终于返回Connected to …。我截图发群,配文:“活着回来了。”
老张秒回:“谢了!明早给你带煎饼果子,加俩蛋。”
老板补刀:“辛苦,记得提效——下次能不能1小时内搞定?”
我关掉终端,望向窗外。城市灯火未熄,而我的咖啡杯底,沉着三粒没化开的方糖——像极了那些被忽略的细节:安全组ID、ACL顺序、白名单IP、防火墙状态、DNS解析、端口配置、以及,那个没发的邮件。
排查端口不通,本质上是在和七层抽象打交道:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层……
而最厚的那一层,永远是人层。
华为云代理返现 所以,下次再遇到“端口不通”,别急着敲命令。先泡杯热茶,深呼吸三次,然后问自己:
——我有没有确认过,对方的服务,真的开着吗?
——我有没有确认过,我说的“它”,和对方理解的“它”,是同一个东西?
——我有没有确认过,我手里这张“故障说明书”,是最新版的,而不是三年前实习生写的草稿?
毕竟,在云计算的世界里,最可靠的端口,永远是沟通的端口。

