Skip to Content
DNS分流

创建于 2025-02-06
更新于 2025-09-10 清理部分无效配置
更新于 2025-10-27 清理部分配置

分流软件: https://github.com/IrineSistiana/mosdns/ 
原始配置: https://github.com/Mrican/mosdns-config/blob/main/config.yaml 
分流规则: https://github.com/Loyalsoldier/v2ray-rules-dat 
国内 IP 库: https://github.com/pmkol/easymosdns/tree/rules 

前情提要

某天看文章的时候突然发现一篇关于 DNS 分流绕过 GFW 的文章
使用较新的 DOHDOT 协议,可以绕过 GFW 对传统 UDP+IPDNS 污染

然后在去年的某个时间段, GFW 突然对 DOH 的域名进行大批量拦截
所以查了各家 DNS 的文档,使用 DOT+备用 IP 的形式, 减少一层域名解析过程, 测试之后发现 GFW 仅对主 IP 进行了屏蔽, 如谷歌的 8.8.8.8, CF 的 1.1.1.1, 但是备用 IP 仍可解析

关于 DOH 及 DOT 可以查看
https://en.wikipedia.org/wiki/DNS_over_HTTPS 
https://en.wikipedia.org/wiki/DNS_over_TLS 

走的路子不同, 一个是走 https 协议进行 dns 请求, 一个只通过 tls 协议, DOT 的优势是少了一层包, 速度会更快, DOH 可以实现更多的功能

分流的规则使用 v2ray 的规则库, 优点是用户量大, 更新的精度较高
主要的逻辑就是在经过国内域名/IP 库过滤后, 全部的 DNS 请求丢给国外 DNS 进行解析, 返回的 IP 如果是国内 IP 丢给国内 DNS 重新解析
然后在此防泄露基础上进行 ECS 优化, 让国外 DNS 如果有 CDN 的情况下返回香港附近的 IP 以提高访问速度

只能访问被 DNS污染 的域名

MosDNS 配置

config.yaml
log: level: error file: ./mosdns.log #--------------------------------------------------------------配置 plugins: #rule 来自Loyalsoldier/v2ray-rules-dat及pmkol/easymosdns - tag: cache #DNS缓存 type: cache args: size: 2048 - tag: direct-list type: domain_set args: files: ./rules/direct-list.txt - tag: proxy-list type: domain_set args: files: ./rules/proxy-list.txt - tag: reject-list type: domain_set args: files: ./rules/reject-list.txt - tag: white-list type: domain_set args: files: ./rules/white-list.txt - tag: black-list type: domain_set args: files: ./rules/black-list.txt - tag: gfw type: domain_set args: files: ./rules/gfw.txt - tag: china_ip_list type: ip_set args: files: ./rules/china_ip_list.txt - tag: ecs_hk #开启ecs让dns返回就近ip type: ecs_handler args: forward: false # 是否转发来自下游的 ecs preset: 47.75.18.13 # 发送预设 ecs,用的阿里云香港测试ip send: true # 是否发送 ecs mask4: 24 # ipv4 掩码。默认 24 mask6: 48 # ipv6 掩码。默认 48 #--------------------------------------------------------------DNS服务器 - tag: forward_local #国内dns type: forward args: concurrent: 1 #并发数,1的的话是随机选取,2个是两个dns都请求一次,返回最快的 upstreams: - tag: tencent addr: "tls://dot.pub" enable_pipeline: true bootstrap: 119.29.29.29 - tag: aliyun addr: "tls://223.6.6.6" enable_pipeline: true - tag: forward_remote # 国外dns type: forward args: concurrent: 2 upstreams: - tag: cloudflare addr: "tls://1.1.1.1" enable_pipeline: true # 已被屏蔽 # - tag: google # addr: "tls://8.8.4.4" # enable_pipeline: true #--------------------------------------------------------------解析逻辑 - tag: local_sequence #国内dns解析规则 type: sequence args: - exec: $forward_local #走国内dns - tag: remote_sequence type: sequence args: - exec: prefer_ipv4 - exec: $ecs_hk - exec: $forward_remote - tag: RMFirst_sequence #国外优先 type: sequence args: - exec: $remote_sequence - matches: "resp_ip $china_ip_list" #匹配到国内ip丢给国内重新解析 exec: $local_sequence - tag: main_sequence type: sequence args: - exec: $cache - matches: qname $reject-list $black-list #屏蔽广告域名和黑名单域名 exec: reject 3 - matches: qname $direct-list $white-list #国内域名和白名单走local exec: $local_sequence - matches: qname $proxy-list $gfw # 国外域名及被gfw的域名,走远程 exec: $remote_sequence - exec: $RMFirst_sequence #--------------------------------------------------------------本地端口 - tag: udp_server type: udp_server args: entry: main_sequence listen: "127.0.0.1:53" - tag: udp_serverv6 type: udp_server args: entry: main_sequence listen: "[::1]:53"

修改系统 DNS127.0.0.1 即可

  • ECH 配置 (可选项)

可绕过 GFW 的 SNI 污染, 但未被大量应用, 只有 CloudFlare 下的域名及少量域名支持

生成自签证书

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout ./key.key -out ./cert.crt -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"

将自签证书添加到系统根证书内

文件尾添加 DOH 监听

config.yaml
- tag: "http_server" type: "http_server" args: entries: # []extry - path: /dns-query # 本路径执行 exec: main_sequence # 可执行插件的 tag。 listen: 127.0.0.1:443 # 监听地址。 cert: "./mosdns.crt" # 留空 cert 和 key 后会禁用 TLS。 key: "./mosdns.key" idle_timeout: 10 # 空连接超时。单位秒。默认 30。

修改浏览器 DNS 设置为 https://127.0.0.1:443/dns-query

可使用
https://crypto.cloudflare.com/cdn-cgi/trace 
https://tls-ech.dev/ 
验证

更新规则

curl https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/direct-list.txt -o direct-list.txt curl https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/proxy-list.txt -o proxy-list.txt curl https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/reject-list.txt -o reject-list.txt curl https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/gfw.txt -o gfw.txt curl https://cdn.jsdelivr.net/gh/pmkol/easymosdns@rules/china_ip_list.txt -o china_ip_list.txt curl https://cdn.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/win-spy.txt -o windows-spy.txt

访问 GitHub 都快了许多 😭