简化Mosdns基本功能使用的辅助脚本,仅需几分钟即可搭建一台支持ECS的无污染DNS服务器
基于Mosdns的精准DNS分流策略,仅需几分钟即可搭建一台支持ECS的无污染DNS服务器。
Mosdns 是一个插件化的DNS转发/分流器。用户可以按需拼接插件,搭建适合自己的DNS服务器。
配置灵活的优点可以满足各种场景下的DNS使用,相对也会有较高的使用门槛,无法开箱即用。
EasyMosdns 是基于Mosdns制作的EDNS部署方案,内置中国大陆地区优化规则与分流API,满足DNS日常使用场景。
打赏项目的用户可参与测试支持DoT与DoH(http2/3)且更精准的分流API 前往发电
查看搭建教程/测试DNS效果 请前往 https://apad.pro/easymosdns/
addr:
使用的端口号
- 案例操作系统为Almalinux,仅供参考,不同Linux发行版本命令可能略有差异
- 脚本工作目录为 /etc/mosdns 不建议更改,如需更改请自行修改源码
- 如 mosdns 二进制文件未在 /usr/local/bin 或 /usr/bin 目录下,应在二进制文件所在目录下执行命令
- 脚本默认启动 UDP/TCP 53端口运行mosdns,如需更改端口,请修改config配置文件结尾处的
protocol:
mosdns service stop
mosdns service uninstall
如果Mosdns的工作目录为 /etc/mosdns 无需卸载服务 安装完成后使用 mosdns service restart 命令重启mosdns服务即可
wget https://mirror.apad.pro/dns/easymosdns.tar.gz
tar xzf easymosdns.tar.gz
mv /etc/mosdns /etc/mosdns.old
mv easymosdns /etc/mosdns
mosdns service install -d /etc/mosdns -c config.yaml
mosdns service start
看到 service is running 证明部署成功
启动参数示例:
/usr/local/bin/mosdns start --as-service -d /etc/mosdns -c config.yaml
部署完成后,请开启防火墙的端口 默认情况下,应开启 UDP53 TCP53 TCP80 TCP443 TCP853 端口
请添加规则至 /etc/mosdns/hosts.txt
格式与常规hosts规则不同,域名在前、IP在后,支持一行多个IP,支持IPv6 hosts规则示例:
dns.google 8.8.8.8 8.8.4.4 2001:4860:4860::8888
请添加域名至 /etc/mosdns/ecs_cn_domain.txt
域名规则有多个匹配方式: 以 domain: 开头,域匹配。e.g: domain:google.com 会匹配自身
google.com
,以及其子域名www.google.com
,maps.l.google.com
等 以 full: 开头,完整匹配。e.g: full:google.com 只会匹配自身 以 keyword: 开头,关键字匹配。e.g: keyword:google.com 会匹配包含这个字段的域名,如google.com.hk
,www.google.com.hk
以 regexp: 开头,正则匹配(Golang 标准)。e.g: regexp:.+.google.com$
请添加域名至 /etc/mosdns/ecs_noncn_domain.txt
域名规则匹配方式同上 部分在中国大陆没有CDN节点的域名,会向中国大陆的访问者分配距离较远的CDN节点 将域名添加至该名单后,当域名有距离中国较近的CDN节点时会自动分配,优化访问速度,例如 github.com
/etc/mosdns/rules/update
/etc/mosdns/rules/update-cdn
使用 crontab -e 命令在最后一行添加对应规则即可
每日5点整通过CDN下载更新规则的示例
0 5 * * * /etc/mosdns/rules/update-cdn
- tag: forward_local
type: fast_forward
args:
upstream:
- addr: "223.5.5.5"
- addr: "tls://120.53.53.53:853"
enable_pipeline: true
修改
addr:
后的DNS地址即可 如果不确定上游DNS是否支持pipeline,请将enable_pipeline:
设置为false 默认使用AliDNS+DNSPod同时查询的方式解析 运营商DNS不支持ECS,仅建议网络环境为内网时使用
- tag: forward_remote
type: fast_forward
args:
upstream:
- addr: "tcp://208.67.220.220:5353"
enable_pipeline: true
#socks5: "127.0.0.1:1080"
- addr: "tls://8.8.4.4"
enable_pipeline: true
#socks5: "127.0.0.1:1080"
修改
addr:
后的DNS地址即可 如果不确定上游DNS是否支持pipeline,请将enable_pipeline:
设置为false 默认使用GoogleDNS+OpenDNS同时查询的方式解析,如遇到连接问题建议配置socks5代理 OpenDNS不支持指定ECS,如需配置指定ECS,应开启OpenDNS的socks5代理
- tag: forward_easymosdns
type: fast_forward
args:
upstream:
- addr: "https://doh.apad.pro/dns-query"
bootstrap: "119.29.29.29"
#dial_addr: "ip:port"
#enable_http3: true
修改
addr:
后的DNS地址即可 可以使用dial_addr:
指定分流服务器的IP与端口,优化访问速度 如果确定分流服务器支持http3,可开启enable_http3:
优化访问速度 默认使用EasyMosdns项目官方的分流API,如需切换应确定所选的API或DNS服务支持分流功能
- tag: cache_lan
type: cache
args:
size: 8192
#redis: "redis://127.0.0.1:6379/0"
lazy_cache_ttl: 86400
cache_everything: true
lazy_cache_reply_ttl: 1
- tag: cache_wan
type: cache
args:
size: 131072
compress_resp: true
#redis: "redis://127.0.0.1:6379/0"
lazy_cache_ttl: 86400
cache_everything: true
lazy_cache_reply_ttl: 5
将两处
#redis: "redis://127.0.0.1:6379/0"
更改为redis: "redis://127.0.0.1:6379/0"
需部署Redis服务,默认连接本机6379端口
- tag: ecs_global
type: ecs
args:
auto: false
ipv4: "168.95.1.0"
ipv6: "2001:b000:168::"
force_overwrite: false
修改
ipv4:
与ipv6:
后的IP段即可 默认ECS参数已针对中国大陆地区优化,根据网络环境自动判断开关 如果将ECS设置为本地公网IP段,将关闭指定ECS功能 当代理客户端使用本地DNS解析时,应将ECS指定为距离代理IP出口最近的IP段,以获取最佳的访问速度
- if: query_is_ad_domain
exec:
- black_hole
- ttl_1h
- _return
将
black_hole
更改为forward_local
- _prefer_ipv4
将三处
- _prefer_ipv4
更改为#- _prefer_ipv4
修改 /etc/mosdns/config.yaml 配置文件 去除以下注释
- protocol: http
addr: "127.0.0.1:9053"
url_path: "/dns-query"
get_user_ip_from_header: "X-Forwarded-For"
建议使用http模式,前端使用nginx反代
nginx配置示例:
server { ... location /dns-query { set_real_ip_from 0.0.0.0/0; real_ip_header X-Forwarded-For; proxy_pass http://127.0.0.1:9053/dns-query; } }
修改 /etc/mosdns/config.yaml 配置文件 去除以下注释,指定SSL证书位置
- protocol: tls
addr: "0.0.0.0:853"
cert: "/etc/mosdns/yourdomain.cert"
key: "/etc/mosdns/yourdomain.key"
示例:
- protocol: udp
addr: "0.0.0.0:8053"
- protocol: tcp
addr: "0.0.0.0:8053"
For feedback, questions, and to follow the progress of the project: Telegram Group