217heidai / NestingDNS

AdGuardHome、MosDNS、SmartDNS 套娃使用实践
28 stars 9 forks source link
adguardhome docker mosdns smartdns

NestingDNS

DNS 三大神器 AdGuardHomeMosDNSSmartDNS,该如何选择?
不,小孩子才做选择,我全都要。
于是有了这个项目,套娃使用三大神器,试图找到一套最佳实践。

DNS 解析流程

  1. AdGuardHome 为第一层 DNS ,作为整体入口,监听端口 4053。
    • 负责去广告。
  2. MosDNS 为第二层 DNS,监听端口 5053。
    • 负责分流。
    • 直连:待解析域名在 direct-list.txtapple-cn.txtgoogle-cn.txt、force-cn.txt(自定义不走代理的域名)内,通过 SmartDNS 的 mainland 组进行解析。
    • 代理:待解析域名在 proxy-list.txtgfw.txtgreatfire.txt、force-nocn.txt(自定义走代理的域名)内,通过 SmartDNS 的 gfw 组进行解析。
    • Fallback:待解析域名不在以上规则内的,先使用 SmartDNS 的 mainland 组进行解析,如解析出来的地址为国内 IP(在 CN-ip-cidr.txt 内)则使用,否则抛弃。再使用 SmartDNS 的 gfw 组进行解析,如解析成功则使用,如失败则使用 SmartDNS 的 overseas 组进行解析(gfw 组使用代理连接公共 DNS,当代理异常时使用 overseas 组作为备用进行解析)。
  3. SmartDNS 为第三层 DNS,监听端口 6053、7053、8053
    • 负责 DNS 解析、测速、缓存。
    • mainland 组,端口 7053,通过 DoT 接入上游 AliDNS、DNSPod、360DNS,负责直连域名解析。
    • gfw 组,端口 8053,通过代理使用 DoH 接入上游 Google、Cloudflare、Quad9,负责代理域名解析,关闭缓存、测速。
    • overseas 组,端口 6053,通过 DoT 接入上游 Google、Cloudflare、Quad9、Quad101、DNS.SB、NextDNS,作为备用域名解析,关闭缓存、测速。

NestingDNS

安装方法

使用 Docker 一键安装。

  1. network host 模式(推荐使用)

    docker run -d \
    --restart unless-stopped \
    --name nestingdns \
    --network host \
    -v $HOME/nestingdns/etc:/nestingdns/etc \    # 配置文件路径
    -v $HOME/nestingdns/work:/nestingdns/work \  # 工作文件路径
    -v $HOME/nestingdns/log:/nestingdns/log \    # 日志文件路径
    -e TZ=Asia/Shanghai \
    -e SCHEDULE="0  4  *  *  *" \  # 每天 4 点更新规则文件,重启 MosDNS
    217heidai/nestingdns
  2. 端口映射模式(MosDNS、SmartDNS 的端口可以不映射)

    docker run -d \
    --restart unless-stopped \
    --name nestingdns \
    -p 3000:3000 \      # AdGuardHome web 页面
    -p 4053:4053 \      # AdGuardHome NDS
    -p 4053:4053/udp \  # AdGuardHome NDS
    -p 5053:5053 \      # MosDNS NDS
    -p 5053:5053/udp \  # MosDNS NDS
    -p 6053:6053 \      # SmartDNS NDS
    -p 6053:6053/udp \  # SmartDNS NDS
    -p 7053:7053 \      # SmartDNS NDS
    -p 7053:7053/udp \  # SmartDNS NDS
    -p 8053:8053 \      # SmartDNS NDS
    -p 8053:8053/udp \  # SmartDNS NDS
    -v $HOME/nestingdns/etc:/nestingdns/etc \    # 配置文件路径
    -v $HOME/nestingdns/work:/nestingdns/work \  # 工作文件路径
    -v $HOME/nestingdns/log:/nestingdns/log \    # 日志文件路径
    -e TZ=Asia/Shanghai \
    -e SCHEDULE="0  4  *  *  *" \  # 每天 4 点更新配置文件,重启 MosDNS
    217heidai/nestingdns

配置说明

默认已全部关闭 IPv6 支持。

AdGuardHome

AdGuardHome 配置文件为 $HOME/nestingdns/etc/conf/adguardhome.yaml

MosDNS

MosDNS 配置文件为 $HOME/nestingdns/etc/conf/mosdns.yaml$HOME/nestingdns/etc/conf/mosdns_load_rules.yaml$HOME/nestingdns/etc/conf/mosdns_forward.yaml

SmartDNS

SmartDNS 配置文件为 $HOME/nestingdns/etc/conf/smartdns.conf

测试方法

dig @ip -p 4053 www.baidu.com