EasyTier 能 ping 通但 HTTP 访问不了:六种原因排查

现象

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 地址的连接。修复方式:

服务正确配置
Nginxlisten 0.0.0.0:80;
Node.jsapp.listen(8080, '0.0.0.0')
FastAPI/uvicornuvicorn main:app --host 0.0.0.0
Python http.serverpython -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,可以快速缩小问题范围。