Skip to content

MosDNS 分流 ​

MosDNS 是什么 🧭 ​

MosDNS 是一个开源的分流 DNS 工具,作用类似 AdGuard Home 的 DNS 分流功能:按域名规则把不同查询交给不同的上游 DNS,实现国内域名走国内 DNS、国外域名走国外 DNS、广告域名直接拦截。

相比 AdGuard Home 自带分流,MosDNS 规则更灵活,适合软路由 / 旁路由上做精细分流。

项目地址:https://github.com/IrineSistiana/mosdns

典型场景 🏠 ​

  • 国内域名走国内 DNS(延迟低),国外域名走国外 DNS(解析准)
  • 拦截广告域名,配合 AdGuard Home 或单独使用
  • 解决国内 DNS 解析国外域名慢、国外 DNS 解析国内 CDN 不准的问题

与 AdGuard Home 配合 🤝 ​

推荐组合:AdGuard Home(过滤 + 缓存)+ MosDNS(分流)

设备 → AdGuard Home(拦截广告、缓存)→ MosDNS(按域名分流)→ 国内/国外上游 DNS
  • AdGuard Home 的上游 DNS 填 MosDNS 的监听地址(如 127.0.0.1:5335)
  • MosDNS 再按规则把查询分发给不同上游

安装方式 ⚙️ ​

OpenWRT ​

Docker ​

bash
mkdir -p /mnt/docker/apps/mosdns && cd /mnt/docker/apps/mosdns
# 编写 config.yaml 后启动
docker run -d --name mosdns \
  -v /mnt/docker/apps/mosdns/config.yaml:/etc/mosdns/config.yaml \
  -p 5335:53/udp -p 5335:53/tcp \
  --restart always \
  irine/mosdns:latest

配置示例 📝 ​

一份简单的分流配置(国内走阿里 DNS,国外走 Cloudflare,广告域名拦截):

yaml
log:
  level: info

plugins:
  - tag: upstream_cn
    type: forward
    args:
      concurrent: 2
      upstreams:
        - addr: https://dns.alidns.com/dns-query
        - addr: https://doh.pub/dns-query

  - tag: upstream_foreign
    type: forward
    args:
      concurrent: 2
      upstreams:
        - addr: https://cloudflare-dns.com/dns-query
        - addr: https://dns.google/dns-query

  - tag: ads
    type: query_matcher
    args:
      domain:
        - adguard-dns: A
        - adguard-dns: AAAA

  - tag: cn_domains
    type: query_matcher
    args:
      domain:
        - geosite: cn

  - tag: sequence_main
    type: sequence
    args:
      - matches:
          - ads
        exec: reject 0
      - matches:
          - cn_domains
        exec: goto upstream_cn
      - exec: goto upstream_foreign

  - tag: dns_server
    type: udp_server
    args:
      entry: sequence_main
      listen: ":5335"

TIP

配置较复杂时建议先用别人的成品规则,跑通再改。MosDNS 官方仓库和社区有大量现成配置。