Sign inSign up

alickale/mosdns-adguard

By alickale

•Updated over 1 year ago

Image
7

2.9K

alickale/mosdns-adguard repository overview

  • 更新日志
    • 2025-06-25: 合并GEO规则和cloudflare-IPS更新规则,更新默认定时更新为:每周四凌晨5:00(这将是最后一个带AD面板的更新)。新的Mosdnsui⁠自带Mosdns的API缓存面板,支持管理黑白名单。
    • 2025-06-11: 优化更新GEO规则时的网络连接性测试(直连与代理逻辑),优先直连,不通则测试代理,都不通则中止更新。
    • 2025-04-05: 跳过“局域网” 域名(通常是 .home.arpa、.lan 等),避免外部DNS错误解析,提高解析效率和安全性
    • 2025-01-29: 更新steam@cn规则,切换为category-games@cn(包含了 steam、ea、blizzard、epicgames 和 nintendo 等常见的游戏厂商)
    • 2025-01-24: 新增lite分支,适用精简配置
    • 2025-01-16: 添加解析优先级ENV参数(prefer参数),可以自定义优先ipv4还是优先ipv6(默认prefer_ipv4)
    • 2025-01-07: 将ECS功能合并到latest
    • 2025-01-06: 新增ECS版本,可增加ECS选项
    • 2024-12-31: 修正上游广告规则匹配,添加网络连通性测试功能,避免定时更新规则破坏失效
    • 2024-12-28: 全面使用doh、dot权威服务器!cn解析改为fallback机制
    • 2024-12-20: 修复supervisorctl重启服务的错误
    • 2024-12-13: 更新Bootstrap DNS 服务器为腾讯、阿里
    • 2024-12-07: 修正Mikrotik container更新GEO规则时的变量获取规则
    • 2024-12-05: 改善逻辑,[使用supervisor优雅重载服务]
    • 2024-11-30: 添加/var/share映射目录!提供mikrotik更新cnip/cnipv6脚本!
    • 2024-11-10: 启用国外dns解析RFC 7766 新的 query pipelining 连接复用模式!
    • 2024-11-9: 调整mosdns解析规则,优化精简解析流程!
    • 2024-11-1: 添加cloudflare解析规则!
    • 2024-10-24: 添加arm架构、缩小日志保存时间,减小空间占用!
变量名称描述默认值可选值
NAME定义AD用户名(默认admin)admin任意用户名
PASSWORD定义AD密码(默认adminadmin)adminadmin任意密码
CRON_SCHEDULE定时更新GEO任务30 11 * * *cron 表达式
CN_ECS本地 ECS空自定义(不设置此ENV表示不启用)
Nocn_ECS代理(远程) ECS空自定义(不设置此ENV表示不启用)
LocalPREFER本地DNS解析优先级prefer_ipv4prefer_ipv4/prefer_ipv6/OFF
RemotePREFER远程DNS解析优先级prefer_ipv4prefer_ipv4/prefer_ipv6/OFF
SOCKS5SOCKS5 代理地址(用于远程解析、更新GEO),不支持账号、密码鉴权127.0.0.1:1080<proxy_address>:<port>
  • 关于lite版本的说明
    • lite的ENV参数: 精减了ENV参数!没有CN_ECS、Nocn_ECS、LocalPREFER、RemotePREFER等ENV参数。
    • lite版本的运行命令:
docker run -d \
  --restart=always \
  --network=host \
  --name=mosdns-adguard \
  -e NAME="root" \
  -e PASSWORD="\$2a\$12\$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi" \    //设置adguardhome的密码(linux系统的docker环镜,则此Bcrypt hash密码值的前三个$必须插入"\"!)
  -e SOCKS5="127.0.0.1:1080" \
  -e CRON_SCHEDULE="5 4 * * * " \
  alickale/mosdns-adguard:lite
  • 关于ECS的说明

    • ECS的ENV参数: 有两个ENV参数!1.CN_ECS(本地区域、宽带IP出口附近的IP,建议可以是宽带运营商的DNS IP) 2.Nocn_ECS(建议选择您的代理服务器附近的出口IP)
    • 建议: 如果您不太了解EDNS0 Client Subnet⁠的相关功能!可以不填这两个ENV参数。此时将不启用ecs功能
  • 关于prefer优先IPV4(IPV6)解析的说明

    • prefer的ENV参数: 有两个ENV参数!1.LocalPREFER(本地DNS解析优先级) 2.RemotePREFER(远程DNS解析优先级)
    • 默认优先级: 部署时不设置这两个ENV参数则默认prefer_ipv4(即IPV4优先),可选参数:prefer_ipv4(优先IPV4解析)、prefer_ipv6(优先IPV6解析)、OFF(不使用优先解析参数,此时会同时解析domain的IPV4和IPV6)
  • MikroTik Mosdns-adguardhome

    • 初衷: 构建一个MikroTik Container可以运行的Mosdns!用于DNS分流、防污染!
    • 特点: 开箱即用!镜像仅需要设置两个ENV参数即可运行!
  • AdGuardHome

    • 容器端口: 80 (用于webui观看数据)、53 (DNS请求数据入口)

    • 用户名: admin(默认)

    • 密码: adminadmin(默认)

    • AdGuardHome面板:

  • 如何自定义AdGuardHome的用户名和密码
    • 添加ENV参数: NAME=admin 、PASSWORD=$2a$12$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi(adminadmin)(注意AD使用的密码是基于Bcrypt hash,不能直接填写密码,需要转换!同时如果是linux系统的docker环镜,则此Bcrypt hash密码值的前三个$必须插入“\”!比如上方的默认PASSWORD的值就应该改为:“\”$2a“\”$12“\”$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi)
    • 可使用此网站生成Bcrypt 密码: Bcrypt密码生成网站⁠

  • MikroTik设置示例:

  • Mosdns
    • 容器端口: 5335(Adguardhome请求此端口)
    • 分流规则: 基于Loyalsoldier大佬的Geosite\Geoip⁠ !

关于定时更新规则

  • **容器内:**由ENV参数CRON_SCHEDULE控制。CRON_SCHEDULE="30 11 * * *"代表每天上午11:30执行更新!
  • **容器外:**可以由Mikrotik的/system/scheduler定时执行功能控制,设置相关启动、停止命令!容器每次启动会执行更新!

通用命令

docker run -d \
  --restart=always \
  --network=host \
  --name=mosdns-adguard \
  -e NAME="root" \
  -e PASSWORD="\$2a\$12\$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi" \    //设置adguardhome的密码(linux系统的docker环镜,则此Bcrypt hash密码值的前三个$必须插入"\"!)
  -e SOCKS5="127.0.0.1:1080" \
  -e CRON_SCHEDULE="5 4 * * * " \
  alickale/mosdns-adguard:latest

增加ECS、PREFER解析优先级参数

docker run -d \
  --restart=always \
  --network=host \
  --name=mosdns-adguard \
  -e SOCKS5="127.0.0.1:1080" \
  -e CN_ECS="您的区域运营商出口IP或者DNS" \
  -e Nocn_ECS="您的代理服务器出口IP或者DNS" \
  -e LocalPREFER="prefer_ipv6" \  //本地解析优先级为IPV6(建议本地解析设置为关闭OFF状态,此时将同时解析IPV4和IPV6
  -e RemotePREFER="prefer_ipv4" \ //远程解析优先级(默认为prefer_ipv4优先IPV4,如果您的代理为IPV6也可以使用IPV6优先,但要做好路由的分流规则)
  -e NAME="root" \
  -e PASSWORD="\$2a\$12\$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi" \   //设置adguardhome的密码(linux系统的docker环镜,则此Bcrypt hash密码值的前三个$必须插入"\"!)
  -e CRON_SCHEDULE="5 4 * * * " \
  alickale/mosdns-adguard:latest

mikrotik container快速部署命令

  • 注意: 命令copy到mikrotik执行可能会产生标点符号错乱,注意修改!
  • 注意: SOCKS5 ENV需要改成您自己有效的!不支持账号密码鉴权!CRON_SCHEDULE的参数和linux的cron定时一样!val="30 11 * * *"代表每天上午11:30执行!
/int veth add name=mosdns add=10.10.10.50/24 gateway=10.10.10.1
/int bri port add bri=bridge interf=mosdns
/file add type=directory name=CNIP  //创建映射目录(用于映射容器定时更新的cn_ip_cidr.rsc脚本,此脚本mikrotik专用!会自动检测7.x版本的mikrtok路由是否启用ipv6,有则更新CN的ipv4、ipv6,无则只更新CN的ipv4)
/cont mounts add name=mosdns_mount src=/CNIP dst=/var/share   //映射mikrotik files下的CNIP目录到容器的/var/share目录
/cont envs add name=mosdns_env key=SOCKS5 val="10.10.10.10:1080"
/cont envs add name=mosdns_env key=CRON_SCHEDULE val="5 4 * * * "
/cont envs add name=mosdns_env key=NAME val="root"
/cont envs add name=mosdns_env key=PASSWORD val="$2a$12$U8OPD4o.Iyh4tgTVXfokqObktTpUi1W/zovmeQ9bAekpW2cZiWUoi"  //设置adguardhome的密码! mikrotik路由不需要添加“\”转换符
/cont add remote=alickale/mosdns-adguard int=mosdns env=mosdns_env dns=127.0.0.1 sta=yes

Tag summary

Content type

Image

Digest

sha256:1f40e1a26…

Size

60.7 MB

Last updated

over 1 year ago

docker pull alickale/mosdns-adguard