1.1 在阿里云控制台确认实例地域为“香港”,确保ECS已分配公网IP(EIP)。
1.2 在本地或其他节点用telnet/ss命令尝试连接目标端口:telnet 公网IP 8388 或 curl --socks5-hostname 公网IP:8388 http://example.com,记录失败的报错信息(连接超时、拒绝等)。
1.3 明确是客户端无法连入(入站)还是服务端无法访问外网(出站),这决定接下来的排查方向。
2.1 登录阿里云控制台 -> ECS实例 -> 网络与安全 -> 安全组,查看入方向规则是否允许TCP/UDP对应端口(例如8388),授权源可以暂时设为0.0.0.0/0进行测试。
2.2 确认EIP已正确绑定到该实例且公网IP与实例中的ip addr show一致;若使用负载或NAT网关,检查转发规则。
3.1 查看本机监听:ss -tulpen | grep 8388 或 netstat -tulpen | grep 8388,确认ss或ssserver进程是否已绑定到0.0.0.0:8388。
3.2 检查iptables/ufw/firewalld:iptables -L -n -v;ufw status;firewall-cmd --list-all。必要时临时关闭防火墙验证(注意风险)。
3.3 若端口“已被占用”,用lsof -i :8388或ps aux | grep 进程名定位并释放端口。
4.1 如果使用shadowocks-libev,systemd单元名通常为 ss-server 或 shadowsocks-libev.service:systemctl status ss-server -l;journalctl -u ss-server -f 实时查看。
4.2 若使用Python版ssserver,直接用命令行运行增加-v或--verbose:ssserver -c /etc/shadowsocks/config.json -v,观察启动输出,常见错误如JSON parse error或plugin不存在。
4.3 检查配置文件常见问题:端口是否为数字、密码是否为字符串、JSON是否有多余逗号,编码错误会导致服务无法启动并写入日志。
5.1 本机抓包:tcpdump -i eth0 port 8388 -nn -vv -c 100,可判断外部请求是否到达服务器网卡。
5.2 若tcpdump没有收到包,说明安全组或上游节点阻断;若收到包但应用没有响应,需查看应用日志与进程权限。
5.3 路由诊断:ip route show;ping 8.8.8.8 与 traceroute 目标,确认出站路由是否正常(有时香港节点运营商会限制部分端口)。
6.1 错误:“Address already in use” -> 日志显示端口被占,用ss -ltnp找到占用进程并关闭或更换端口。
6.2 错误:“Permission denied” -> 绑定1024以下端口需root,或使用高端口;检查systemd单元是否以非root用户启动导致权限问题。
6.3 错误:JSONDecodeError/invalid config -> 用jq . /etc/shadowsocks/config.json 检查格式,修正并重启服务。
答:先确认进程是否在监听(ss -tulpen),如果没有,查看应用日志(journalctl -u 服务名 或 /var/log/shadowsocks.log)。若在监听,使用strace -p PID 查看系统调用是否阻塞,检查程序是否在等待插件或DNS解析失败(查看 /etc/resolv.conf 并测试 dig)。同时确认SELinux或AppArmor是否限制(getenforce 或 aa-status)。
答:可能原因有(1)实例内部防火墙(iptables/ufw/firewalld)未放行;(2)EIP未正确绑定或SNAT规则有误;(3)阿里云的公网路径或香港ISP对某些端口做了限制;(4)安全组规则优先级或VPC路由表问题。按顺序检查防火墙、EIP绑定、抓包确认包是否到达网卡,再联系阿里云支持确认公网链路。
答:建议(1)将ss服务日志写入文件并接入集中式日志(ELK/CloudMonitor);(2)配合Prometheus抓取主机网络连接数、端口监听状态与tcp连接失败率;(3)设置alert规则(端口不可达、服务未运行、异常流量),并在发布配置变更后做回归测试;(4)记录操作步骤与变更单,定位复现路径。