一個國內無法訪問的站群 IP,會讓上面所有站點對國內訪客和搜尋引擎“隱身”,即使從海外訪問一切正常。IP 在國內無法訪問,可能是因為前任使用者留下的歷史記錄、整個 IP 段被過濾、單個埠或域名被封,或者運營商線路問題。本文介紹如何從國內多個地區測試連通性、區分這幾種情況、批次檢測整個 IP 段,以及把站點快速遷出有問題的 IP。
線上多地測試服務(例如 ITDOG、17CE、Boce 或 Chinaz 站長工具)可以從電信、聯通、移動三網的數十個節點發起 ping、TCP 埠和 HTTP 測試。每遇到一個問題,做以下三項測試:
| 你看到的現象 | 可能原因 |
|---|---|
| 國內節點 ping 和 TCP 全部失敗,海外節點正常 | IP 在中國大陸無法訪問(被牆) |
| 能 ping 通,但 TCP 80/443 超時或被重置 | 該 IP 的特定埠被封鎖,或伺服器自身防火牆有問題 |
| IP 和埠都正常,但域名打不開或解析到無關 IP | 問題出在域名(DNS 汙染或按域名過濾),而不是 IP |
| 只有某一家運營商失敗(例如移動) | 該運營商或通往該運營商的線路存在路由問題 |
| 白天正常,晚上丟包嚴重 | 國際線路晚高峰擁堵,並非被牆 |
對比公共 DNS 和國內 DNS 的解析結果,並多查詢幾次:如果國內 DNS 返回的地址與你的伺服器毫無關係,說明是域名本身受到了影響(DNS 汙染),把站點換到其他 IP 也無濟於事。
dig +short example.com A @1.1.1.1
dig +short example.com A @114.114.114.114
dig +short example.com A @223.5.5.5
要一次性檢測 /24 中的每個 IP,可以在一台位於中國大陸的機器上執行一個小指令碼(一台低價雲伺服器或一台辦公電腦即可)。指令碼會測試每個 IP 的 TCP 80 和 443 埠,並列出失敗的 IP。
# ips.txt: one IP per line (generate with: for i in $(seq 2 254); do echo 203.0.113.$i; done > ips.txt)
cat > check-ips.sh <<'EOF2'
#!/bin/bash
while read -r ip; do
r80=$(timeout 4 bash -c "</dev/tcp/$ip/80" 2>/dev/null && echo ok || echo FAIL)
r443=$(timeout 4 bash -c "</dev/tcp/$ip/443" 2>/dev/null && echo ok || echo FAIL)
echo "$ip 80:$r80 443:$r443"
done < ips.txt | tee result-$(date +%F).txt | grep FAIL
EOF2
chmod +x check-ips.sh && ./check-ips.sh
IP 只有在埠上有服務監聽時才會響應,所以請只對已經繫結了站點(或至少有 Nginx 預設站點)的 IP 執行此指令碼。再把結果與在國外伺服器上做的同樣測試進行對比,就能把真正的連通性問題與只是沒有執行服務的 IP 區分開來。
線路問題通常可以由機房修復。請收集以下資訊:
# From the server towards major Chinese resolvers (apt install mtr-tiny / dnf install mtr)
mtr -rwc 50 114.114.114.114
mtr -rwc 50 223.5.5.5
# From the machine in China towards your server
mtr -rwc 50 203.0.113.10
儲存多地測試結果的截圖,並註明測試時間。線路分析方法參見回國回程路由測試和使用 ping、tcping 和 mtr 排查網路連通性。
sites.txt 並執行部署指令碼即可),然後過載 Nginx。提前準備一份已測試、未使用的 IP 清單,就能在幾分鐘內完成遷移;舊 IP 過一段時間後重新測試,通過後再複用。同時請檢查站點內容:如果內容在中國不被允許,換到任何 IP 上都會再次受到影響。
在國內的機器上用 cron 每天執行步驟 4 的批次檢測,並把失敗列表發給自己;或者在該機器上執行 Uptime Kuma 監控重點站點(參見使用 Uptime Kuma 監控)。把站點分散到多個 /24 段,可以在某個 IP 段出問題時限制影響範圍(參見多 C 段站群伺服器)。
不是。伺服器在正常執行,只是從國內到伺服器的路徑不通。按照步驟 1 到步驟 5 排查,判斷問題出在 IP、埠、域名還是運營商線路。
需要。每個新 IP 在放站點之前,都應先從國內多個地區測試,只把通過測試的 IP 加入部署列表。
請提交工單,附上多個地區的測試結果和步驟 5 中的 mtr 輸出。我們會檢查你所用 IP 段的路由情況,並與你溝通可行的方案。
如果按以上步驟操作後問題仍未解決,請提交工單聯絡 IMIDC 7×24 技術支援,並附上伺服器 IP、受影響的 IP 和域名、多地測試截圖以及 mtr 結果,方便工程師快速定位。