docker安装mosdns进行分流

2 min read
1. 创建配置目录结构
复制
# 创建配置目录
sudo mkdir -p /etc/mosdns
cd /etc/mosdns
# 创建规则文件目录
sudo mkdir -p rules
2. 下载规则文件
复制
mkdir -p /etc/mosdns/rule
cd /etc/mosdns/rule
# 下载国内域名列表
wget -O geosite_cn.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/cn.txt"
# 下载国外域名列表
wget -O geosite_foreign.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/geolocation-!cn.txt"
# 设置权限
chmod 644 *.txt
3. 创建主配置文件
创建 /etc/mosdns/config.yaml
:
复制
log:
level: info
file: ""
plugins:
# 缓存插件
- tag: cache
type: cache
args:
size: 10240
lazy_cache_ttl: 86400
# 国内域名列表
- tag: geosite_cn
type: domain_set
args:
files:
- "/etc/mosdns/rules/geosite_cn.txt"
# 国外域名列表
- tag: geosite_foreign
type: domain_set
args:
files:
- "/etc/mosdns/rules/geosite_foreign.txt"
# 国内 DNS 转发器(用于国内域名)
- tag: forward_local
type: forward
args:
concurrent: 2
upstreams:
- addr: "223.5.5.5:53"
- addr: "119.29.29.29:53"
- addr: "180.76.76.76:53"
# 国外 DNS 转发器(用于国外域名)
- tag: forward_remote
type: forward
args:
concurrent: 2
upstreams:
- addr: "8.8.8.8:53"
- addr: "1.1.1.1:53"
- addr: "208.67.222.222:53"
# 主要分流序列
- tag: main_sequence
type: sequence
args:
# 先查缓存
- exec: $cache
# 国内域名走国内 DNS
- matches:
- qname $geosite_cn
exec: $forward_local
# 国外域名走国外 DNS
- matches:
- qname $geosite_foreign
exec: $forward_remote
# 默认情况走国外 DNS(适合海外用户)
- exec: $forward_remote
# UDP 服务器
- tag: udp_server
type: udp_server
args:
entry: main_sequence
listen: ":53"
# TCP 服务器
- tag: tcp_server
type: tcp_server
args:
entry: main_sequence
listen: ":53"
4.启动MosDNS容器
docker run -d \
--name mosdns \
-p 5454:53/udp \
-p 5454:53/tcp \
-v /etc/mosdns:/etc/mosdns \
irinesistiana/mosdns:latest
5. 配置AdGuard Home
在AdGuard Home的管理界面中:
进入 设置 → DNS设置
在 上游DNS服务器 中添加:
复制
127.0.0.1:5454
或者如果AdGuard Home和MosDNS在不同主机:
复制
MosDNS主机IP:5454
清空其他上游DNS服务器
点击 保存配置
6. 测试配置
复制
# 测试中国域名(应该返回国内IP)
nslookup baidu.com 127.0.0.1 -port=5454
# 测试国外域名(应该返回国外IP)
nslookup google.com 127.0.0.1 -port=5454
# 查看MosDNS日志
docker logs mosdns
7. 自动更新规则脚本
创建 /etc/mosdns/update_
rules.sh
:
复制
#!/bin/bash
cd /etc/mosdns/rules || exit 1
# 备份旧文件
cp geosite_cn.txt geosite_cn.txt.bak 2>/dev/null
cp geosite_foreign.txt geosite_foreign.txt.bak 2>/dev/null
# 下载新规则
wget -O geosite_cn.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/cn.txt"
wget -O geosite_foreign.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/geolocation-!cn.txt"
# 重启 MosDNS
docker restart mosdns
echo "geosite规则已更新:$(date)"
复制
# 设置执行权限
chmod +x /etc/mosdns/update_rules.sh
# 设置定时任务(每周更新)
echo "0 4 * * 0 /etc/mosdns/update_rules.sh" | sudo crontab -
这样配置后,MosDNS会自动将中国大陆的域名和IP走国内DNS解析,其他的走国外DNS,实现智能分流。
0
Subscribe to my newsletter
Read articles from kimlopez directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
