一、前提说明
本文紧密结合之前关于 Redmi AX6000 路由器的内容,旨在实现一个关键目标:通过国内外DNS分流优化,解决DNS污染问题。我们采用了 mosdns 进行实际操作并进行了详细测试。经过一段时间的实际应用,我们发现这一方法在性能表现上表现不俗,符合预期效果
提示:请参考上面的文章解锁SSH,不然下面的操作无法进行。
二、mosdns介绍
mosdns 是一个插件化的 DNS 转发器。用户可以按需定制自己的 DNS 处理逻辑。
mosdns 自带的功能:
- 匹配器:
- 匹配请求的特性。域名,类型,来源 IP 等。
- 匹配应答的特性。应答 IP,CNAME 等。
- 功能:
- 启动 UDP, TCP, DoT, DoH 服务器。
- 转发请求至上游服务器。支持 UDP, TCP, DoT, DoH 。
- 缓存
原文链接:https://www.dqzboy.com 应答。 - 自动判断域名是否是双栈域名然后屏蔽 IPv4/6 请求,不会影响纯 IPv6/4 域名。
- 在请求上附加预设 ECS。
- 修改应答的 TTL。
- 为域名设定 IP。(hosts)
- 返回包含特定 IP 应答。(blackhole)
- 替换(重定向)请求的域名。请求域名 A,但返回域名 B 的记录。(redirect)
- 手动构建包含任意记录的应答。(arbitrary)
- 用 IP 反查经过 mosdns 处理的域名。可响应 PTR 请求,也可通过 HTTP 接口查询。(reverse_lookup)
- 动态路由: 将应答 IP 写入
ipset
和nftables
。
三、mosdns安装
2.1:下载安装文件
- 首先下载 mosdns 压缩包,在电脑上解压并压缩,然后通过winscp或者scp传到路由器
2.2:压缩执行文件
- 我们这里通过UPX对执行文件进行压缩
- 项目地址:https://gith
文章来源(Source):浅时光博客 ub.com/upx/upx/releases/tag/v4.0.2
.\upx --best C:\Users\dqzboy\Desktop\mosdns
2.3:安装配置mosdns
2.3.
- 将上面压缩后的mosdns执行文件上传到路由器,或者不知道如何上传,也可以把执行文件上传到第三方的存储中,然后在路由器上通过 wget 方式下载下来
mkdir -p /data/mosdns
cd /data/mosdns
2.3.2:添加规则配置
实现按域名分流,直连的使用阿里、腾讯DNS,并且开启乐观缓存,匹配到GFW的转发到clash并且不缓存,由clash管理fake-ip持久化;使用广告域名列表实现去广告;fallback的可以根据解析出来的IP决定是直连还是转发给clash。直连的那些域名,用阿里、腾讯的IPV4解析,fallbackr的由阿里腾讯的doh解析。clash只管代理GFW
vim config.yaml
# 日志
log:
level: info
# 缓存
plugins:
- tag: lazy_cache
type: cache
args:
size: 20000
lazy_cache_ttl: 172800
dump_file: ./cache.dump
dump_interval: 300
# 直连域名使用的DNS服务器
- tag: local
type: forward
args:
concurrent: 2
upstreams:
- addr: 223.5.5.5
- addr: 119.29.29.29
# fallback的由doh类型DNS服务器解析
- tag: local_fallback
type: forward
args:
concurrent: 2
upstreams:
- tag: ali_doh
addr: "https://dns.alidns.com/dns-query"
bootstrap: "223.5.5.5"
enable_pipeline: true
max_conns: 10
- tag: tencent_doh
addr: "https://doh.pub/dns-query"
bootstrap: "119.29.29.29"
enable_pipeline: true
max_conns: 10
# 转发至clash;这里我的clash启用DNS,监听端口设置为1053
# https://lancellc.gitbook.io/clash/clash-config-file/dns
- tag: clash
type: forward
args:
upstreams:
- addr: :1053
# 直连域名列表清单
- tag: direct_domains
type: domain_set
args:
files: ./direct-list.txt
# gfw 域名列表清单
- tag: gfw_domains
type: domain_set
args:
files: ./gfw.txt
# 广告域名列表清单
- tag: ad_domains
type: domain_set
args:
files: ./reject-list.txt
# CN-IP
# direct domains
- tag: cn_ip
type: ip_set
args:
files: ./china_ip_list.txt
# 直连域名序列,使用阿里、腾讯,并使用乐观缓存
- tag: direct
type: sequence
args:
- exec: $lazy_cache
- matches: has_resp
exec: accept
- exec: $local
- matches: has_resp
exec: accept
# gfw域名序列,交由clash解析代理
- tag: gfw
type: sequence
args:
- exec: $clash
- exec: ttl 0
- matches: has_resp
exec: accept
# fallback primary
- tag: fallback
type: sequence
args:
- exec: $lazy_cache
- matches: has_resp
exec: accept
- exec: $local_fallback
- matches: "!resp_ip $cn_ip"
exec: goto gfw
- exec: accept
# 主运行序列
- tag: main_sequence
type: sequence
args:
# 去广告
- matches:
- qname $ad_domains
exec: reject
# 命中direct.txt的域名本地解析
- matches:
- qname $direct_domains
exec: jump direct
# 命中gfw.txt的域名直接转发到clash dns
- matches:
- qname $gfw_domains
exec: jump gfw
# 其他的fallback
- exec: $fallback
# 启动监听服务
- tag: udp_server
type: udp_server
args:
entry: main_sequence
listen: :5353
- tag: tcp_server
type: tcp_server
args:
entry: main_sequence
listen: :5353
- 上面配置中注意的点和所需文件下载地址:
- 1、上面mosdns监听端口为 5353,所以你需要确保 DNS 流量被重定向到端口 5353
- 2、域名和ip均来自:https://github.com/Loyalsoldier/v2ray-rules-dat
- 3、china_ip来自:https://github.com/Loyalsoldier/geoip/blob/release/text/cn.txt
2.4:执行安装程序
cd /data/mosdns/
# 添加执行权限
chmod +x mosdns
# 执行安装,安装完成则自动启动
/data/mosdns/mosdns start -c /data/mosdns/config.yaml -d /data/mosdns > /dev/null 2>&1 &
# 检查服务进程和监听端口
ss -tunlp|grep 5353
# 检查程序进程
ps -wl|grep mosdns
2.5:配置端口转发
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
# 使用下面的命令检查规则是否存在
iptables -t nat -v --list 和 ip6tables -t nat -v --list
四、验证分流效果
通过本机去ping国内外域名,预期实现的效果是,国内直接解析出真实的IPV4地址,而国外域名则是fake-ip,也就是假IP地址

必须 注册 为本站用户, 登录 后才可以发表评论!