一个国内无法访问的站群 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 结果,方便工程师快速定位。