Sign inSign up

alickale/mosdnsui

By alickale

•Updated 12 days ago

Image
7

9.9K

alickale/mosdnsui repository overview

  • MosdnsUI:
  • 端口: 53(Mosdns解析端口)
  • 分流规则: 基于Loyalsoldier大佬的Geosite\Geoip⁠ !
  • UI面板: 基于Jimmyzxk大佬的MosDNSUI⁠ !




为了确保在各种环镜下稳定更新规则,我们强化了规则更新逻辑,同时也优化了WEB管理页面的逻辑,强调用户在管理页面更新参数的优先级高于变量

⁠总流程图

第一张图片
图1:更新规则流程







  • 更新日志
    • 2026-09-15:

      • 恢复守护进程 日志(启动配置、更新步骤、错误)
      • 修复自动刷新逻辑
      • 微调ui
      • 调整lazy缓存
    • 2026-09-14:

      • 更新了聚合资源下载逻辑
      • 增加了备用更新,主备切换
    • 2026-09-11:

      • 缓存lazy_cache_ttl: 0,过期后不返回陈旧解析
      • 聚合包 下载使用 DoT → DoH,不用系统 DNS / 明文 53
    • 2026-05-13:

      • 使用DialContext 贯穿请求 context
      • 更新、定时更新使用https://1.1.1.1/dns-query(DoH → UDP),不依赖先解析其它域名
      • SOCKS5仍用代理 Dial,不套自定义解析(由代理侧解析)
    • 2026-05-12:

      • 优化定时更新、规则更新逻辑(优先从Cloudflare CDN下载)
      • 允许不设置socks5变量(仅用于防污解析),更新规则亦可能受到影响
      • 更新webui的逻辑,确保ui 高级参数同步有效且优先于env变量(即web面板设置参数将强制覆盖env,若用户清空或删除相关参数将恢复使用env变量参数
    • 2026-04-04:

      • 更新Mosdns版本为v5.3.4
    • 2025-11-11:

      • 1.更新Mikrotik专用的CNip链接;2.优化重试机制(3次);3.优化使用多线程任务更新Geo
    • 2025-11-09:

      • 调整GEO下载机制(取消网络测试及智能判断下载,使用gh-proxy代理下载GEO)、增加下载进度提示
    • 2025-10-28:

      • 修复ADlist处理逻辑
    • 2025-10-15:

      • go重构所有功能,移除shell脚本、bash、supercronic依赖,极大减小镜像体积以适配更小ROM的arm平台架构
    • 2025-10-09:

      • go重构部分功能,移除一些依赖,极大减小镜像体积以适配更小ROM的arm平台架构
    • 2025-10-05:

      • 修复Mikrotik_CNIP生成逻辑
    • 2025-09-30:

      • 更改更新GEO的逻辑(取消更新依赖SK5代理,改为使用gh-proxy代理下载)
    • 2025-09-14:

      • 新增[域名覆写功能]
      • 更换“重启DNS服务按钮”样式以及更改“保存重载”功能的消息提醒方式(改为优雅的页面顶部通知条)
    • 2025-09-14:

      • 修复定时更新GEO管理服务
    • 2025-08-15:

      • 新增AD列表
      • 调整apple@cn、steam@cn的逻辑与优先级
    • 2025-06-25:

      • 这是一个自带API的Mosdnsui⁠缓存面板,支持管理黑白名单。

⁠🎨 Web UI操作指南

⁠1. 访问高级配置面板
  1. 打开浏览器访问: http://你的IP:5001(默认5001端口,可通过WEB_PORT自定义)
  2. 点击顶部的 "🔧 高级配置" 按钮
  3. 进入配置管理界面
⁠2. 配置项说明
⁠📍 ECS (EDNS Client Subnet) 配置

国内 ECS (CN_ECS)

  • 用途: 查询国内DNS时发送的客户端子网地址
  • 示例: 1.2.4.8
  • 效果: 获得更准确的CDN解析结果
  • 默认: 留空

国外 ECS (Nocn_ECS)

  • 用途: 查询国外DNS时发送的客户端子网地址
  • 示例: 8.8.8.8
  • 默认: 留空
⁠🌐 IP解析优先级

国内解析优先级 (LocalPREFER)

  • prefer_ipv4 - 优先返回IPv4地址(默认)
  • prefer_ipv6 - 优先返回IPv6地址
  • OFF - 不设置优先级

国外解析优先级 (RemotePREFER)

  • prefer_ipv4 - 优先返回IPv4地址(默认)
  • prefer_ipv6 - 优先返回IPv6地址
  • OFF - 不设置优先级
⁠🔒 代理配置

SOCKS5 代理

  • 提示: 不支持带账号密码鉴权的SOCKS5代理(Mosdns不支持)
  • 格式: socks5://IP:端口
  • 示例: socks5://192.168.1.1:1080
  • 用途: 查询国外DNS时使用的代理
  • 默认: socks5://127.0.0.1:1080
⁠⏰ 定时任务

自动更新时间 (CRON_SCHEDULE)

  • 格式: 分 时 日 月 周
  • 默认: 0 5 * * 4 (每周四5点)

Cron表达式说明:

字段允许值特殊字符
分钟0-59* , - /
小时0-23* , - /
日期1-31* , - /
月份1-12* , - /
星期0-6 (0=周日)* , - /

特殊字符含义:

  • * - 任意值
  • */n - 每n个单位(如 */30 = 每30分钟)
  • n-m - 范围(如 1-5 = 1到5)
  • n,m - 列表(如 0,12 = 0和12)

常用示例:

0 5 * * 4       # 每周四5点 (默认)
*/30 * * * *    # 每30分钟
0 0 * * *       # 每天0点
0 2,14 * * *    # 每天2点和14点
0 0 * * 0       # 每周日0点
0 3 1 * *       # 每月1日3点
*/15 9-17 * * 1-5  # 工作日9-17点每15分钟
⁠3. 保存配置
  1. 修改参数后,点击 "💾 保存配置" 按钮
  2. 确认提示框
  3. 等待保存成功提示
  4. DNS服务会自动重启并应用新配置
⁠4. 重新加载配置

点击 "🔄 重新加载" 按钮可以刷新当前配置,查看最新值。

⁠5. 返回主界面

点击 "返回缓存展示" 按钮返回DNS缓存监控页面。


⁠相关变量
变量名称描述默认值可选值
WEB_PORT定义Mosdns面板端口(默认5001)5001任意
CRON_SCHEDULE定时更新GEO任务0 5 * * 4(每周四凌晨5:00cron 表达式
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>

  • 关于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 Mosdnsui

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

  • Mosdns UI面板:
第一张图片
图1:Mosdns缓存



第二张图片
图2:高级配置-在线配置ENV参数



第三张图片
图3:黑白名单管理




第四张图片
图4:域名覆写功能



关于定时更新规则

  • **容器内:**由ENV参数CRON_SCHEDULE控制。CRON_SCHEDULE="0 5 * * 4"代表每周四凌晨5点执行更新!
  • **容器外:**可以由Mikrotik的/system/scheduler定时执行功能控制,设置相关启动、停止命令!容器每次启动会执行更新!

通用命令(访问IP:5001)

docker run -d \
  --restart=always \
  --network=host \
  --name=mosdnsui \
  -e SOCKS5="127.0.0.1:1080" \
  alickale/mosdnsui

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

docker run -d \
  --restart=always \
  --network=host \
  --name=mosdnsui \
  -e WEB_PORT="80" \
  -e CN_ECS="223.5.5.5" \
  -e Nocn_ECS="8.8.8.8" \
  -e LocalPREFER="prefer_ipv6" \
  -e RemotePREFER="prefer_ipv4" \
  -e CRON_SCHEDULE="0 5 * * 4" \
  -e SOCKS5="127.0.0.1:1080" \
  alickale/mosdnsui

mikrotik container快速部署命令

  • 注意: SOCKS5 ENV需要改成您自己有效的!不支持账号密码鉴权!CRON_SCHEDULE的参数和linux的cron定时一样!val="0 5 * * 4"代表每周四凌晨5:00执行!
/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="0 5 * * 4 "
/cont envs add name=mosdns_env key=WEB_PORT val="80"
/cont add remote=alickale/mosdnsui int=mosdns env=mosdns_env dns=127.0.0.1 sta=yes

Tag summary

Content type

Image

Digest

sha256:49e3b3321…

Size

15.8 MB

Last updated

12 days ago

docker pull alickale/mosdnsui