网络连通性、安全白名单、账号权限三要素缺一不可;Linux云服务器无法访问公网时,按“路由表→DNS→安全组→防火墙”的顺序排查,多数问题出在安全组规则或路由配置上。
服务器怎么访问云数据库服务器:三步走通连接链路
很多运维新手第一次配置云数据库时,习惯先下载客户端、写连接串,结果卡在“连不上”这一步干瞪眼,服务器访问云数据库有一套固定的流程,走通这三步,连接成功率能提升一大截。
第一步:确认网络路径是通的
云数据库通常提供两种访问地址:内网地址和公网地址,服务器和数据库在同一个地域、同一个VPC(虚拟私有云)内,直接用内网地址连接,延迟低且不消耗公网带宽,跨地域或跨VPC访问,优先考虑云厂商提供的对等连接或云联网服务,而不是图省事直接开公网。
验证网络通不通,最简单的办法是telnet测试端口:
telnet 数据库内网IP 3306
如果提示Connected,说明网络层没问题,如果卡住或超时,大概率是安全组或网络ACL挡了路,这里有个容易踩的坑:云数据库的控制台里通常有独立的安全组规则,和云服务器的安全组是两套体系,两边都得放行。
第二步:白名单别只加IP,要加对IP
云数据库默认拒绝所有外部IP访问,必须把云服务器的公网IP或内网IP加入白名单,具体加哪个IP,取决于你用的是哪种连接地址:
- 使用内网地址连接,白名单填云服务器的内网IP。
- 使用公网地址连接,白名单填云服务器的公网IP(或NAT网关出口IP)。
不少人在云服务器上通过curl ifconfig.me查到的公网IP,和云厂商控制台显示的公网IP不一致这是因为服务器出网走的是NAT网关,出口IP是网关的弹性IP。最稳妥的做法是直接在云厂商的“访问控制”或“数据库白名单”页面,查看系统提示的出口IP段,或者同时把公网IP和私网IP都加进去。
第三步:账号权限和连接参数对齐
数据库账号的权限范围决定你能不能建表、能不能查数据,用root账号直连生产数据库是高风险操作,业内专家指出,最小权限原则是云数据库安全的第一道防线,建议单独创建应用账号,只授予业务所需的库表权限。
连接参数方面,注意核对以下几点:
- 端口是否默认(MySQL是3306,PostgreSQL是5432,Redis是6379)
- 数据库版本是否兼容驱动
- SSL加密是否开启,开启状态下连接串要带证书信息
如果是用PHP、Java等语言通过配置文件连接,还要检查配置文件是否被正确加载,曾经有个案例,配置文件里写的是测试库地址,部署到生产环境忘了改,排查了半天才发现是配置写死了。
Linux云服务器无法访问公网怎么办:按顺序排查这四层
Linux云服务器突然上不了网,ping不通公网IP,curl外网地址超时,这种故障在运维日常中很常见,别急着重启服务器,按下面的顺序逐层排查,大多数情况下能在十分钟内定位问题。
第一层:路由表是不是被改乱了
用ip route查看默认路由是否存在,正常情况应该有一条默认路由,指向网关地址:
ip route show # 输出示例:default via 10.0.0.1 dev eth0
如果默认路由缺失,或者网关地址不对,所有公网流量都会迷失方向,修复方法:
ip route add default via 网关IP dev eth0
注意这里要替换成你自己VPC的网关地址,通常在云控制台的子网详情页能查到,路由表被改乱的情况多见于手动配置了静态路由,或者误执行了网络管理工具的重置命令。
第二层:DNS解析到底通不通
能ping通公网IP但打不开网页,多半是DNS的问题,用nslookup或dig验证:
nslookup www.baidu.com
如果解析超时,检查/etc/resolv.conf里的nameserver配置,云服务器一般默认使用内网DNS,比如简米云的100.100.2.136,酷番云的183.60.83.19,被改成公共DNS(如8.8.8.8)后,部分云厂商的内网域名解析会失败,可能导致yum源、云监控Agent等依赖内网域名的服务异常。
第三层:安全组规则是不是把出口堵了
安全组既管入方向也管出方向,大部分云服务器默认出方向放行所有流量,但有些安全策略会收紧出方向规则,只允许特定端口出去。排查方法:在云控制台查看安全组出方向规则,确认是否放行了目标端口(如80、443)以及UDP 53(DNS查询)
。
这里有个容易忽略的细节:服务器内部自带的iptables或firewalld规则,和云平台的安全组是两层独立的防火墙,即使云平台安全组放行了,服务器内部防火墙没放行,流量照样出不去。
# 查看firewalld状态 systemctl status firewalld # 查看iptables规则 iptables -L -n
如果发现OUTPUT链有DROP规则,果断删掉或放行,多数情况下,重启firewalld服务能解决临时性的规则冲突,但如果是持久化配置,得用firewall-cmd --permanent修改后重载。
第四层:云服务器实例本身的状态有没有异常
前面三层都查完了还不行,登录云厂商控制台看一眼实例的监控面板,如果CPU、带宽跑满,或者系统盘IO飙升,服务器可能因为资源耗尽而无法正常处理网络请求,这时候的解决办法是升级配置或排查自身业务进程,而不是继续折腾网络配置。
检查一下云服务器是否绑定了弹性IP,如果实例是VPC网络的,但没分配公网IP,那它天然就无法访问公网,这种情况在按量付费实例上很常见,创建时忘了选“分配公网IP”选项,后续只能通过绑定弹性IP来解决。
云服务器连接数据库失败的常见症结:把两个问题串起来看
前面分开讲了“服务器怎么访问云数据库服务器”和“Linux云服务器无法访问公网怎么办”,但实际运维中,这两个问题经常纠缠在一起,服务器连不上云数据库,表象是数据库连接超时,根因可能是服务器本身就没公网访问能力。
内网访问数据库,但服务器网络配置异常
某个业务系统部署在云服务器上,数据库用内网地址连接,最近突然报错Can't connect to MySQL server,排查发现,云服务器的路由表被人为清空,导致去往VPC内网网段的流量无法路由,这种场景下,服务器虽然能正常访问公网(可能走的是另一条NAT链路),但访问数据库内网地址时网络不通。
修复方法是重新添加VPC网段的路由规则,确保内网流量走正确的网关,如果服务器上有多块网卡,还要检查策略路由是否把内网流量指到了错误的网卡上。
公网连接数据库,但服务器出口IP被限制
云数据库的白名单机制只认IP,不认域名,如果服务器的公网IP是动态变化的(比如按量付费实例重启后公网IP变了),白名单里记录的旧IP就失效了,这种情况在不少企业里真实发生过运维人员休假,服务器重启后数据库瞬间连不上,业务直接中断。
行业共识认为,生产环境访问云数据库,优先走内网或VPC peering,尽量避免依赖公网连接,如果迫不得已要走公网,至少使用云厂商提供的数据库代理服务,它会提供固定的代理地址,避免IP变动带来的麻烦。
安全组规则互相冲突
云服务器的安全组放行了出方向的3306端口,云数据库的安全组也放行了云服务器的IP,但连接还是失败,原因可能是云服务器安全组里有一条更高优先级的拒绝规则,或者是数据库安全组放行的IP和服务器实际出口IP不一致。
推荐做法:把规则简化到最小,出方向只放行业务需要的端口,入方向只放行来源IP,拒绝规则尽量少用云平台的安全组默认是白名单机制,只放行明确允许的规则,不需要额外配置拒绝规则。
云数据库访问与公网异常的常见问题解答
服务器能ping通数据库的内网IP,但连不上数据库端口,怎么处理?
先确认数据库服务是否正常运行,登录云数据库控制台查看实例状态,然后检查数据库白名单是否包含服务器内网IP,再看数据库账号是否有权限从该IP连接,如果都正常,telnet测试目标端口,检查数据库的监听地址是否为0.0.0.0(部分数据库默认只监听本地回环地址)。
Linux云服务器无法访问公网,但内网其他服务器可以,是什么原因?
重点检查该服务器的安全组出方向规则和服务器内部防火墙配置,单独一台服务器出问题,通常不是云平台层面的故障,而是这台服务器自身的配置差异导致,执行iptables -L -n和firewall-cmd --list-all查看规则,对比正常服务器的配置差异,必要时重置网络配置。
云数据库连接白名单里加了IP,为什么还是提示连接被拒绝?
检查实际出口IP是否与白名单中的IP一致,特别是使用公网连接时,在云服务器上执行curl ip.sb查看出口IP,与白名单配置比对,如果IP一致但连接仍被拒绝,检查数据库账号的host字段是否允许该IP访问,MySQL中可以通过SELECT user, host FROM mysql.user;查看账号的允许访问来源。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/573224.html




