原文在 GitHub:RiceBlack67/mieru-tutorial · dns.md(本页为备份,内容相同)。配套教程:mieru 个人自建教程
节点域名用国内 DoH 直连解析,其他所有网站用境外 DoH 经代理解析。 本文同时说明怎么用 ping.pe 判断 IP 是否被墙,以及为什么 1.1.1.1 在墙内连不上。
进阶内容,可选。本教程
install.sh生成的配置只管翻出去,DNS 走国内,能正常用。介意 DNS 泄漏的话,再按下面改。
在 tcp.ping.pe 测 你的IP:端口,只看中国区的结果:
| 结果 | 判断 |
|---|---|
| 只有 Tencent 几行红,电信 / 联通 / 移动 / 阿里云全绿 | ✅ 没被墙 |
| 电信 / 联通 / 移动 / 阿里云一起红 | ❌ 被墙了 |
我们拿两台不同商家的机器(DMIT、AWS)测 TCP 端口,结果都是只有腾讯红,其他全绿,所以腾讯红跟 IP 本身无关。
想看被墙是什么样子,可以测 1.1.1.1:443:中国区所有探测点一起红,海外全绿。
1.1.1.1 和 8.8.8.8 的 443 / 853 端口提供加密 DNS(DoH / DoT)。 墙的主要手段之一是 DNS 污染,前提是查询是明文的。加密 DNS 墙看不见也改不了,所以整个被封。 普通 53 端口的明文 DNS 能被污染,反而一般不封。
节点域名要在代理连上之前先解析。如果节点域名交给 1.1.1.1 / 8.8.8.8 的 DoH 去查:
连不上 DNS → 解析不出节点 → 代理起不来 → 还是连不上 DNS
结果就是所有节点超时。
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
respect-rules: true
default-nameserver:
- 223.5.5.5
- 119.29.29.29
# 节点域名:国内能连的加密 DNS,直连解析
proxy-server-nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query
# 其他所有网站:境外 DoH,经代理隧道出境去查
nameserver:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
| 要解析的 | 用哪个 DNS | 怎么连过去 |
|---|---|---|
| 节点域名 | proxy-server-nameserver(alidns / doh.pub) |
直连。这时代理还没起来,只能用墙内能连的 |
| 其他所有网站 | nameserver(1.1.1.1 / 8.8.8.8) |
走代理,从海外 VPS 发出 |
respect-rules: true开了它,DNS 请求本身也按规则走代理,是从海外 VPS 发出去的,那里能连上 1.1.1.1。
需要 mihomo 1.18.6 及以上(稳妥用 1.19+)。 电脑端建议开 TUN 模式,只开系统代理的话,部分程序不走代理。
fake-ip 模式下,被代理的网站其实是 VPS 自己去解析和连接的,所以国内 DNS 污染一般不会导致连不上。问题在于谁知道你查了什么:
代价:
用 nameserver-policy 把国内网站交给国内 DoH,其他网站照旧走境外 DoH + 代理:
dns:
nameserver-policy:
'geosite:geolocation-!cn':
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
'geosite:cn':
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
rules:
- GEOSITE,category-ip-geo-detect,PROXY
- GEOSITE,geolocation-!cn,PROXY
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
⚠️
geosite:cn里混了一些境外网站,比如 browserleaks.com,会被当成国内网站直连,泄漏检测会显示你的真实运营商。 所以先用geolocation-!cn和category-ip-geo-detect(检测类网站)把境外网站钉死走代理,再判断国内。nameserver-policy按书写顺序匹配,顺序不能反。
看 DNS 服务器那一栏: