docker安装mosdns进行分流

kimlopezkimlopez
2 min read

1. 创建配置目录结构

复制

# 创建配置目录
sudo mkdir -p /etc/mosdns
cd /etc/mosdns

# 创建规则文件目录
sudo mkdir -p rules

2. 下载规则文件

复制

mkdir -p /etc/mosdns/rule
cd /etc/mosdns/rule

# 下载国内域名列表
wget -O geosite_cn.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/cn.txt"

# 下载国外域名列表
wget -O geosite_foreign.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/geolocation-!cn.txt"

# 设置权限
chmod 644 *.txt

3. 创建主配置文件

创建 /etc/mosdns/config.yaml

复制

log:
  level: info
  file: ""

plugins:
  # 缓存插件
  - tag: cache
    type: cache
    args:
      size: 10240
      lazy_cache_ttl: 86400

  # 国内域名列表
  - tag: geosite_cn
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rules/geosite_cn.txt"

  # 国外域名列表  
  - tag: geosite_foreign
    type: domain_set
    args:
      files:
        - "/etc/mosdns/rules/geosite_foreign.txt"

  # 国内 DNS 转发器(用于国内域名)
  - tag: forward_local
    type: forward
    args:
      concurrent: 2
      upstreams:
        - addr: "223.5.5.5:53"
        - addr: "119.29.29.29:53"
        - addr: "180.76.76.76:53"

  # 国外 DNS 转发器(用于国外域名)
  - tag: forward_remote
    type: forward
    args:
      concurrent: 2
      upstreams:
        - addr: "8.8.8.8:53"
        - addr: "1.1.1.1:53"
        - addr: "208.67.222.222:53"

  # 主要分流序列
  - tag: main_sequence
    type: sequence
    args:
      # 先查缓存
      - exec: $cache

      # 国内域名走国内 DNS
      - matches:
          - qname $geosite_cn
        exec: $forward_local

      # 国外域名走国外 DNS  
      - matches:
          - qname $geosite_foreign
        exec: $forward_remote

      # 默认情况走国外 DNS(适合海外用户)
      - exec: $forward_remote

  # UDP 服务器
  - tag: udp_server
    type: udp_server
    args:
      entry: main_sequence
      listen: ":53"

  # TCP 服务器
  - tag: tcp_server
    type: tcp_server
    args:
      entry: main_sequence
      listen: ":53"

4.启动MosDNS容器

docker run -d \
  --name mosdns \
  -p 5454:53/udp \
  -p 5454:53/tcp \
  -v /etc/mosdns:/etc/mosdns \
  irinesistiana/mosdns:latest

5. 配置AdGuard Home

在AdGuard Home的管理界面中:

  1. 进入 设置DNS设置

  2. 上游DNS服务器 中添加:

    复制

     127.0.0.1:5454
    

    或者如果AdGuard Home和MosDNS在不同主机:

    复制

     MosDNS主机IP:5454
    
  3. 清空其他上游DNS服务器

  4. 点击 保存配置

6. 测试配置

复制

# 测试中国域名(应该返回国内IP)
nslookup baidu.com 127.0.0.1 -port=5454

# 测试国外域名(应该返回国外IP)
nslookup google.com 127.0.0.1 -port=5454

# 查看MosDNS日志
docker logs mosdns

7. 自动更新规则脚本

创建 /etc/mosdns/update_rules.sh

复制

#!/bin/bash

cd /etc/mosdns/rules || exit 1

# 备份旧文件
cp geosite_cn.txt geosite_cn.txt.bak 2>/dev/null
cp geosite_foreign.txt geosite_foreign.txt.bak 2>/dev/null

# 下载新规则
wget -O geosite_cn.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/cn.txt"
wget -O geosite_foreign.txt "https://raw.githubusercontent.com/Loyalsoldier/domain-list-custom/release/geolocation-!cn.txt"

# 重启 MosDNS
docker restart mosdns

echo "geosite规则已更新:$(date)"

复制

# 设置执行权限
chmod +x /etc/mosdns/update_rules.sh

# 设置定时任务(每周更新)
echo "0 4 * * 0 /etc/mosdns/update_rules.sh" | sudo crontab -

这样配置后,MosDNS会自动将中国大陆的域名和IP走国内DNS解析,其他的走国外DNS,实现智能分流。

0
Subscribe to my newsletter

Read articles from kimlopez directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

kimlopez
kimlopez