Debian12使用 Unbound 搭建本地 DNS 服务器

搭建本地 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


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注