第 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 要有理由。