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

2026-04-11 11:461阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

使用 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-202604052110022621510×526 43.2 KB

2.4 给 Adguard Home 配置 Unbound 作为上游

看图做就行

image-202604052111403931454×464 39.9 KB

image-202604052111531021212×1034 125 KB

3. 验证

[!TIP]

推荐安装DNS解析工具 GitHub - natesales/q: A tiny command line DNS client with support for UDP, TCP, DoT, DoH, DoQ and ODoH. · GitHub

在任意平台运行以下命令

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-202604052119208581481×849 58.3 KB

网友解答:
--【壹】--:

而且非公开自用,adgh 的界面还是挺方便的


--【贰】--:

unbound支持doh呀。何必再加adguard?
interface: 0.0.0.0@443
tls-service-key: “/etc/unbound/xxx.key”
tls-service-pem: “/etc/unbound/xxx.pem”
https-port: 443
do-tcp: yes


--【叁】--:

感谢大佬教程


--【肆】--:

因为已经有了 adgh 了,既然有了就不动了,还有自带的一些规则

问题描述:

使用 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-202604052110022621510×526 43.2 KB

2.4 给 Adguard Home 配置 Unbound 作为上游

看图做就行

image-202604052111403931454×464 39.9 KB

image-202604052111531021212×1034 125 KB

3. 验证

[!TIP]

推荐安装DNS解析工具 GitHub - natesales/q: A tiny command line DNS client with support for UDP, TCP, DoT, DoH, DoQ and ODoH. · GitHub

在任意平台运行以下命令

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-202604052119208581481×849 58.3 KB

网友解答:
--【壹】--:

而且非公开自用,adgh 的界面还是挺方便的


--【贰】--:

unbound支持doh呀。何必再加adguard?
interface: 0.0.0.0@443
tls-service-key: “/etc/unbound/xxx.key”
tls-service-pem: “/etc/unbound/xxx.pem”
https-port: 443
do-tcp: yes


--【叁】--:

感谢大佬教程


--【肆】--:

因为已经有了 adgh 了,既然有了就不动了,还有自带的一些规则