Sign inSign up

rsg2019/mosdns

By rsg2019

Updated 2 months ago

Image
0

1.8K

rsg2019/mosdns repository overview

rsg2019/mosdns 容器使用说明

这是一个已打包好的 mosdns Docker 镜像,适合直接用 Docker Compose 部署为局域网 DNS 服务。

镜像:

rsg2019/mosdns:v5.3.4

功能

  • 国内域名走国内 DNS
  • 国外域名走 mihomo DNS
  • 启动时自动获取公网 IPv4 并写入 ECS
  • 默认禁用过期缓存,降低长期返回不健康 IP 的概率
  • 每天凌晨自动更新规则并重启加载
  • 所有主要参数都可以通过 Docker 环境变量调整

快速启动

创建目录:

mkdir -p /opt/mosdns/config /opt/mosdns/rules
cd /opt/mosdns

创建 docker-compose.yml

services:
  mosdns:
    image: rsg2019/mosdns:v5.3.4
    container_name: mosdns
    restart: unless-stopped
    ports:
      - "${MOSDNS_LISTEN_PORT:-53}:53/udp"
      - "${MOSDNS_LISTEN_PORT:-53}:53/tcp"
    environment:
      TZ: ${TZ:-Asia/Shanghai}

      DOMESTIC_DNS_1: ${DOMESTIC_DNS_1:-223.5.5.5}
      DOMESTIC_DNS_2: ${DOMESTIC_DNS_2:-119.29.29.29}
      DOMESTIC_DNS_3: ${DOMESTIC_DNS_3:-202.102.134.68}

      FOREIGN_DNS: ${FOREIGN_DNS:-192.168.1.54:53}

      ECS_IPV4_PREFIX: ${ECS_IPV4_PREFIX:-24}
      ECS_IPV6_PREFIX: ${ECS_IPV6_PREFIX:-56}
      ECS_PRESET: ${ECS_PRESET:-}
      ECS_AUTO_IP: ${ECS_AUTO_IP:-1}
      ECS_IP_SERVICES: ${ECS_IP_SERVICES:-https://4.ipw.cn http://ip.3322.net https://myip.ipip.net}
      ECS_IP_DNS: ${ECS_IP_DNS:-223.5.5.5 119.29.29.29 202.102.134.68}

      CACHE_SIZE: ${CACHE_SIZE:-8192}
      CACHE_LAZY_TTL: ${CACHE_LAZY_TTL:-0}
      CACHE_DUMP_FILE: ${CACHE_DUMP_FILE:-}
      CACHE_DUMP_INTERVAL: ${CACHE_DUMP_INTERVAL:-300}

      UPDATE_SCHEDULE: ${UPDATE_SCHEDULE:-30 3 * * *}
      RELOAD_MOSDNS: ${RELOAD_MOSDNS:-1}
    volumes:
      - ./config:/etc/mosdns/config:ro
      - ./rules:/etc/mosdns/rules:rw
      - mosdns-cache:/var/cache/mosdns
    healthcheck:
      test: ["CMD-SHELL", "pidof mosdns >/dev/null && netstat -lun | grep -q ':53 '"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 20s

volumes:
  mosdns-cache:

启动:

docker compose up -d

查看状态:

docker ps --filter name=mosdns
docker logs --tail 100 mosdns

测试解析:

dig @127.0.0.1 baidu.com A +short
dig @127.0.0.1 wikipedia.org A +short

端口

默认监听宿主机:

53/udp
53/tcp

如果宿主机 53 端口已被占用:

MOSDNS_LISTEN_PORT=1053 docker compose up -d

测试:

dig @127.0.0.1 -p 1053 baidu.com A +short

国内 DNS

默认:

DOMESTIC_DNS_1=223.5.5.5
DOMESTIC_DNS_2=119.29.29.29
DOMESTIC_DNS_3=202.102.134.68

建议把 DOMESTIC_DNS_3 改成你本地运营商 DNS。

国外 DNS / mihomo

默认:

FOREIGN_DNS=192.168.1.54:53

这要求局域网内 192.168.1.54 的 mihomo DNS 正常监听 53 端口。

如果你的 mihomo 地址不同,改成:

FOREIGN_DNS=你的mihomo地址:端口

ECS

默认自动获取公网 IPv4:

ECS_PRESET=
ECS_AUTO_IP=1

容器启动时会请求国内 IP 回显服务:

ECS_IP_SERVICES=https://4.ipw.cn http://ip.3322.net https://myip.ipip.net

并使用国内 DNS 解析这些服务:

ECS_IP_DNS=223.5.5.5 119.29.29.29 202.102.134.68

请求时会禁用代理,避免拿到代理节点 IP。每次容器启动都会重新获取 ECS IP。公网 IP 变化后,重启容器即可刷新:

docker restart mosdns

如果要固定 ECS IP:

ECS_PRESET=你的公网IPv4
ECS_AUTO_IP=0

缓存

默认:

CACHE_SIZE=8192
CACHE_LAZY_TTL=0
CACHE_DUMP_FILE=
CACHE_DUMP_INTERVAL=300

含义:

  • CACHE_SIZE=8192:缓存容量
  • CACHE_LAZY_TTL=0:禁用过期缓存兜底
  • CACHE_DUMP_FILE=:不持久化缓存到磁盘
  • CACHE_DUMP_INTERVAL=300:保留参数,未设置 dump 文件时不会持久化旧缓存

自动更新规则

默认每天凌晨 03:30 更新规则:

UPDATE_SCHEDULE=30 3 * * *

更新成功后自动重启 mosdns:

RELOAD_MOSDNS=1

手动更新:

docker exec mosdns /usr/local/bin/update-rules-and-restart.sh

只更新不重启:

docker exec mosdns sh -c 'RELOAD_MOSDNS=0 /usr/local/bin/update-rules-and-restart.sh'

自定义规则

国内域名:

./config/domestic_domains.txt

国外域名:

./config/foreign_domains.txt

国内 IP:

./config/domestic_ip.txt

国外 IP:

./config/foreign_ip.txt

修改后重启:

docker restart mosdns

常用命令

查看日志:

docker logs -f mosdns

查看最终运行配置:

docker exec mosdns cat /tmp/mosdns-runtime/config.yaml

查看 ECS:

docker exec mosdns sh -c 'grep -A8 -n "tag: ecs_cn" /tmp/mosdns-runtime/config.yaml'

查看版本:

docker exec mosdns /usr/local/bin/mosdns version

重启:

docker restart mosdns

停止:

docker compose down

排错

容器启动失败:

docker logs --tail 200 mosdns

国外域名无法解析:

dig @192.168.1.54 google.com A +short

如果这个命令失败,说明 mihomo DNS 入口不可达或未监听。

ECS IP 不对:

docker logs mosdns | grep 'detected ECS'
docker exec mosdns sh -c 'grep -A8 -n "tag: ecs_cn" /tmp/mosdns-runtime/config.yaml'

如果仍然拿到代理节点 IP,检查宿主机或 Docker 网络出口是否被透明代理影响。可以临时固定:

ECS_PRESET=真实公网IPv4
ECS_AUTO_IP=0

Tag summary

Content type

Image

Digest

sha256:05f9881ca

Size

14.6 MB

Last updated

3 months ago

docker pull rsg2019/mosdns