标签: Unbound

  • 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