EasyTier 能 ping 通但 HTTP 不通:排查思路和解决方法

EasyTier 组网后能 ping 通对方,但 HTTP 访问失败——这是隧道已建立、应用层流量被拦截的典型现象。

快速定位(3 条命令)

① 客户端测试 TCP 连通性

curl -v http://对方EasyTierIP:端口
  • Connection refused:网络通,服务没监听
  • Connection timed out:防火墙或路由拦截
  • 返回 HTTP 内容:服务正常,排查客户端代理

② 服务端抓包

sudo tcpdump -i tun0 tcp port 80

同时客户端访问一次:

抓包结果结论
看到 SYN流量到了服务器,查服务监听或防火墙
看不到 SYN路由或 EasyTier 转发问题
SYN 无 SYN-ACK防火墙或服务未监听

③ 查看监听端口

ss -lntp | grep -E ':80|:443|:8080'

原因一:服务只监听 127.0.0.1(最常见)

ss -lntp 看到 127.0.0.1:80,EasyTier 的 tun0 流量就无法到达服务。

修改方法:

# uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000

# nginx
listen 0.0.0.0:80;

# Node.js
app.listen(80, '0.0.0.0')

原因二:防火墙拦截 tun0

ping 用 ICMP,HTTP 用 TCP,如果防火墙只放行了 ICMP 或者对 EasyTier 网卡有限制:

# 查看规则
sudo iptables -L -n
sudo ufw status

# 临时放行 tun0(测试用)
sudo iptables -I INPUT -i tun0 -j ACCEPT
sudo iptables -I FORWARD -i tun0 -j ACCEPT

永久规则(以 ufw 为例):

sudo ufw allow in on tun0

原因三:Docker 端口绑定到 localhost

docker ps

如果看到 127.0.0.1:80->80/tcp,改成:

docker run -p 80:80 ...

原因四:服务绑定到特定网卡 IP

服务器有多个网卡(公网 IP + EasyTier IP),应用可能只绑到了公网 IP:

ss -lntp | grep 8080

如果看到 103.x.x.x:8080,需要改为 0.0.0.0:8080

原因五:代理劫持 HTTP 流量

系统装了 Clash、sing-box 等,可能把内网 IP 的 HTTP 也走了代理:

curl --noproxy '*' http://10.x.x.x

如果这样能通,就是代理规则问题,把 EasyTier 网段加入 bypass 列表。

原因六:MTU 问题

现象:ping 小包正常,HTTP 建连后卡住或大文件下载失败。

ping -M do -s 1472 目标IP

失败则把 EasyTier 网卡 MTU 调小:

sudo ip link set tun0 mtu 1280

EasyTier 配置自定义 IP 段

默认 dhcp = true 由网络中的 DHCP 节点分配 IP。如果要固定 IP:

dhcp = false
ipv4 = "10.88.0.2/24"

如果加入的是他人的 EasyTier 网络,单方面改客户端配置通常不生效,需要整个网络统一规划地址段。

诊断工具速查

# 确认 EasyTier 接口和 IP
ip addr show tun0

# 确认路由(流量是否走 tun0)
ip route | grep tun0

# TCP 连通性测试
nc -vz 目标IP 80

# 本机自测(服务端执行)
curl -v http://127.0.0.1:80
curl -v http://tun0_IP:80