2、网络层故障排查:IP地址配置错误、子网掩码与网关问题、DNS解析失败、路由追踪实战

网络层出问题,说白了就是你的CMS系统跟外界“失联”了。我干运维这些年,碰到的通讯故障里,十有七八都卡在这一层。很多开发同事一上来就查应用日志,折腾半天发现是IP配错了,你说冤不冤?

这一章,咱们就把网络层这几个“硬骨头”啃下来。我会结合自己踩过的坑,带你走一遍排查流程。

2.1 IP地址配置错误——最基础的“门牌号”问题

IP地址就像你家门牌号。写错了,快递员肯定找不着门。CMS服务器之间通讯,第一步就是看IP对不对。

常见症状:

  • ping 对方IP,返回 “Destination Host Unreachable”
  • 应用日志里报 “Connection refused” 或 “No route to host”
  • 同一网段内能通,跨网段就不行

排查三板斧:

  1. 先看自己: 在服务器上执行 ip addrifconfig,确认本机IP、子网掩码、网关是否跟规划一致。我见过最离谱的一次,有人把测试环境的IP写到了生产配置里,结果两台机器IP冲突,整个CMS前端挂了半小时。
  2. 再看邻居:arp -a 查看ARP缓存。如果目标IP的MAC地址是 incomplete,说明二层就没通,别急着往上层找。
  3. 最后看配置: 检查CMS的配置文件(比如 application.propertiesconfig.php),确保数据库、缓存、API网关的IP地址没写错。尤其是微服务架构,服务发现中心的地址一旦配错,整个集群都连不上。
我的小习惯: 每次部署新环境,我都会先写一个简单的脚本,把核心节点的IP、端口、服务名打印出来,跟架构图逐一比对。别太相信自己的记忆力,好记性不如烂笔头。

2.2 子网掩码与网关问题——你家的“小区大门”

子网掩码决定了你的“小区范围”,网关则是“小区大门”。这两个参数配错了,你连小区都出不去,更别说访问外网或其他网段的服务了。

典型场景:

  • CMS管理后台能打开,但无法从外网访问API接口
  • 应用服务器能ping通数据库服务器IP,但数据库客户端连不上

排查方法:

检查项 命令/方法 预期结果
子网掩码 ip addr | grep inet 掩码与规划一致(如 255.255.255.0)
默认网关 ip route | grep default 网关IP存在且可达
网关连通性 ping 网关IP 能收到回复

避坑指南: 我曾经遇到一个案例,CMS的图片服务器突然无法上传文件。查了半天,发现是运维同事在调整网络时,把网关的掩码从24位改成了16位。结果服务器以为网关跟自己不在同一个广播域,所有跨网段流量都走了错误的路由。嗯,这种低级错误,往往最隐蔽。

注意: 修改网关或子网掩码后,一定要重启网络服务(systemctl restart networkifdown/ifup),否则配置不会生效。别问我怎么知道的……

2.3 DNS解析失败——你记不住门牌号,总得有个“电话本”

CMS系统里,很多组件之间是通过域名通信的,比如 db.cms.internalredis.cluster.local。DNS就是那个“电话本”。电话本坏了,你喊破嗓子也没用。

症状表现:

  • 应用日志报 “UnknownHostException”
  • curl 域名超时,但 curl IP 地址正常
  • nslookup 或 dig 命令返回 “server can't find”

排查步骤:

  1. 检查本地DNS配置: 查看 /etc/resolv.conf,确认 nameserver 地址是否正确。我习惯至少配两个DNS服务器,一个主一个备。
  2. 测试解析:nslookup your-cms-domain.comdig your-cms-domain.com。看返回的IP是不是你预期的那个。
  3. 检查hosts文件: 有时候运维为了临时调试,会在 /etc/hosts 里写死域名映射。如果写错了,DNS解析就会被“劫持”。
  4. 检查DNS缓存: 有些系统会缓存DNS结果(比如 nscd、systemd-resolved)。可以执行 systemctl restart nscdresolvectl flush-caches 清一下缓存。

实战经验: 有一次CMS的搜索服务突然变慢,查了半天发现是DNS解析耗时从1ms飙升到了500ms。原因是上游DNS服务器挂了,备用的DNS响应极慢。最后我们在本地部署了一个DNS缓存服务器(dnsmasq),问题才彻底解决。你想想看,一个DNS问题,差点让整个搜索功能瘫痪。

2.4 路由追踪实战——顺着网线找“断点”

当网络不通,但IP和网关看起来都没问题时,就该路由追踪上场了。它能告诉你数据包走到哪一步“迷路”了。

常用工具:

  • traceroute(Linux)
  • tracert(Windows)
  • mtr(更强大,结合了 ping 和 traceroute)

实战案例:

假设你的CMS应用服务器(192.168.1.10)连不上数据库服务器(10.0.0.20)。我们来跑一次路由追踪:

# 在应用服务器上执行
traceroute -n 10.0.0.20

# 输出示例
traceroute to 10.0.0.20 (10.0.0.20), 30 hops max, 60 byte packets
 1  192.168.1.1  0.5 ms  0.4 ms  0.4 ms
 2  172.16.0.1  1.2 ms  1.1 ms  1.1 ms
 3  * * *
 4  10.0.0.20  5.3 ms  5.2 ms  5.1 ms

看到第3跳全是 * * * 了吗?这说明数据包在 172.16.0.1 之后丢失了。可能是防火墙拦截,也可能是路由表没配好。

解读技巧:

  • 如果前几跳正常,中间某跳超时,大概率是那台设备的问题(防火墙、ACL、路由黑洞)
  • 如果最后一跳超时,但前面都通,可能是目标主机自己没回包(比如防火墙禁ping)
  • 如果第一跳就超时,检查本机网关配置
我推荐用 mtr: 它比 traceroute 更直观,能显示每一跳的丢包率和延迟。命令很简单:mtr -r -c 10 10.0.0.20。跑完一看,哪个节点丢包多,一目了然。

知识体系总览

下面这张图,帮你把网络层排查的核心逻辑串起来。遇到问题,按这个流程走,基本不会漏掉关键点。

网络层故障排查流程 网络通讯故障 ① 检查IP地址配置(ip addr / ifconfig) ② 验证子网掩码与网关(ip route) ③ 测试DNS解析(nslookup / dig) ④ 路由追踪定位断点(traceroute / mtr) 常见工具 • ping(连通性) • arp(二层地址) • nslookup(DNS) • traceroute(路由) • mtr(综合诊断) • tcpdump(抓包) • netstat(端口) • ss(socket统计)

这张图把排查顺序理得很清楚:从IP配置开始,一步步往下走。记住,别跳步骤。我见过太多人一上来就 traceroute,结果发现是IP写错了,白白浪费时间。

最后提醒一句: 网络层的问题,很多时候是“人”的问题——配置改错了、文档没更新、或者谁不小心动了交换机。所以,排查之前,先问问自己:最近有没有人动过网络配置?有没有发过变更通知?这能帮你省下至少一半的排查时间。