开启 fake-ip 后个别设备或应用异常,即常说的 fake-ip 兼容问题,最常见的原因是本该返回真实地址的域名(局域网、内网、时间服务器、联机打洞服务等)也被分配了 198.18.x.x 的假 IP。最快的办法是把这些域名加入 fake-ip-filter,再清除 DNS 缓存。fake-ip 与 redir-host 两种模式的原理对比见《Fake-IP 与 Redir-Host 的区别》,本文只讲具体故障。
问题表现
| 现象 | 典型场景 |
|---|---|
| 局域网设备用域名访问失败,用 IP 访问正常 | nas.lan、router.local、printer.home.arpa |
| 公司内网系统打不开或跳到错误页面 | 只有内网 DNS 能解析的域名,如 oa.corp.example.com |
| 游戏联机失败、NAT 类型变差、语音连不上 | 依赖 STUN 打洞或 P2P 的游戏与通话软件 |
| 系统时间同步失败或时间不准 | time.windows.com、time.apple.com、pool.ntp.org |
| 酒店、机场、校园 Wi-Fi 的登录页不弹出 | 系统联网检测域名被代理接管 |
| 关闭客户端后部分网站暂时打不开 | 系统或应用缓存了假 IP(处理方法见《DNS 问题排查》) |
可能原因
- 内网域名被发往公网 DNS:fake-ip 模式下客户端先返回假 IP,真正解析交给配置里的 nameserver;公网 DNS 不认识
.lan或公司内网域名,连接自然失败; - 需要真实 IP 的协议拿到假地址:STUN、P2P 联机要把自己看到的地址告诉对方,假 IP 会让协商失败;
- UDP 流量走了不支持 UDP 的节点:NTP 使用 UDP 123 端口,假 IP 让这类请求进入客户端并按规则代理,如果节点或规则不支持 UDP,就会超时;
- 联网检测被代理:系统靠访问
captive.apple.com、connectivitycheck.gstatic.com、www.msftconnecttest.com等地址判断是否需要网页登录,被代理后检测“成功”,登录页就不会弹出。
排查方法
-
确认拿到的是假 IP:
nslookup nas.lan ping time.apple.com如果返回
198.18.开头的地址,说明该域名走了 fake-ip。 -
对比真实解析:用内网或运营商 DNS 直接查询,例如
nslookup oa.corp.example.com 192.168.1.1(改成你路由器或公司 DNS 的地址),能查到说明域名本身没问题。 -
查看客户端连接与日志:在 Clash Verge Rev 等客户端的「连接」页找到该域名,确认它匹配了哪条规则、走了哪个出站。
-
临时关闭 TUN 或客户端复测:恢复正常即可确认是 fake-ip 或分流导致。
解决步骤
1. 在 mihomo(Clash Meta)中添加 fake-ip-filter
fake-ip-filter 中的域名会返回真实 IP。* 只匹配一级子域名,+ 匹配该域名本身及所有子域名:
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
- '+.local'
- '+.home.arpa'
- '+.corp.example.com' # 换成你公司的内网域名
- 'time.*.com'
- '+.pool.ntp.org'
- '+.stun.*.*'
- '+.stun.*.*.*'
- 'captive.apple.com'
- 'connectivitycheck.gstatic.com'
- '+.msftconnecttest.com'
- '+.msftncsi.com'
内网域名还需要能被正确解析,可以用 nameserver-policy 指定内网 DNS:
dns:
nameserver-policy:
'+.corp.example.com': '10.0.0.53' # 换成公司 DNS 地址
同时在路由规则中让局域网地址直连,例如 IP-CIDR,192.168.0.0/16,DIRECT,no-resolve。很多订阅自带的配置已经包含这些规则,修改前先确认,避免重复。在图形客户端中,这些设置通常位于「DNS 覆写」或「覆写配置」中,详见《Clash Verge Rev 教程》。
2. sing-box 的处理思路
sing-box 没有同名字段,做法是在 DNS 规则里把这些域名交给非 fakeip 的 DNS 服务器,并把这条规则放在 fakeip 规则之前。例如(local 为你配置的本地 DNS 服务器 tag):
{
"dns": {
"rules": [
{ "domain_suffix": [".lan", ".local", ".home.arpa"], "server": "local" },
{ "domain_suffix": ["pool.ntp.org", "time.apple.com", "time.windows.com"], "server": "local" }
]
}
}
具体写法随版本变化,请对照《sing-box 教程》和官方文档。
3. 清缓存并重连
修改后重载配置,再清除系统 DNS 缓存,并重启受影响的应用或游戏。
Windows(cmd,以管理员身份运行):
ipconfig /flushdns
Windows(PowerShell):
Clear-DnsClientCache
macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Linux(使用 systemd-resolved 的发行版):
sudo resolvectl flush-caches
4. 酒店 Wi-Fi 登录页
最稳妥的做法是先关闭客户端或 TUN,完成网页登录后再开启代理。
验证结果
nslookup nas.lan等返回真实内网地址,而不是198.18.x.x;- 内网系统、NAS、打印机可以正常用域名访问;
- 系统时间可以手动同步成功;
- 游戏或通话软件显示的 NAT 类型恢复,联机正常。
其他方案
- 改用白名单或规则模式:mihomo 的
fake-ip-filter-mode可选blacklist(默认)、whitelist和rule。白名单模式下只有匹配的域名才返回假 IP,兼容性更好,但需要自己维护列表; - 切换为 redir-host:如果需要排除的域名太多,可以直接换模式,代价见《Fake-IP 与 Redir-Host 的区别》;
- 不使用 TUN:只设置系统代理时,系统 DNS 不经过客户端,fake-ip 带来的问题会少很多,但可能出现 DNS 泄露(检测方法见《DNS 泄露检测与防护》),参见《TUN 模式教程》和《DNS 设置教程》。
常见问题
只有某一个游戏联机不正常,怎么找要排除的域名?
打开客户端的「连接」或日志页面,启动游戏并尝试联机,记录出现的域名,尤其是带 stun、p2p、relay 字样的,把它们加入 fake-ip-filter 后重启游戏复测。
加了 fake-ip-filter 为什么还是返回 198.18?
常见原因有三个:配置没有重载、写法不匹配(* 只匹配一级子域名,需要时改用 +.),或者系统和应用还缓存着旧结果。重载配置、清除缓存并重启应用即可。
订阅更新后我加的 fake-ip-filter 不见了?
订阅更新会覆盖原配置文件。建议把自定义内容写在客户端的「覆写」或「合并」功能里,而不是直接修改订阅文件。
手机上开了代理,NAS 的域名打不开怎么办?
原理相同。在 Clash Meta for Android 等客户端的 DNS 覆写中加入局域网域名,或直接用 NAS 的内网 IP 访问。