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
正常运行应该显示如下:

2.4 给 Adguard Home 配置 Unbound 作为上游
看图做就行


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启用成功了,如图:

@jsxykim #1 还行,主要是自建风险可控,而且可以过墙用纯净dns,不过肯定没有大厂的快
好用吗
Unbound和使用smartdns的区别是什么