创建于 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 的文章
使用较新的 DOH 和 DOT 协议,可以绕过 GFW 对传统 UDP+IP 的 DNS 污染
然后在去年的某个时间段, 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 配置
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"修改系统 DNS 为 127.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 监听
- 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 都快了许多 😭