第 5 课 · 网络配置与排查:ip/ss/curl/dig 四件套
「网站打不开」可能是五层里的任何一层:本机配置、DNS 解析、路由、端口防火墙、服务本身。这一课给你四件工具(ip/ss/curl/dig)和一条固定排查顺序——从此网络问题不再靠猜。
ip:看自己是谁、路怎么走
ip -brief addr # 本机 IP 一览(网卡/地址/状态一屏看完)
ip route # 路由表:default via 后面是你的网关
ip -6 addr show scope global # IPv6 地址(双栈时代必看)
# 老命令 ifconfig/route 属于 net-tools 包,新系统默认不带——ip 是现行标准
读法要点:公网 IP 常不在网卡上(云环境 NAT 映射,网卡上是内网地址)——出口公网 IP 用 curl -s ifconfig.me 问外面的人,这才是别人看到的你。
ss:谁在监听、连着谁
ss -tlnp # 所有 TCP 监听端口与进程(t=TCP l=监听 n=数字 p=进程)
ss -ulnp # UDP 监听(DNS 类服务看这里)
ss -tn state established | head # 当前已建立的连接
ss -s # 连接统计总览
审计口径:监听地址决定暴露面——127.0.0.1:3306 是本地服务(安全),0.0.0.0:3306 是对全网开放数据库(事故预定)。ss -tlnp 的输出里每一个 0.0.0.0 或 [::] 都要能回答「为什么必须公网可达」。
dig:解析链路逐跳问
dig +short A 你的域名 # 解析到什么 IP(+short 只看答案)
dig +short AAAA 你的域名 # IPv6 解析在不在
dig 你的域名 +noall +answer # 带 TTL 的完整应答
dig @1.1.1.1 你的域名 +short # 指定解析器对照(排除本地缓存/污染)
dig +trace 你的域名 2>/dev/null | tail -8 # 从根开始追委派链(NS 问题定位)
curl:HTTP 层的显微镜
curl -vI https://你的域名 2>&1 | grep -E "^<|SSL|subject" # 响应头+证书信息
curl -o /dev/null -sw "dns:%{time_namelookup} conn:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer} total:%{time_total}\n" https://你的域名/
# 分阶段计时:哪一段数字大,瓶颈就在哪一段(dns 大→解析慢;ttfb 大→后端慢)
curl --resolve 你的域名:443:服务器IP -sI https://你的域名/ | head -1
# 绕过 DNS 直连指定 IP 测试(验证「解析对了没」与「服务好了没」分开)
固定排查顺序:从里到外五层
| 层 | 问题 | 命令 | 健康判据 |
|---|---|---|---|
| ①本机 | 服务起了吗、端口听了吗 | systemctl status + ss -tlnp | active 且目标端口在监听 |
| ②防火墙 | 端口放行了吗 | ufw status / nft list ruleset | 目标端口在白名单 |
| ③解析 | 域名指对了吗 | dig +short 对照服务器 IP | 解析结果=出口公网 IP |
| ④路由 | 包能到吗、路径对吗 | ping / mtr 目标 | 可达且末跳无持续丢包 |
| ⑤应用 | HTTP 应答正常吗 | curl -vI 看状态码与证书 | 200/301 且证书有效 |
# 一键跑完五层的快速脚本(把 IP 与域名换成你的):
SIP=服务器IP; DOM=你的域名
systemctl is-active nginx; ss -tlnp | grep -E ":80|:443"
ufw status 2>/dev/null | grep -E "80|443" || echo "(无 ufw,查 nft/云安全组)"
dig +short A $DOM; echo "期望: $SIP"
ping -c 5 $SIP | tail -2
curl -sI --resolve $DOM:443:$SIP https://$DOM | head -1
纪律:从①往⑤查,不要跳层——「先 dig 再上机器」是新手顺序,「先看服务在不在跑」才是运维顺序;每层有明确的健康判据,查到第一个不健康的层就停下深挖。
丢包与 MTU:两个进阶读法
网络「时好时坏」的两个高频根因值得提前认识:①丢包的分段定位——用 mtr 逐跳看丢包从哪一跳开始并持续到末跳(中间跳偶发丢包多是路由器对 ICMP 限速,不必紧张;判读方法在诊断课程展开);②MTU 不匹配——特征是「ping 通、小页面能开、大文件/图片加载卡死」,因为大包被路径上某一环静默丢弃。快速验证:ping -M do -s 1472 目标IP(1472+28 字节头=1500 标准 MTU;不通就逐次减 10 找到能通过的最大值,反推路径 MTU)。修复方向:把本机网卡 MTU 调到路径允许的值(隧道/PPPoE 环境常见 1492/1400),或开启路径 MTU 发现相关的 ICMP 放行——防火墙别把 type 3 code 4 的「需要分片」消息挡掉。
IPv6 专项:双栈时代的必查项
越来越多的「解析正常但打不开」发生在 IPv6 侧:域名有 AAAA 记录、客户端优先走 v6、而服务器的 v6 路径断了——v4 用户一切正常,v6 用户全军覆没,监控还报「服务正常」(因为监控走 v4)。双栈机器的三查:ip -6 addr show scope global(有全局 v6 地址吗)、ip -6 route | head -3(有 default 路由吗)、curl -6 -sI https://ipv6.google.com | head -1(出站 v6 通吗);再加一条从外部:curl -6 -sI https://你的域名(入站 v6 通吗)。四条全通才算双栈健康——只做 v4 监控等于只看了半张网。
本节小结
- 四件套各管一层:ip 看身份与路由、ss 看监听与连接、dig 看解析、curl 看应用;
- 排查按「本机→防火墙→解析→路由→应用」五层顺序,每层有判据,不跳层不猜;
- 监听地址是暴露面:127.0.0.1 是本分,0.0.0.0 要有理由。