🚀使用mosdns替代openclash默认的dns分流
前言
自己的软路由R4S的代理工具从passwall替换到openclash
之后, 定制性更好了, 但是我发现openclash
它自己的DNS分流有时候可能会出现DNS污染的问题, 不知道是不是因为我配置的原因
然后我们其实可以使用其他的DNS转发工具来替代openclash
的DNS转发功能, 比如smartdns
和mosdns
, 个人认为smartdns
还是有点小小复杂, 所以选择了比较简单和上手容易的mosdns
下载和安装
IPK核心包
去这里下载打包好的二进制文件(我的是ARM架构), 搜索找到对应的ipk文件, 比如我现在的文件是mosdns_3.7.2-1_aarch64_generic.ipk
, 如果你是其他架构可以返回到这里找到对应你的软路由的架构, 比如x86_64或者arm_cortex-a9
下载
$ wget https://openwrt.cc/snapshots/packages/aarch64_generic/packages/mosdns_3.7.2-1_aarch64_generic.ipk
安装
$ opkg install mosdns_3.7.2-1_aarch64_generic.ipk
安装mosdns的luci支持
去这里下载luci对应的包, 然后使用命令安装
首先下载
wget https://github.com/QiuSimons/openwrt-mos/releases/download/1.2.1/luci-app-mosdns_1.2_all.ipk
安装luci包
$ opkg install luci-app-mosdns_1.2_all.ipk
安装语言文件, 下载和上一步同理
$ opkg install luci-i18n-mosdns-zh-cn_unknown_all.ipk
安装指南
-
提示
mosdns
依赖不存在问题, 说明没有安装核心文件, 回到上一步安装好mosdns
核心就可以了 -
提示
v2ray-geoip
和v2ray-geosite
依赖问题, 是因为luci-mosdns
依赖这两个包, 可以去这里搜索这两个包进行安装 -
提示
v2ray-core
不存在的问题, 说明你的固件还没有v2ray-core
依赖, 直接在依赖仓库搜索v2ray-core
核心安装即可 -
提示
Package luci-app-mosdns wants to install file /etc/init.d/mosdns But that file is already provided by package
说明核心已经把这个启动文件安装好了, 我们删除它, 然后重新安装luci-app-mosdns_1.2_all.ipk
和luci-i18n-mosdns-zh-cn_unknown_all.ipk
, 安装好了之后检查/etc/init.d/mosdns
文件是否存在, 不存在的话, 去openwrt-mos拷贝一下对应的文件放回原位, 使用chmod +x mosdns
增加执行权限
配置
安装好luci包之后, 可以直接在路由器web
界面进行控制和配置, 我们直接使用自定义
配置
在下边的自定义配置粘贴配置, 记得别忘了更新mosdns
的数据, 会下载相关的geoip.dat
和geosite.dat
文件等, 如果更新失败可以去这里下载对应的文件
如果需要cn.dat
文件可以到这里下载
下载回来的两个文件放入到/etc/mosdns
目录下, 你也可以使用我提供的文件
log:
level: warn
file: "/tmp/mosdns.log"
plugin:
- tag: main_server
type: server
args:
entry:
- main_sequence
server:
- protocol: udp
addr: "[::1]:5335"
- protocol: tcp
addr: "[::1]:5335"
- protocol: udp
addr: "127.0.0.1:5335"
- protocol: tcp
addr: "127.0.0.1:5335"
- tag: main_sequence
type: sequence
args:
exec:
# ad block
# - if:
# - query_is_ad_domain
# exec:
# - _block_with_nxdomain
# - _return
- mem_cache
- if:
- query_is_local_domain
- "!_query_is_common"
exec:
- forward_local
- _return
- if:
- query_is_non_local_domain
exec:
- _prefer_ipv4
- forward_remote
- _return
- primary:
- forward_local
- if:
- "!response_has_local_ip"
exec:
- _drop_response
secondary:
- _prefer_ipv4
- forward_remote
fast_fallback: 600
always_standby: true
- tag: mem_cache
type: cache
args:
size: 1024
# use redis as the backend cache
# redis: 'redis://localhost:6379/0'
# redis_timeout: 50
lazy_cache_ttl: 86400
lazy_cache_reply_ttl: 30
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: "udp://114.114.114.114"
- addr: "udp://223.5.5.5"
- addr: "https://dns.alidns.com/dns-query"
idle_timeout: 30
trusted: true
- addr: "https://doh.pub/dns-query"
idle_timeout: 30
trusted: true
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: "udp://8.8.8.8"
- addr: "https://dns.google/dns-query"
dial_addr: "8.8.8.8:443"
idle_timeout: 30
trusted: true
- addr: "https://cloudflare-dns.com/dns-query"
dial_addr: "1.1.1.1:443"
idle_timeout: 30
trusted: true
- tag: query_is_local_domain
type: query_matcher
args:
domain:
- "ext:./geosite.dat:cn"
- "ext:./geosite.dat:apple-cn"
- "ext:./geosite.dat:steam@cn"
- tag: query_is_non_local_domain
type: query_matcher
args:
domain:
- "ext:./geosite.dat:geolocation-!cn"
- tag: query_is_ad_domain
type: query_matcher
args:
domain:
- "ext:./geosite.dat:category-ads-all"
- tag: response_has_local_ip
type: response_matcher
args:
ip:
# 使用默认geoip.dat文件
# - "ext:./geoip.dat:cn"
# 使用高性能cn.dat文件, 需要下载对应的文件
- "ext:./cn.dat:cn"
然后点击右下角的保存并应用, mosdns
会reload并重启, 如果提示正在运行, 表明运行成功, 你也可以使用命令进行手动操作
$ /etc/init.d/mosdns enable
$ /etc/init.d/mosdns reload
$ /etc/init.d/mosdns restart
检查是否启动成功, 如果有端口监听说明mosdns
已经在正常工作了
$ netstat -a | grep 5335
tcp 0 0 localhost:5335 0.0.0.0:* LISTEN
tcp 0 0 localhost:5335 :::* LISTEN
udp 0 0 localhost:5335 0.0.0.0:*
udp 0 0 localhost:5335 :::*
配置说明请参看官方的wiki文档
配合openclash
找到openclash
的全局设置页面, 找到DNS设置选项, 增加两个DNS服务器, 分别是NameServer和FallBack, 都得填mosdns
的地址, 既本地地址127.0.0.1
和对应监听的端口5335
, 协议是UDP
并✅上这两个DNS服务器
openclash
DNS其他部分这么设置
保存并应用配置, 等待openclash
重启, 就可以使用mosdns
分流啦
小提示
-
注意,
mosdns
本身是支持IPv6的, 现在这里的配置不支持IPv6, 所以需要把openwrt
的相关的IPv6设置都关掉, openclash禁止代理IPv6和禁止允许IPv6类型DNS解析. IPv6相关如果你有更好的配置和建议, 欢迎留言 -
如果打不开对应的网站, 检查一下本地的DNS, 使用命令刷新DNS或者重启电脑试试
-
mosdns
除了当做openclash
的上级,mosdns
也可以直接跳过openclash
当做dnsmasq
的上级 -
使用
mosdns
, 建议关闭浏览器的安全DNS(DoH DNS), 如果需要使用的话, 就把安全DNS设置成google或者cloudflare的
Credits
更新日志
-
删除hosts映射, 配置不兼容新版本 2022/06/10
-
替换geoip文件 2022/05/04
-
简化配置文件 2022/04/25