a) 场景:在阿里云香港(ECS)上部署 Shadowsocks(ss) 服务,但客户端无法连接或没有流量。 b) 目标:通过抓包判断流量是否到达服务器、服务器是否有响应、以及被何处丢弃。 c) 准备:需要 root 权限或 sudo,安装 tcpdump、tshark、net-tools(含 ifconfig、netstat)、ss(iproute2)。 d) 端口信息:示例使用端口 8388(常见 ss 端口),也请记录实际配置端口与协议(TCP/UDP)。 e) 网络图:本地客户端 -> Internet -> 阿里云公网 IP -> ECS 网卡(eth0) -> 本地程序(ss-server)。 f) 小贴士:若怀疑是 ISP 层或 DDoS 防护,抓包时关注 SYN、RST、ICMP 与 TLS 指纹。
2.
检查基础网络与防火墙
a) 阿里云安全组:在控制台确认入方向放行 8388/TCP 及 8388/UDP(如使用 UDP)。 b) 本机iptables:sudo iptables -L -n -v;确认没有 DROP 规则阻止端口。 c) 检查绑定:ss-server 是否绑定 0.0.0.0 或公网 IP(ss-local 仅本地绑定无效)。 d) 查看监听:sudo ss -tunlp | grep 8388 或 netstat -tunlp | grep 8388,确认进程 PID 与端口对应。 e) 路由表:ip route show,确认默认路由正常且没有错误的 policy routing。 f) 核查系统级安全:检查 SELinux/ufw 或第三方安全软件是否拦截。
3.
使用 tcpdump 抓包定位(基础命令)
a) 抓取到达 eth0 的 8388 端口包:sudo tcpdump -i eth0 port 8388 -nn -c 200 -w /tmp/ss_hk.pcap b) 仅抓 SYN 报文:sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and port 8388' -nn -c 100 c) 显示简洁输出:sudo tcpdump -i eth0 -nn port 8388 -c 50 -A 用于查看明文或 HTTP-like 内容。 d) 同时抓内外方向:在客户端和服务器同时抓包对比,判断是否是入站未达或出站被拦截。 e) 抓包保存后用 Wireshark 或 tshark 分析:tshark -r /tmp/ss_hk.pcap -q -z conv,tcp。 f) 注意权限与带宽:抓包会消耗磁盘,长时间抓包请限制包数或使用 ring buffer。
4.
抓包数据演示(示例表格)
a) 以下为一次抓包统计示例,来自真实排错过程(示例数据)。 b) 表格展示了时间、源/目的 IP、端口、包数与字节数,帮助快速判断流量是否到达。 c) 若看到 SYN 到达但没有 ACK 返回,说明服务端未处理或被内核丢弃。 d) 若没有任何入包,说明安全组/运营商/路由问题更可能在链路上。 e) 表内数据为 tcpdump -nn 列表统计后的聚合结果,可用 tshark 进一步过滤。
时间
源IP
目的IP
源端口
目的端口
包数
字节
2026-03-10 10:01:12
203.195.10.45
47.89.12.34
52344
8388
12
5,184
2026-03-10 10:01:12
47.89.12.34
203.195.10.45
8388
52344
0
0
5.
真实案例与服务器配置示例
a) 案例:客户A在阿里云香港部署 ss,遇到“能接收 SYN 但客户端超时”的问题。 b) 该ECS配置:ecs.c6.large(2 vCPU, 4 GiB RAM),系统盘 40GB,公网带宽 10 Mbps,操作系统 CentOS 7。 c) 排查结果:tcpdump 显示来自客户端的 SYN 到达,但服务器未发出 TCP ACK(见上表),ss-server 监听在 127.0.0.1 mistakenly)。 d) 解决:将 ss 配置 bind_address 改为 0.0.0.0,重启服务后 ACK 正常返回,连接恢复。 e) 建议:生产环境使用 100 Mbps 或更高带宽实例,并启用阿里云的DDoS基本防护与安全组白名单策略。 f) 备选方案:若怀疑运营商封锁,考虑改用 TLS 或 vmess + TLS 隧道以混淆特征。