现象
EasyTier 组网后:
ping 10.126.126.x✅ 成功curl http://10.126.126.x❌ 失败
说明 EasyTier 隧道本身正常,问题在 TCP/应用层。
排查顺序
1. Web 服务只监听 127.0.0.1(最常见)
ss -tlnp
如果看到:
127.0.0.1:8080
而不是:
0.0.0.0:8080
说明服务拒绝来自 EasyTier 地址的连接。修复方式:
| 服务 | 正确配置 |
|---|---|
| Nginx | listen 0.0.0.0:80; |
| Node.js | app.listen(8080, '0.0.0.0') |
| FastAPI/uvicorn | uvicorn main:app --host 0.0.0.0 |
| Python http.server | python -m http.server --bind 0.0.0.0 |
2. iptables 只放行了 ICMP,没放行 TCP
sudo iptables -L -n
sudo ufw status
sudo firewall-cmd --list-all # CentOS
临时放行 EasyTier 网卡:
sudo iptables -I INPUT -i tun0 -j ACCEPT
sudo iptables -I FORWARD -i tun0 -j ACCEPT
如果 HTTP 立刻恢复,说明是防火墙问题,再添加永久规则。
3. Docker 端口映射绑定到 127.0.0.1
docker ps
如果端口映射是:
127.0.0.1:8080->8080/tcp
EasyTier 无法访问。需要改为:
docker run -p 8080:8080 ... # 正确
# 不要用
docker run -p 127.0.0.1:8080:8080 ...
4. HTTP 请求被系统代理拦截
如果本机装了 Clash/V2Ray/sing-box:
curl --noproxy '*' http://10.126.126.x
如果加了 --noproxy 后能访问,说明代理规则把 EasyTier 内网地址错误地转发了出去。在代理工具里添加 10.0.0.0/8 为直连规则。
5. MTU 问题
现象:ping 小包正常,HTTP 建连后卡住,大文件下载失败。
测试:
ping -M do -s 1472 目标IP
如果失败,降低 MTU:
sudo ip link set tun0 mtu 1280
6. 路由未覆盖目标网段
ip route | grep tun0
确认有类似:
10.126.126.0/24 dev tun0 proto kernel scope link src 10.126.126.1
如果没有,HTTP 的 TCP 包会走默认网关出公网。
tcpdump 快速定位(推荐)
在服务端抓包:
sudo tcpdump -i tun0 tcp port 80
客户端发起请求后看结果:
| 抓包结果 | 结论 |
|---|---|
| 看到 SYN 包 | 流量到达服务端,问题是防火墙或服务监听地址 |
| 看不到任何包 | EasyTier 路由问题,或客户端代理拦截 |
| SYN 但没有 SYN-ACK | 防火墙拦截(iptables DROP) |
| SYN 后立即 RST | 服务没在该端口监听 |
配合 curl -v http://目标IP 看是 Connection refused 还是 Timeout,可以快速缩小问题范围。
