logo NodeSeekbeta

使用 Unbound 搭配 Adguard Home 自建安全 DNS

1. 背景

突如其来想要试试 Unbound ,毕竟是不通过公共DNS,直接传统递归 DNS 到权威服务器,与Adguard Home搭配就能实现简单自建安全DNS,还不用依赖公共DNS

这次配置了 Unbound 支持 ecs,并且调整了缓存配置(非必需),以后再研究别的模块

2. 操作

之前就建好了Adguard Home,这次只涉及 Unbound docker版本的建立

2.1 创建 docker-compose.yml 文件

以 1Panel 应用商店安装的Adguard Home为例,其他方式安装的可以参考

# 指定使用外部网络`1panel-network`
networks:
  1panel-network:
    external: true
services:
  unbound:
    # 找到的目前还在更新的一个unbound镜像
    image: madnuttah/unbound:latest
    container_name: unbound
    restart: unless-stopped
    # 将unbound加入1panel-network网络,并且固定IP地址
    networks:
      1panel-network:
        ipv4_address: 172.18.0.253
    # 显式声明unbound暴露端口
    expose:
      - "5335/tcp"
      - "5335/udp"
    environment:
      # 时区
      TZ: Asia/Shanghai
      HEALTHCHECK_PORT: 5335
      # 设置为true且没有定义用户时,则以root用户运行,防止权限问题(也可能不用加这个)
      DISABLE_SET_PERMS: "true"
    volumes:
      # 持久化/conf.d目录,用于自定义unbound配置
      - ./conf.d/:/usr/local/unbound/conf.d/:ro
    healthcheck:
      test: /usr/local/unbound/sbin/healthcheck.sh
      interval: 60s
      retries: 5
      start_period: 15s
      timeout: 30s
    # WUD检查容器更新,没有安装WUD的可以删掉,也可以参考我前面的komari配置文件中的WUD配置方法
    labels:
      - "wud.watch=true"
      - "wud.trigger.include=docker.auto"

2.2 创建 Unbound 自定义配置片段

首先在docker-compose.yml同目录下创建conf.d文件夹

sudo mkdir -p conf.d

编辑配置片段

sudo nano conf.d/config.conf

配置片段如下:

server:
    # ECS 配置
    module-config: "subnetcache validator iterator"
    send-client-subnet: 0.0.0.0/0
    send-client-subnet: ::0/0
    client-subnet-zone: .
    client-subnet-always-forward: yes
    max-client-subnet-ipv4: 24
    max-client-subnet-ipv6: 56
    
    # 缓存优化(可选)
    msg-cache-size: 64m
    rrset-cache-size: 64m
    key-cache-size: 32m
    neg-cache-size: 16m

2.3 运行 Unbound

sudo docker compose up -d

检查日志是否正常

sudo docker compose logs -f

正常运行应该显示如下:

image-20260405211002262

2.4 给 Adguard Home 配置 Unbound 作为上游

看图做就行

image-20260405211140393

image-20260405211153102

3. 验证

[!TIP]

推荐安装DNS解析工具 https://github.com/natesales/q

在任意平台运行以下命令

q /s https://dns.seaya.li/dns-query /subnet 8.8.8.0/24 ip.cn
q /s https://dns.seaya.li/dns-query /subnet 111.31.0.0/16 ip.cn

得到的解析结果不同应该就是ECS启用成功了,如图:

image-20260405211920858

  • @jsxykim #1 还行,主要是自建风险可控,而且可以过墙用纯净dns,不过肯定没有大厂的快

  • 好用吗

  • Unbound和使用smartdns的区别是什么

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72775位seeker

🎉欢迎新用户🎉