Jiang's Tech Journal

Jiang's Tech Journal

首页
分类
关于
Login →
Jiang's Tech Journal

Jiang's Tech Journal

首页 分类 关于
Login
  1. Home
  2. Ubuntu 终端不走 Clash/Mihomo TUN:最后发现是 UFW 拦截了 Meta 网卡

Ubuntu 终端不走 Clash/Mihomo TUN:最后发现是 UFW 拦截了 Meta 网卡

0
  • Published at 2026-06-30
  • Read 1 times
Jiang
Jiang
Table of Contents
No Table of Contents

结论

如果 Clash/Mihomo 的 TUN 网卡叫 Meta,直接放行这个接口即可:

sudo ufw allow in on Meta
sudo ufw allow out on Meta
sudo ufw route allow in on Meta
sudo ufw route allow out on Meta
sudo ufw enable

如果你的 TUN 网卡不叫 Meta,先用下面命令查看实际名称:

ip addr

然后把命令里的 Meta 替换成你的 TUN 网卡名。

背景

这次问题发生在 Ubuntu 终端中。Clash/Mihomo 已经开启了 TUN 模式,但终端里直接访问外网时一直卡住,看起来像是终端没有走 Clash 的虚拟网卡。

一开始容易怀疑这些方向:

  • 终端没有读取系统代理;
  • Clash/Mihomo 的 TUN 没有真正启用;
  • DNS 没有被劫持;
  • 路由没有接管;
  • 节点或代理端口有问题。

但最后排查下来,真正原因是 UFW 防火墙拦截了 Meta TUN 网卡相关流量。

问题现象

终端里直接访问 ipinfo.io 会超时:

curl -4 -v --connect-timeout 10 https://ipinfo.io

关键输出是:

Host ipinfo.io:443 was resolved.
IPv4: 198.18.0.8
Trying 198.18.0.8:443...
Connection timed out

这里有一个重要信息:域名已经被解析成了 198.18.0.8。

198.18.0.0/16 通常是 Clash/Mihomo fake-ip 使用的地址段。这说明 DNS 劫持已经生效,流量至少已经进入了 TUN 相关逻辑。

但 TCP 连接一直超时,说明问题不在 DNS,而是在后续 TCP 流量转发或返回路径上。

代理端口本身是正常的

随后用本地代理端口测试:

curl -4 -v --connect-timeout 10 --proxy http://127.0.0.1:63088 https://ipinfo.io

这次可以正常返回代理出口 IP:

{
  "ip": "146.190.112.118",
  "city": "Santa Clara",
  "region": "California",
  "country": "US"
}

这说明:

  • Clash/Mihomo 程序本身正常;
  • 代理节点正常;
  • 本地代理端口 127.0.0.1:63088 正常;
  • 规则和出站链路没有问题。

因此,问题不是“代理不可用”,而是“系统流量通过 TUN 时被拦住了”。

TUN 网卡也已经创建成功

查看网卡:

ip addr

可以看到 Meta 网卡:

9: Meta: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP>
    inet 198.18.0.1/30 scope global Meta

这说明 TUN 虚拟网卡已经创建成功。

再查看路由和策略路由:

ip route
ip rule
ip route show table 2022

关键结果是:

default via 198.18.0.2 dev Meta

这说明策略路由表 2022 也已经把流量导向了 Meta 网卡。

到这里可以基本确认:

项目状态
Clash/Mihomo 本地代理端口正常
代理节点正常
TUN 网卡 Meta已创建
策略路由 table 2022已存在
DNS fake-ip已生效
直接 TUN TCP 连接超时

为什么关闭防火墙后就好了

后来关闭 UFW 防火墙后,终端立刻可以正常访问外网。

这说明根因很明确:

UFW 防火墙拦截了经过 Meta TUN 网卡的流量。

TUN 模式不是简单地让程序连接 127.0.0.1 代理端口。

显式代理模式的路径大致是:

curl -> 127.0.0.1:63088 -> Clash/Mihomo -> 代理节点

这通常只是本机 loopback 连接,防火墙一般不会拦截。

但 TUN 模式的路径大致是:

curl -> 系统路由 -> Meta 虚拟网卡 -> Clash/Mihomo TUN -> 代理节点

这里会涉及:

  • Meta 虚拟网卡;
  • 策略路由;
  • DNS 劫持;
  • INPUT / OUTPUT / FORWARD 规则;
  • UFW / iptables / nftables。

如果 UFW 没有放行 Meta 网卡,就可能出现这种现象:

  • DNS 已经正常劫持;
  • 域名已经解析成 fake-ip;
  • 代理端口手动指定时正常;
  • 但直接走 TUN 的 TCP 连接一直超时。

为什么不建议直接关闭防火墙

关闭防火墙当然可以验证问题,但不建议长期这样做。

更合适的做法是保留 UFW,只放行 Clash/Mihomo 的 TUN 网卡 Meta。

这样既能保留防火墙,又能让 TUN 正常转发流量。

最终修复命令

执行:

sudo ufw allow in on Meta
sudo ufw allow out on Meta
sudo ufw route allow in on Meta
sudo ufw route allow out on Meta
sudo ufw enable

然后测试:

curl -4 https://ipinfo.io

如果返回的是代理出口 IP,就说明终端已经正常走 Clash/Mihomo TUN。

补充说明

如果你的系统里 TUN 网卡不是 Meta,比如叫 tun0、clash0、mihomo,就需要把命令里的 Meta 替换成实际网卡名。

查看网卡名:

ip addr

查看 UFW 状态:

sudo ufw status verbose

如果仍然不通,可以再检查默认转发策略:

cat /etc/default/ufw | grep DEFAULT_FORWARD_POLICY

如果是:

DEFAULT_FORWARD_POLICY="DROP"

并且前面的 ufw route allow 仍然不生效,再考虑是否需要调整默认转发策略。但这个影响范围更大,优先使用只放行 Meta 网卡的方案。

一句话总结

这次问题不是 Clash/Mihomo 没开 TUN,也不是 Ubuntu 终端不支持 TUN,而是 UFW 默认拦截了 Meta 虚拟网卡相关流量。

放行 Meta 的入站、出站和路由转发后,终端流量就可以正常走 TUN:

sudo ufw allow in on Meta
sudo ufw allow out on Meta
sudo ufw route allow in on Meta
sudo ufw route allow out on Meta
sudo ufw enable
Tags: #clash 1 #Linux 1 #Ubuntu 1
Table of Contents
No Table of Contents
Copyright © 2024 your company All Rights Reserved. Powered by Halo.