1. 排查概述与常见现象
- 现象一:Shadowsocks(ss)服务启动后客户端无法连接,连接超时或立即断开。
- 现象二:服务端日志报错“Address already in use”或“Permission denied”。
- 现象三:端口能在本机ping通但外网不可达,traceroute停在云厂商出口。
- 现象四:短时间内带宽被限制、丢包率飙高或发生主动断流。
- 现象五:控制台告警显示安全组或云防护触发,或收到阿里云合规提示。
2. 阿里云控制台与地域策略检查
- 登录阿里云控制台,查看实例所属地域(示例:cn-hongkong),确认地域政策是否有限制。
- 检查ECS实例的“安全组”入方向与出方向规则,确认TCP/UDP端口已放行(示例放行端口8388,协议TCP/UDP,授权0.0.0.0/0)。
- 检查实例的“网络ACL”和VPC路由表是否有覆盖规则屏蔽流量。
- 查看云盾、DDoS基础防护是否误判、是否开启了“清洗阈值”导致连接被丢弃(示例阈值100Mbps)。
- 如有合规提示、工单记录或平台拦截,及时与阿里云客服联系并保留工单编号用于后续跟踪。
3. 系统防火墙与端口占用排查
- 在Linux实例上查看iptables规则:示例命令 "sudo iptables -L -n -v"(注意检查OUTPUT/INPUT链)。
- 如使用ufw,确认状态与允许端口:"sudo ufw status numbered"。
- 检查端口占用:使用 "ss -ltnp | grep 8388" 或 "netstat -tunlp | grep 8388" 查看是否已有进程绑定。
- 若出现“Permission denied”,确认是否尝试绑定低端口(<=1024),需root权限或使用CAP_NET_BIND_SERVICE。
- 如配置了firewalld,使用 "sudo firewall-cmd --list-all" 检查 zone 配置并永久放行需要端口。
4. 路由与运营商层面(ISP)阻断检测
- 使用traceroute/tracert从不同地区测试到服务器的路由跳数与延迟(示例:香港到香港一般<20ms)。
- 使用mtr或ping检测丢包率,若在云厂商出口处出现大幅丢包,可能是链路或清洗设备问题。
- 多线路测试:用家用宽带、移动数据、海外VPS来测试能否连通,以判断是运营商GFW/黑洞还是单一链路问题。
- 尝试更换端口(如443、8443、10000等)或启用TLS/obfs,以规避深度包检测(DPI)。
- 若怀疑被屏蔽,建议临时使用CDN或中转(如Cloudflare Worker、阿里云全球加速)做流量测试。
5. DNS、域名与反向解析问题
- 确认域名解析记录是否正确:A/AAAA记录指向实例公网IP,TTL值合理(示例TTL=300)。
- 测试域名解析稳定性:使用 "dig +short your.domain" 多地返回是否一致。
- 检查是否使用了CNAME到第三方服务导致解析链路异常或延迟。
- 若使用CDN做加速/隐藏真实IP,确认CDN配置未错误导致Websocket/SS握手失败。
- 检查反向DNS(PTR)是否需要用于合规或服务识别(某些运营商会基于PTR做流量策略)。
6. Shadowsocks服务配置与日志分析(示例配置与日志)
- 常见config.json示例:{"server":"0.0.0.0","server_port":8388,"password":"P@ssw0rd123","method":"aes-256-gcm","timeout":300}(确保JSON格式正确并且端口未被占用)。
- 启动日志示例:INFO: started server at 0.0.0.0:8388;若出现ERROR: bind() failed [Errno 98] Address already in use则端口被占用。
- systemd单元文件检查:/etc/systemd/system/ss.service 是否指向正确的可执行文件与工作目录,使用 "sudo journalctl -u ss -f" 查看实时日志。
- 若出现短连接或RST,检查是否有人为脚本或防护策略在短时间内重置连接。
- 建议开启详细日志级别 retry/debug 来抓包定位,或使用 tcpdump 捕获接口报文 "sudo tcpdump -i eth0 port 8388 -w capture.pcap"。
7. 带宽、流量与DDoS防护策略
- 使用vnStat或ifstat监测流量基线(示例:日均下行带宽 20Mbps,峰值 120Mbps)。
- 若遭遇DDoS,阿里云基础防护会在超阈值时触发流量清洗,确认是否触发事件并查看清洗详情。
- 建议配置ACL限速、连接数阈值或使用CDN/全球加速来分散流量。
- 若是应用层(SS)被大量连接耗尽资源,考虑启用连接数限制或更换更高规格实例(示例:ecs.c6.large -> ecs.g6.4xlarge)。
- 监控参数示例表(居中,边框1,文字居中):
| 指标 | 正常阈值 | 异常示例 |
| 日均带宽 | <=50 Mbps | >200 Mbps(疑似DDoS) |
| 瞬时连接数 | <=200 | >5000(连接洪泛) |
| 丢包率 | <1% | >5%(链路问题) |
8. 真实案例:香港ECS无法外连ss的排查与解决
- 背景:用户在cn-hongkong区域购买ecs.c6.large(2 vCPU,4GB),带宽包5Mbps,公网IP 101.XX.XX.10。
- 问题:ss服务正常启动,但外网客户端无法连接,日志无明显错误。traceroute显示在阿里出口被中断。
- 排查步骤:1) 检查安全组,发现出方向误设为仅允许80/443;2) 在实例内使用 curl 测试外网连通性正常;3) 阿里云工单反馈:该公网IP曾被列入临时清洗池。
- 解决方案:1) 修改安全组放行8388 TCP/UDP并放宽出方向策略;2) 提交工单申请解除清洗并更换带宽包为10Mbps;3) 将ss端口改为443并启用TLS伪装以降低被检测概率。
- 结果:改端口并解除清洗后,客户端延迟从180ms降至35ms,丢包率恢复<0.5%,服务稳定。
9. 常用排查命令与期望输出(便于快速判断)
- 检查端口:ss -ltnp | grep 8388;期望输出包含 "LISTEN" 与对应进程PID。
- 测试连通(外部):从远程机器执行 "nc -vz 公网IP 8388";若返回 "succeeded" 表示端口可达。
- 路由追踪:traceroute 公网IP;期望在香港线内完成跳数小于10且延迟稳定。
- 日志查看:journalctl -u ss -n 200;检查启动、bind与连接拒绝类错误。
- 抓包确认:tcpdump -i eth0 port 8388 -c 200;查看是否有SYN到达与RST返回。
10. 最终检查清单与建议步骤(快速一页清单)
- 步骤1:确认实例地域与规格,记录公网IP与带宽包。
- 步骤2:检查阿里云安全组、网络ACL、VPC路由和云防护告警。
- 步骤3:在实例内检查系统防火墙(iptables/ufw/firewalld)与端口占用。
- 步骤4:查看ss配置与日志,必要时抓包定位TCP层或TLS层故障。
- 步骤5:做多线测试,尝试更换端口或使用CDN/中转,若怀疑DDoS及时申请云厂商支持。
来源:遇到阿里云 香港服务器搭建不了ss时的网络排查清单