云服务器突然访问不了外网,网站打不开,远程工具连不上,接口也超时,第一次遇到的人多半会心里一紧。好在这类问题的原因通常就那么几个,按固定顺序查,大多能很快找到方向。

先分清是哪种“没网”
“没网”三个字太笼统。动手前先确认具体表现:是服务器自己出不去,外面连不进来,还是只有某个端口或某个域名不通。表现不同,排查方向也不同。比如 ping 外网 IP 不通,常见原因在路由、网关或出站规则上;ping 通 IP 却解析不了域名,就要往 DNS 配置上想。
建议先在服务器上跑几条基础命令,把结果记下来,再决定下一步。
案例一:安全组规则被临时删掉
某电商团队的一台云服务器在凌晨突然无法被外部访问,但服务器内部一切正常,curl 本机地址也能拿到页面。运维人员一开始怀疑应用崩了,重启服务后没有效果。
后来查到,当天下午有同事为了调试新接口,临时删掉了安全组里的入站规则,只留下 SSH 端口。服务器本身没有问题,外部流量在云平台层面就被挡在了外面。把 80 和 443 端口的入站规则加回去后,访问马上恢复。
这个例子说明,云服务器没网不一定出在系统里。安全组和网络 ACL 最容易被忽略,每次改动后都记一笔,出问题时才能快速对上时间点。
案例二:迁移子网后默认路由还指向旧网关
一家做数据采集的公司把服务器从一个子网迁到另一个子网,之后发现它既连不上外网,也连不上同一 VPC 里的其他机器。用 ip route 一看,默认路由还指着旧子网的网关地址,而那个地址已经不存在了。
处理办法是先在控制台确认新子网的网关地址,再更新系统默认路由,并把配置写进网络配置文件。这里有个容易踩的坑:只改了临时路由,没改持久化配置,服务器一重启,问题又回来了。
案例三:DNS 被 DHCP 续租覆盖
一位个人开发者的博客服务器出现过这样的情况:ping 8.8.8.8 是通的,但访问任何域名都超时。查看 /etc/resolv.conf 才发现,DHCP 客户端在某次续租时把原先手动设置的 DNS 替换掉了,新分配的地址在当前网络里用不了。
把可用的 DNS 地址重新配好后,问题随即解决。如果系统由 systemd-resolved 或 NetworkManager 管理,最好通过它们对应的工具修改。直接改文件,下次网络服务刷新时很可能又被覆盖。
排查顺序
- 看云平台控制台:确认实例处于运行中,有没有欠费、维护通知或告警。
- 看安全组和网络 ACL:入站、出站规则是否放行了所需端口和协议,重点看最近有没有人改过。
- 看本机网卡:用 ip addr 确认网卡已启用,并拿到了正确的 IP 地址。如果没有地址,先查 DHCP 或网卡配置。
- 看路由表:用 ip route 确认默认网关存在,并且能 ping 通。
- 分开测 IP 和域名:直接 ping 公网 IP,再用 dig 或 nslookup 解析域名,判断问题卡在哪一层。
- 看防火墙:检查 iptables、nftables 或 firewalld,确认没有误拦截。
- 翻系统日志:用 journalctl 或 dmesg 搜索网络相关的报错,线索有时就在里面。
按这个顺序往下走,能避免在某一层反复折腾。多数时候,前三四步就能找到问题。
日常预防
- 变更留痕:安全组、路由和 DNS 的改动要有记录。条件允许的话,用基础设施即代码工具管理,改动可以回溯。
- 临时命令只用来排查:ip route add 之类的命令重启后会失效,真正要生效的配置需要写进持久化文件或管理工具。
- 定时探测:用监控脚本或探针定期检查外网连通性和关键端口,出问题时能第一时间收到告警,不必等用户反馈。
- 准备备用 DNS:重要服务至少配两个 DNS 地址,并确认备用网关路径可用。
小结
云服务器没网的原因很多,但大体逃不出云平台规则、本机路由、DNS 和系统防火墙这几类。排查时从外到内、从上到下逐层确认,比反复重启有效。每次修完顺手补上监控和文档,下次遇到同样的情况,服务会恢复得快很多。