1. 本文按“从外网到原站”的顺序排查:DNS→路由→端口连通→中间防护(Cloudflare/WAF)→服务器防火墙/权限→证书/服务。请准备一台能执行终端命令的 Linux/Windows 客户端、服务端 SSH 权限及 Cloudflare 管理账号。
2. 在客户端执行:dig @8.8.8.8 yourdomain.com +short 和 nslookup yourdomain.com ;若解析到 Cloudflare IP(以 104./172./173./103. 等段为例),说明 DNS 正常指向 CF。若解析失败,检查 Cloudflare 的 DNS 记录是否启用“代理”或是否误删。
3. 用 traceroute -n yourdomain.com 或 mtr -rw yourdomain.com 检查到越南节点的跳数与丢包点;若在 ISP 或国际链路丢包,需记录丢包跳点并联系带宽提供商。Windows 使用 tracert yourdomain.com。
4. 测试 HTTP/HTTPS:curl -vI https://yourdomain.com 查看 TLS 握手;测试端口:nc -vz yourdomain.com 443 或 telnet yourdomain.com 443。若 TLS 握手失败,执行 openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 查看证书链和协议。
5. 若跨境链路经常丢包,检查 MTU:ping -M do -s 1472 yourdomainIP (Linux)逐步减小 -s 值直到不分片,确认合适 MTU 并在服务器网卡或路由器上调整。
6. 登录 Cloudflare,检查:SSL/TLS 模式(建议 Full(strict) 且确保 origin 有有效证书)、Firewall → Tools 中是否有 Country Block(越南是否被阻止)、WAF 日志是否触发、Rate Limiting 是否误伤。必要时临时关闭“Under Attack”或白名单客户端 IP。
7. Cloudflare 会代理流量,必须在原站防火墙上允许 CF 的出口 IP。获取最新 IP 列表:curl https://api.cloudflare.com/client/v4/ips -s | jq .result.ipv4_cidrs。示例加入 iptables:iptables -I INPUT -p tcp -m iprange --src-range 103.21.244.0-103.21.247.255 -j ACCEPT(建议用脚本遍历并加入)。同时检查 ufw status 与 iptables -L 是否有 DROP 规则。
8. 若是 SSH 或后端服务认证失败,检查密钥权限:chmod 600 ~/.ssh/id_rsa;ssh -vvv user@yourdomain.com 查看认证过程。Web 服务检查证书文件权限(nginx: ssl_certificate_key 权限不可被其他用户读取)。
9. 查看 nginx 或应用日志:tail -n 200 /var/log/nginx/error.log;同时查看 systemd 与 firewall 日志:journalctl -u nginx -f 和 sudo dmesg | tail。记录时间戳,配合 Cloudflare 的访问日志比对可定位被拦截的请求。
10. 验证修复可临时取消 Cloudflare 代理(DNS 灰云),直接指向原站 IP 以排除 CF 层问题;或在本地 hosts 指向原站 IP 进行本地测试。修复后恢复代理并再做一次 curl -v 与 traceroute 验证。
11. 常见导致失败的原因:Cloudflare 限制/国家封锁、原站未白名单 CF IP、证书不匹配、iptables 阻断、SSH 密钥权限错误、MTU 导致分片。按本文步骤逐项排除并记录每步输出。
12. 问:如何判断是 Cloudflare 侧导致还是原站网络问题?
13. 答:先把域名在 Cloudflare 面板中设置为“暂停代理”(将灰云),或在本地 hosts 指向原站 IP 直接访问;若能正常访问则为 Cloudflare 配置或 WAF/Geo-block 导致,若仍失败则为原站网络/防火墙问题。
14. 问:如何把 Cloudflare 的 IP 加入服务器白名单?
15. 答:通过 API 获取最新 CF IP 列表:curl https://api.cloudflare.com/client/v4/ips,遍历 ipv4_cidrs/ipv6_cidrs 并用脚本依次用 iptables -I INPUT -s
16. 问:遇到跨国丢包需联系谁?
17. 答:若 traceroute 显示在本地 ISP 或国际链路丢包,先联系你的带宽/机房提供商并提供丢包跳点和时间;如问题出在 Cloudflare 网络层,可向 Cloudflare 支持提交 trace 并附上 mtr/traceroute 输出。