--- title: 搭载 mihomo 内核配置 DNS 不泄露教程-ruleset 方案 description: 此教程搭载 mihomo 内核并使用其特性防止 DNS 泄露,即针对未知域名走国外 DNS 解析 date: 2024-08-21 07:52:58 +0800 categories: [DNS 配置, DNS 防泄漏] tags: [Clash, mihomo, 进阶, DNS, DNS 泄露] --- > 说明 {: .prompt-tip } 1. 此方案彻底防止了 DNS 泄露(未知域名在匹配 `RULE-SET:cnip` 规则时会由国外 DNS 解析且配置 `ecs`,解析出 IP 在国内则走 `国内 IP` 规则,否则走 `漏网之鱼` 规则),兼容性高,可放心使用 2. 本教程以 [ShellCrash](https://github.com/juewuy/ShellCrash) 为例,其它客户端亦可参考 3. 本教程搭载 [mihomo 内核 Meta 版](https://github.com/MetaCubeX/mihomo/tree/Meta)(导入内核方法可参考《[ShellCrash 和 AdGuard Home 快速安装教程/导入 mihomo 内核 或 sing-box 内核](https://proxy-tutorials.dustinwin.cc.cd/posts/pin-toolsinstall/#%E4%BA%8C-%E5%AF%BC%E5%85%A5-mihomo-%E5%86%85%E6%A0%B8-%E6%88%96-sing-box-%E5%86%85%E6%A0%B8)》) 4. 可进入 测试 DNS 是否泄露,“DNS Addresses” 栏目下没有中国国旗(因 `ipleak.net` 属未知域名,默认走 `漏网之鱼` 规则),即代表 DNS 没有发生泄露 ## 一、 导入规则集合文件 `rule-providers` 须添加 `fakeip-filter`、`cn` 和 `proxy`,如下: ```yaml rule-providers: fakeip-filter: type: http behavior: domain format: mrs path: ./ruleset/fakeip-filter.mrs url: "https://github.com/DustinWin/ruleset_geodata/releases/download/mihomo-ruleset/fakeip-filter.mrs" interval: 86400 cn: type: http behavior: domain format: mrs path: ./ruleset/cn.mrs url: "https://github.com/DustinWin/ruleset_geodata/releases/download/mihomo-ruleset/cn.mrs" interval: 86400 proxy: type: http behavior: domain format: mrs path: ./ruleset/proxy.mrs url: "https://github.com/DustinWin/ruleset_geodata/releases/download/mihomo-ruleset/proxy.mrs" interval: 86400 ``` ## 二、 ShellCrash 防泄漏配置 进入 ShellCrash 配置脚本 → 2) 功能设置 → 2) DNS 设置 → 9) 修改 DNS 服务器,将“DIRECT-DNS”、“PROXY-DNS”和“DEFAULT-DNS”都设置为 `null` ShellCrash 设置 ## 三、 DNS 防泄漏配置 ### 1. DNS 模式为 `mix`(推荐) 连接 SSH 后执行 `vi $CRASHDIR/yamls/user.yaml`,按一下 Ins 键(Insert 键),粘贴如下内容: >推荐将 `ecs` 设置为当前宽带运营商分配的默认 DNS(可进入光猫或路由器拨号页面查看,或者前往[公共 DNS 大全](https://toolb.cn/publicdns)查询)的 IP 段,如默认 DNS 为 `211.137.58.20`,可设置为 `211.137.58.0/24` {: .prompt-info } ```yaml hosts: dns.alidns.com: [223.5.5.5, 223.6.6.6, 2400:3200::1, 2400:3200:baba::1] doh.pub: [1.12.12.12, 120.53.53.53] dns.google: [8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844] dns11.quad9.net: [9.9.9.11, 149.112.112.11, 2620:fe::11, 2620:fe::fe:11] dns: enable: true ipv6: true listen: 0.0.0.0:1053 enhanced-mode: fake-ip fake-ip-range: 28.0.0.0/8 fake-ip-range6: fc00::/16 fake-ip-filter-mode: rule fake-ip-filter: - RULE-SET,fakeip-filter,real-ip - RULE-SET,proxy,fake-ip - RULE-SET,cn,real-ip - MATCH,fake-ip respect-rules: true nameserver: # 推荐将 `ecs` 设置为当前宽带运营商分配的默认 DNS 的 IP 段 - 'https://dns.google/dns-query#ecs=211.137.58.0/24&ecs-override=true' - 'quic://dns11.quad9.net:853#ecs=211.137.58.0/24&ecs-override=true' proxy-server-nameserver: - quic://dns.alidns.com:853 - https://dns.pub/dns-query direct-nameserver: - quic://dns.alidns.com:853 - https://dns.pub/dns-query direct-nameserver-follow-policy: true nameserver-policy: 'rule-set:fakeip-filter,cn': - quic://dns.alidns.com:853 - https://dns.pub/dns-query ``` 按一下 Esc 键(退出键),输入英文冒号 `:`,继续输入 `wq` 并回车 ### 2. DNS 模式为 `fake-ip`(不推荐) - ① 额外编辑配置文件 在《[生成带有自定义策略组和规则的 mihomo 配置文件直链-ruleset 方案/添加模板](https://proxy-tutorials.dustinwin.cc.cd/posts/link-mihomo-ruleset/#%E4%BA%8C-%E6%B7%BB%E5%8A%A0%E6%A8%A1%E6%9D%BF)》编辑 .yaml 配置文件时,将 `rules` 里所有 IP 相关的规则末尾加上 `no-resolve`,即修改为: ```yaml - RULE-SET,telegramip,📲 电报消息,no-resolve - RULE-SET,privateip,🔒 私有网络,no-resolve - RULE-SET,cnip,🀄️ 国内 IP,no-resolve ``` - ② 连接 SSH 后执行 `vi $CRASHDIR/yamls/user.yaml`,按一下 Ins 键(Insert 键),粘贴如下内容: ```yaml hosts: dns.alidns.com: [223.5.5.5, 223.6.6.6, 2400:3200::1, 2400:3200:baba::1] doh.pub: [1.12.12.12, 120.53.53.53] dns: enable: true prefer-h3: true ipv6: true listen: 0.0.0.0:1053 enhanced-mode: fake-ip fake-ip-range: 28.0.0.0/8 fake-ip-range6: fc00::/16 fake-ip-filter: [rule-set:fakeip-filter] nameserver: - quic://dns.alidns.com:853 - https://dns.pub/dns-query ``` 按一下 Esc 键(退出键),输入英文冒号 `:`,继续输入 `wq` 并回车 ### 3. DNS 模式为 `redir-host` 连接 SSH 后执行 `vi $CRASHDIR/yamls/user.yaml`,按一下 Ins 键(Insert 键),粘贴如下内容: >推荐将 `ecs` 设置为当前宽带运营商分配的默认 DNS(可进入光猫或路由器拨号页面查看,或者前往[公共 DNS 大全](https://toolb.cn/publicdns)查询)的 IP 段,如默认 DNS 为 `211.137.58.20`,可设置为 `211.137.58.0/24` {: .prompt-info } ```yaml hosts: dns.alidns.com: [223.5.5.5, 223.6.6.6, 2400:3200::1, 2400:3200:baba::1] doh.pub: [1.12.12.12, 120.53.53.53] dns.google: [8.8.8.8, 8.8.4.4, 2001:4860:4860::8888, 2001:4860:4860::8844] dns11.quad9.net: [9.9.9.11, 149.112.112.11, 2620:fe::11, 2620:fe::fe:11] dns: enable: true ipv6: true listen: 0.0.0.0:1053 enhanced-mode: fake-ip fake-ip-range: 28.0.0.0/8 fake-ip-range6: fc00::/16 fake-ip-filter: ['+.*'] respect-rules: true nameserver: # 推荐将 `ecs` 设置为当前宽带运营商分配的默认 DNS 的 IP 段 - 'https://dns.google/dns-query#ecs=211.137.58.0/24&ecs-override=true' - 'quic://dns11.quad9.net:853#ecs=211.137.58.0/24&ecs-override=true' proxy-server-nameserver: - quic://dns.alidns.com:853 - https://dns.pub/dns-query direct-nameserver: - quic://dns.alidns.com:853 - https://dns.pub/dns-query direct-nameserver-follow-policy: true nameserver-policy: 'rule-set:cn': - quic://dns.alidns.com:853 - https://dns.pub/dns-query ``` 按一下 Esc 键(退出键),输入英文冒号 `:`,继续输入 `wq` 并回车