Windows 使用裸核 Mihomo TUN 作为 FakeIP 透明代理网关的配置与实践
最近看到 Mihomo Alpha 合并了 FakeIP 规则模式,这是 OP 期待已久的功能,似乎相关文章较少,遂写本贴记录,较早前使用的是 pcap2socks 。
这有什么好处?
- 支持 UWP 应用及 WSL2 。
- 便携、配置简单,无需使用虚拟机或重启切换 Linux ,可长期开启。
- 未修改默认路由,不影响 BT 和完整的 ICMP 特性,可与加速器部分模式共存。
- 国内流量 IPv6 直连,其他设备 IPv4 在 ICMP 重定向后直连,不经过代理网关。
- 家庭网关可将 DNS 及 FakeIP 路由至 Windows ,不修改 DHCP 网关,减少故障点。
- 基于丰富的 GeoX 规则,简化 DNS 策略,只执行必要的查询,减少国外域名请求泄露。
- 若发布 FakeIP 路由,配合 ECS 及 DNS 出入站策略,可实现多地共用一套透明代理网关。
存在这些问题?
- chrome://flags#local-network-access-check 会将 198.18.0.0/15 判断为本地网络,可改用其他地址,并在家庭网关添加黑洞路由。
- 部分国产 ROM 硬编码 DNS 114.114.114.114 ,Windows 不便在转发链 DNAT ,需在 route-address 送至 TUN 劫持。
- 开启 strict-route 会添加防火墙规则,nslookup 使用公共 DNS 查询超时,为其加入 route-address 即可。
- Windows 没有 fwmark ,开启 IP 转发再设置默认路由可能导致环路,不支持 P2P 游戏的直连 IP 加速。
- 开启 IP 转发后应使能 disable-icmp-forwarding ,避免 Ping 环路引起资源占用升高。
- 受 Loopback Large MTU 影响,不建议开启 BBRv2 ,会导致 UI 通信异常。
- DNS 模块截胡了 Type 65 Response ,不便使用 DNSSEC 及 ECH 。
UDP 相关
- 如请求为 UDP ,代理节点未配置 udp: true 时会继续向下匹配,最终从默认开启 UDP 的 DIRECT 出站。这意味着,终端收到 Alt-Svc 升级到 HTTP/3 后请求会在国内直连,若恰巧 IP 没有被墙只是连接质量差,这会给予浏览器虚假的希望,很久或者不 Fallback 到 TCP 造成体验降级。故节点不支持 UDP 时,仍可保留 udp: true 开启,或在 nameserver-policy 屏蔽 DNS 请求,又或在路由规则过滤 UDP ,避免 doesn’t match any rule using DIRECT 。
- FakeIP 持久化在重载配置后概率失效,尽管默认的 Sniff 可保证 HTTP 正常分流,但会造成 QUIC 等依赖 FakeIP 映射表的 UDP 流量异常。
- 即使域名命中 PROXY 策略且 IP 规则配置了 no-resolve ,UDP 请求仍会触发 DNS 查询,不像 HTTP 送至远端代理服务器解析。
- 配置 REJECT 后不会发送 icmp-port-unreachable 。
- 碎碎念:要是 DNS 模块保留 HTTPS Answer 的 ALPN 但去掉 IP Hint ,也许能增加 QUIC 使用率。
配置
节 全局
log-level: debug
ipv6: true
profile:
store-selected: true
store-fake-ip: true
external-controller: '[::]:9090'
secret: foobar
external-ui: ui
external-ui-url: https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip
geo-auto-update: false
geodata-mode: true
geox-url:
geoip: https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat
geosite: https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat
节 TUN
tun:
enable: true
stack: system
mtu: 1400
auto-route: true
strict-route: true
disable-icmp-forwarding: true
route-address: # 可添加 Telegram CIDR
- 198.19.0.0/16
- 114.114.114.114/32
route-exclude-address:
- ::/0
节 DNS
是的,只需一个 DNS Server 或者不指定,DNS 有很多流派,这是简易的。线路质量较好时体验不错,几乎没有 DNS 泄露,可能会费流量。
这接近于纯域名分流,ChinaList 查询 system 即运营商 DNS 并返回 RealIP 直连,返回 RealIP 的域名应在 nameserver-policy 配置 system 解析。其余返回 FakeIP 进一步执行 GeoSite 分流。仅当非直连域名出现 UDP 流量时,才通过 UDP 53 发至对端查询,如节点不支持 UDP ,建议使用 rcode 屏蔽。
dns:
enable: true
listen: '[::]:53'
ipv6: true
enhanced-mode: fake-ip
fake-ip-range: 198.19.0.0/16
fake-ip-filter-mode: rule # 部分域名如同属于多个分组,使用 rule 模式精确分配
fake-ip-filter:
- GEOSITE,google-cn,fake-ip # 代理国行 Google 服务 API 与 AMP CDN
- GEOSITE,private,real-ip
- GEOSITE,category-ntp,real-ip
- GEOSITE,connectivity-check,real-ip
- GEOSITE,china-list,real-ip
- MATCH,fake-ip
nameserver: [system]
nameserver-policy:
GEOSITE:private,category-ntp,connectivity-check,china-list: system
+: 8.8.8.8#代理节点 # 如节点不支持 UDP 改为 rcode://refused 屏蔽
节 路由规则
靠前的规则是可直连的应用及游戏更新域名,无论使用 HTTP 代理或 FakeIP ,命中 DIRECT 出站时会通过 system 的 DNS 查询。
rules:
- DOMAIN-SUFFIX,iosapps.itunes.apple.com,DIRECT
- DOMAIN-SUFFIX,steamserver.net,DIRECT
- GEOSITE,apple-update,DIRECT
- GEOSITE,win-update,DIRECT
- GEOSITE,private,DIRECT
- GEOSITE,geolocation-!cn,代理节点
- GEOSITE,google-cn,代理节点
- GEOSITE,china-list,DIRECT
- GEOIP,private,DIRECT,no-resolve
- GEOIP,cn,DIRECT,no-resolve # 添加 no-resolve 不对未知域名进行 GeoIP 分流,不进行二次解析
- MATCH,代理节点
修改上述配置并添加出站代理,保存为 config.yaml ,使用 sudo .\mihomo-windows-amd64-v3.exe -d . 运行。Mihomo 将从第一个代理节点下载 UI 及 GeoX 文件,完成后便可通过 http://localhost:9090/ui 进入 UI ,也可以注册为服务开机自启。
接下来使用管理员 PowerShell 执行 Set-NetIPInterface -Forwarding Enabled 开启所有网卡的 IP 转发,无需重启,将其他终端 DNS 及网关设置为 Windows 的 IPv4 地址即可。固定场景使用时,可为 Windows 配置静态 IP ,DNS 使用家庭网关代理。若希望通过 DHCP 下发,家庭网关应清空 IPv6 DNS ,或改为 WIndows 的 LLA 或 ULA ,并根据 route-address 的条目配置静态路由至 Windows 。
到这里就结束啦,试试通过 FakeIP 访问 https://browserleaks.com/quic 测试,或多次刷新 https://cloudflare.com/cdn-cgi/trace 查看 HTTP/3 连通性。
杂项
感谢你能看到这里,下面是分流模式的变体,GeoX 分流推荐阅读 Aloxaf 的博文。
ChinaList 模式配合 GeoIP 分流
较常用,对不在 geolocation-!cn 的未知域名使用系统 DNS 查询,如结果为国内 IP 则直连,否则代理出站,对未知域名的判断流程产生泄露风险。
dns:
# ...
nameserver-policy:
GEOSITE:private,category-ntp,connectivity-check,china-list: system
GEOSITE:geolocation-!cn: 8.8.8.8#代理节点
rules:
# ...
- GEOIP,cn,DIRECT
- NETWORK,udp,REJECT # 未知域名是通过 system 查询的,结果可能有污染,或不是代理节点的最优 IP
- MATCH,代理节点
GFWList 模式
侵入小,适合大量未知域名需要 RealIP 国内直连的场景,可替换 geolocation-!cn 为 gfwlist 。
dns:
# ...
fake-ip-filter:
- GEOSITE,private,real-ip
- GEOSITE,category-ntp,real-ip
- GEOSITE,connectivity-check,real-ip
- GEOSITE,geolocation-!cn,fake-ip
- MATCH,real-ip
nameserver: [system]
nameserver-policy:
GEOSITE:private,category-ntp,connectivity-check: system
GEOSITE:geolocation-!cn: 8.8.8.8#RULES
[1] https://github.com/MetaCubeX/mihomo/pull/2469
[2] https://www.aloxaf.com/2025/04/how_to_use_geosite
[3] https://learn.microsoft.com/zh-cn/answers/questions/4372916/windows11-bbr2-steam-steamwebhelper
fake-ip-filter 支持 rule 模式这就很有用了, fakeip 模式又多了一个优点