Clash Verge 建议:开虚拟网卡时,保持 IPv6 开启
否则电脑原有的 IPv6 流量可能绕过 Clash 直连。
会不会漏,取决于程序读不读系统代理。
- 读系统代理的(Chrome 等浏览器):不受 Clash IPv6 开关影响,IPv6 也交给节点,不会显示本地。
- 不读系统代理的(curl、很多命令行工具、Node.js 程序)走虚拟网卡:
- Clash IPv6 开 → 节点
- Clash IPv6 关 + 严格路由开 → N/A(被拦)
- Clash IPv6 关 + 严格路由关 → 本地,漏出
上网分两步
- 查地址:向 DNS 问出 google.com 的 IP。
- 连过去:用这个 IP 建立连接。
1系统设置

系统代理
只对遵守系统代理的程序有效(浏览器、多数常用软件);命令行、游戏等常会绕过。
虚拟网卡模式(TUN)
给电脑装一块「假网卡」,再改路由表,让所有流量都从它这里过。
可同时开:守规矩的走端口,其余走虚拟网卡,殊途同归。
2虚拟网卡模式的细项

TUN 模式堆栈
虚拟网卡收到的是零散数据包,需拼回「连接」才能分流。堆栈即拼装方式:
| 选项 | 原理 |
|---|---|
| System | 系统原生处理,占用低;防火墙需放行 Clash。 |
| gVisor | 程序内处理,隔离好,兼容稳。 |
| Mixed | TCP 用 System,UDP 用 gVisor |
| Mips | mihomo 自研(2026.9),纯 Go;当前默认。 |
四种都能用,选默认即可。
虚拟网卡名称
只是个名字。macOS 上必须以 utun 开头。
自动设置全局路由
将所有流量路由至虚拟网卡。必须开。
自动重定向(仅 Linux)
利用 Linux 自带的防火墙(nftables),让系统直接把 TCP 连接交给 Clash,省掉上面「拼包」那一步:
- 不开:程序 → 虚拟网卡 → Clash 拼包 → 判断
- 开:程序 → Linux 防火墙把 TCP 连接直接交给 Clash → 判断
只影响 TCP,UDP 照旧走虚拟网卡。sing-box 官方说明:性能更好,还能避免和 Docker 冲突,Linux 上「始终推荐」打开。Windows / macOS 上无效。
严格路由
更强硬地防止流量绕过虚拟网卡。不同系统效果不同:
- Linux:虚拟网卡处理不了的流量直接拦掉,防止泄漏。
- Windows:添加防火墙规则,只防止 DNS 查询绕过 Clash。
副作用:VirtualBox 这类程序可能出问题。
自动选择流量出口接口
自动识别真实出口网卡。必须开,否则可能回环断网。多网络时官方建议手动指定。
DNS 劫持
any:53:所有程序发出的 DNS 查询(53 端口)都被截下来交给 Clash 回答,「查地址」这一步也在 Clash 手里。局限:Windows / macOS 上,发给局域网地址(比如路由器)的 DNS 查询劫持不了。
最大传输单元(MTU)
单包最大尺寸,默认即可。
排除自定义网段
填进去的地址不进虚拟网卡,直接走真实网卡。例如 192.168.0.0/16:访问家里的 NAS、打印机时不经过 Clash。
3Clash 设置
局域网连接(allow-lan)
允许其他设备(手机、平板)把这台电脑当代理服务器用:它们在网络设置里填「电脑的局域网 IP:7897」,就能通过这台电脑翻墙。只自己用的话保持关闭,免得同网络的其他人也能连上。
- 门是敞开的:不要密码,谁都能进(mihomo 文档:
lan-allowed-ips默认0.0.0.0/0和::/0)。 - 别人翻墙,扣的是你的流量,留的是你账号的记录。
- 公共 Wi-Fi 上最危险:有人扫一下端口,你的电脑就成了大家的代理。
- 局域网外的人也可能进来:电脑有公网 IPv6、路由器又没拦,就不止局域网了。
- 自己用:关着。
- 出门连公共 Wi-Fi 前,看一眼它关了没。
- 真要给别的设备用:加个密码(
authentication,用户名:密码),或者用lan-allowed-ips只放行自家网段,用完记得关。
DNS 覆写
见 第 4 节。
IPv6
对应配置顶层的 ipv6,官方说明:「是否允许内核接受 IPv6 流量」。关掉后,内核会:
- 自己查地址时只查 IPv4;
- DNS 不再返回 IPv6 地址(无论 DNS 设置里的 IPv6 开关如何);
- 不给虚拟网卡分配 IPv6 地址。
即使开启,若启动时本机无全局 IPv6 地址(不含 fe80::),虚拟网卡仍不配 IPv6。仅在启动或重载时检测。
(本地网络没有 IPv6,Clash 虚拟网卡的 IPv6 也会是 N/A)
详情
实测(只在 Linux 电脑上测过 · 系统代理 + 虚拟网卡同时开):
会不会漏,取决于程序读不读系统代理。
- 读系统代理的(Chrome 等浏览器):不受 Clash IPv6 开关影响,IPv6 也交给节点,不会显示本地。
- 不读系统代理的(curl、很多命令行工具、Node.js 程序)走虚拟网卡:
- Clash IPv6 开 → 节点
- Clash IPv6 关 + 严格路由开 → N/A(被拦)
- Clash IPv6 关 + 严格路由关 → 本地,漏出
| IPv6 开 | IPv6 关 + 严格路由开 | IPv6 关 + 严格路由关 | |
|---|---|---|---|
| 读系统代理(Chrome 等) | 节点 | 节点 | 节点 |
| 不读系统代理(curl、命令行、Node.js 程序) | 节点 | N/A | 本地 |
节点没有 IPv6 时,「节点」都变成 N/A。
Windows 上严格路由只防 DNS 绕过(见第 2 节),拦不住这类 IPv6 流量,未实测。
端口设置
7897:混合代理端口(HTTP / SOCKS5),系统代理与局域网设备均连此端口。被占用时再改。
4DNS 覆写

总开关是干什么的
订阅本身带有一套 DNS 设置。
- 关:使用订阅里的。
- 开:使用这个页面里自己填的,覆盖订阅里的对应项。
下面这些项只在覆写打开时生效。
DNS 监听地址
:53 是 Clash 内置 DNS 对外开的一扇门,给手动把 DNS 指过来的设备用:本机填 127.0.0.1,局域网其他设备填电脑的 IP。DNS 劫持走的是内部通道,不经过这扇门,这里空着也照样劫持。
增强模式:fake-ip
收到查询后不真查,立即从 198.18.0.0/16 分配假地址并记录映射;连接时还原域名交给节点。
- 快:省一次查询。
- 不泄漏:代理网站从未在本地解析。
redir-host 则真实解析,返回真 IP。
Fake IP 范围 / Fake IP 范围(IPv6)
假地址池,默认 198.18.0.1/16(属测试保留段 198.18.0.0/15,不与真实地址冲突)。IPv6 版仅在 IPv6 开启时使用。
Fake IP 过滤模式
- blacklist(默认):名单内返回真实地址,其余假地址;名单通常含局域网、时间同步、游戏主机等域名。
- whitelist:仅名单内返回假地址。
IPv6(启用 IPv6 DNS 解析)
对应 dns.ipv6。关掉时,有人查 IPv6 地址,就回一个空结果,程序自然只用 IPv4。它和 第 3 节的 IPv6 开关是「与」的关系:两个都开,DNS 才会回 IPv6 地址。
5IPv6 专题:电脑和手机为什么不一样
同样是关掉 IPv6
| 电脑(Verge 虚拟网卡) | 安卓(Clash Meta / FlClash) | |
|---|---|---|
| 结果 | 不读系统代理的程序,IPv6 流量照原路由直接出去,绕过 Clash(Linux 已实测,见第 3 节 IPv6) | IPv6 流量被系统拦截,App 自动退回 IPv4(已实测,见下文) |
| 原因 | 虚拟网卡只是多出的一块网卡,系统只按路由表走;没有 IPv6 路由,IPv6 就继续走真实网卡 | 安卓的 VPN 统一由系统接口 VpnService 管理。按谷歌的规定,VPN 没接管的地址类型,系统一律拦截 |
安卓手机上,没接管的就拦(谷歌自己定的规矩); 电脑上,没接管的就放。 Linux 电脑开了严格路由,就变得跟安卓手机一样会拦(实测过,显示 N/A)。 iPhone 没有测试。
安卓上的 IPv6 开关

| 位置 | 管什么 |
|---|---|
| 网络 → Allow Ipv6 | 手机的 IPv6 流量能不能进入 Clash(VPN 那一层) |
| 覆写 → IPv6 | 内核是否处理 IPv6(同电脑) |
| 覆写 → DNS → IPv6 | DNS 是否返回 IPv6 地址(同电脑上的 DNS 覆写 → IPv6) |
「不修改」= 用订阅值;订阅未写则用内核默认(顶层 IPv6 默认开)。
手机比电脑多出「Allow Ipv6」:手机上 VPN 是 App 向安卓系统申请的,申请时要单独说明接不接管 IPv6;电脑上虚拟网卡由内核自己建,设置页一个 IPv6 开关就够了。
手机:只关「Allow Ipv6」即可,IPv6 由系统拦截,无泄漏(已实测);全开亦可,不影响代理流量。
全开会怎样
- 代理流量:基本无差别。
- 国内直连:本地有 IPv6 时可能走 IPv6。
- 直连 IPv6 地址的 App:节点无 IPv6 则连不上。
实测:Allow Ipv6 开 / 关
条件:Clash Meta for Android · 全局模式 · 覆写里的 IPv6 保持「不修改」。
节点:Cox(美国,有 IPv6)、So-net(日本,没有 IPv6)。
方法:浏览器打开 browserleaks.com/ip;再直接连 Telegram 的两个 IPv6 地址各数次,同时看日志。
| Allow Ipv6 | 节点 | browserleaks IPv6 | 直接连 IPv6 地址 |
|---|---|---|---|
| 开 | Cox(有) | Cox 节点的 IPv6 | 通(偶有超时) |
| 开 | So-net(无) | n/a | 失败,节点回 error code 3 |
| 关 | Cox(有) | n/a | 被系统拦下,日志里没有记录 |
| 关 | So-net(无) | n/a | 被系统拦下,日志里没有记录 |
四项都没有出现本地地址。
# 开 + Cox:用 IPv6 进门,直接连 IPv6 地址,连上
[TCP] [fdfe:dcba:9876::1]:45176 --> [2001:b28:f23d:f001::a]:443 using GLOBAL
# 开 + So-net:节点立刻回复「网络不可达」
[TCP] dial GLOBAL [fdfe:dcba:9876::1]:45490 --> [2001:b28:f23d:f001::a]:443 error: ... server returned socks5 error code 3
# 开 + Cox,偶发:节点没回话
[TCP] dial GLOBAL [fdfe:dcba:9876::1]:45192 --> [2001:b28:f23d:f001::a]:443 error: ... TIMEOUT
怎么看日志
- 来源
fdfe:dcba:9876::1/172.19.0.1:Clash 虚拟网卡自己的内网地址,分别表示 App 用 IPv6 / IPv4 进的门。 - 目标是域名 = 交给节点的是域名;目标是方括号地址 = App 直接连的 IPv6 地址。
- TCP 行:Info = 连上,带 error 的 Warning = 失败。UDP 行的 Info 只表示交出去了,不代表通了。
- 失败类型:error code 3 = 节点没有 IPv6(立即、次次如此);TIMEOUT = 线路偶发问题(没回话、零星出现)。
结论
- 直连 IPv6 地址,需要 Allow Ipv6 开着、并且节点有 IPv6。
- 节点没有 IPv6 时,失败发生在节点那一端,不会改走本地。
- Allow Ipv6 关时,日志里没有一条 IPv6 来源:IPv6 在系统那一层就被拦下,不进入 Clash。
- 覆写里的 IPv6 改成「禁用」的情况未测。
6推荐设置一览
| 选项 | 建议 |
|---|---|
| 虚拟网卡模式 | 需要接管所有程序时开 |
| 系统代理 | 开 |
| 局域网连接 | 关(不给其他设备共享时) |
| DNS 覆写 | 关 |
| IPv6 | 开(开着虚拟网卡时尤其要开,见第 3 节) |
| 统一延迟 | 开 |
| 日志等级 | info,排查问题时改 debug |
| TUN 堆栈 | 默认 |
| 自动设置全局路由 / 自动选择出口接口 | 开 |
| 自动重定向 | Linux 可以开;其他系统无效 |
| 严格路由 | 关(Linux 上如果关了 IPv6,建议打开) |
| DNS 劫持 / MTU / 排除网段 | 默认 |
后记:这一页是怎么测出来的
第 3、5 节里的实测,起因是网页版 Claude 的一连串追问。



最初的结论 ①②③,和 Claude 的追问


节点对照:So-net、AT&T 没有 IPv6,Cox 有


测出来的结果:① 只在「不读系统代理 + 严格路由关」时成立,读系统代理的浏览器从不显示本地。详见第 3 节 IPv6。