搭建本地 DNS 服务器能够提升域名解析速度、增强网络安全和隐私保护。Unbound 作为一款高性能、轻量级且支持 DNSSEC 的递归解析器,非常适合用来搭建本地 DNS 服务。通过本地 DNS,用户不仅减少对外部服务器的依赖,还能实现更灵活的管理与控制,提升整体网络体验和安全性。
1. 更新系统软件包
确保你的系统软件包是最新的。执行以下命令更新软件包列表:
apt update
2. 安装必要的软件包
我们需要安装 nano
(一个轻量级文本编辑器),dnsutils
(包含 dig
等DNS调试工具),以及 unbound
DNS 服务器。
apt install -y nano dnsutils
apt install -y unbound
3. 启动并启用 Unbound 服务
安装完成后,启用 unbound
服务并立即启动:
systemctl enable --now unbound
4. 配置系统使用本地 DNS
为了让系统使用刚刚搭建的本地 DNS 服务器,修改 /etc/resolv.conf
文件,将 DNS 服务器地址指向本机:
echo "nameserver 127.0.0.1" > /etc/resolv.conf
5. 验证 DNS 服务监听端口
使用 ss
命令检查本地是否有进程监听 53 端口(DNS 默认端口):
ss -lnptu | grep 53
如果看到 unbound
在 53 端口监听,说明服务正常启动。
6. 测试 DNS 解析功能
使用 dig
命令向本地 DNS 服务器请求解析 debian.org
域名:
dig @127.0.0.1 debian.org
如果查询返回正确的 DNS 解析结果,则 DNS 服务器工作正常。
7. 配置 Unbound
编辑主配置文件 /etc/unbound/unbound.conf
:
nano /etc/unbound/unbound.conf
添加以下配置内容:
server:
interface: 0.0.0.0
access-control: 192.168.1.0/24 allow
cache-max-ttl: 86400
cache-min-ttl: 3600
num-threads: 4 # CPU
msg-cache-size: 128m
rrset-cache-size: 256m
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
auto-trust-anchor-file: "/var/lib/unbound/root.key"
root-hints: "/var/lib/unbound/root.hints"
val-clean-additional: yes
harden-glue: yes
harden-dnssec-stripped: yes
hide-identity: yes
hide-version: yes
do-ip4: yes
do-tcp: yes
do-udp: yes
tcp-upstream: yes
prefetch: yes
prefetch-key: yes
- interface: 0.0.0.0
监听的网络接口,0.0.0.0
表示监听所有可用的IPv4接口(即对所有IP开放)。 - access-control: 192.168.1.0/24 allow
允许来自这个网段(192.168.1.0 到 192.168.1.255)的客户端访问DNS服务。 - cache-max-ttl: 86400
DNS缓存的最大存活时间(TTL),单位是秒。86400秒 = 24小时。缓存中的记录不会超过这个时间。 - cache-min-ttl: 3600
DNS缓存的最小存活时间(TTL),单位是秒。即使记录的TTL小于这个值,也会缓存至少3600秒(1小时)。 - num-threads: 4 # CPU
用于DNS查询处理的线程数量,通常设置为CPU核心数,这里是4个线程。 - msg-cache-size: 128m
DNS消息缓存大小,128MB。缓存解析过的DNS响应消息,提升查询效率。 - rrset-cache-size: 256m
RRSet缓存大小,256MB。RRSet是资源记录集合,缓存DNS记录的具体数据。 - msg-cache-slabs: 4
将消息缓存分成4个分片,提高并发访问性能。 - rrset-cache-slabs: 4
RRSet缓存分成4个分片,同样为了提高并发处理性能。 - infra-cache-slabs: 4
基础设施缓存分片数,4个。缓存底层的基础数据,提高性能。 - key-cache-slabs: 4
DNSSEC密钥缓存分片数,4个。缓存验证DNSSEC所需的密钥数据。 - auto-trust-anchor-file: “/var/lib/unbound/root.key”
DNSSEC自动信任锚文件路径,Unbound用来验证DNSSEC签名的根信任锚。 - root-hints: “/var/lib/unbound/root.hints”
根服务器提示文件路径,Unbound用来查找根DNS服务器的地址。 - val-clean-additional: yes
启用清理额外信息的DNSSEC验证功能,增强安全性。 - harden-glue: yes
加固“胶记录”的安全,防止DNS缓存投毒攻击。 - harden-dnssec-stripped: yes
防止中间人去除DNSSEC签名,确保DNSSEC验证的完整性。 - hide-identity: yes
隐藏Unbound服务器的标识信息,不向外泄漏服务器名称。 - hide-version: yes
隐藏版本信息,避免泄露软件版本给潜在攻击者。 - do-ip4: yes
启用IPv4查询支持。 - do-tcp: yes
启用通过TCP协议进行DNS查询,UDP有时不能传输大型响应。 - do-udp: yes
启用通过UDP协议进行DNS查询。 - tcp-upstream: yes
向上游服务器发起TCP连接查询,增强可靠性。 - prefetch: yes
启用预取缓存功能,缓存快要过期的记录时提前刷新,减少查询延迟。 - prefetch-key: yes
针对DNSSEC密钥的预取缓存功能,提高验证效率。
8. 检查配置文件正确性
使用 unbound-checkconf
命令检查配置文件语法是否正确:
unbound-checkconf
如果没有错误提示,说明配置有效。
9. 重启 Unbound 服务
最后,重启服务使配置生效:
systemctl restart unbound
发表回复