博客访客专享:额外赠送 3 个月免费使用期 + 三年计划 10% 折扣 YSBLOG10
抢购

什么是 DNS 在 Linux 服务器上? – (完整指南将于 2026 年发布)

DNS 在 Linux 服务器上 将人类可读的域名转换为 IP 地址,并控制系统如何解析、提供、缓存和保护这些查找。

理解 DNS 在Linux上 涵盖解析器堆栈(/etc/resolv.conf、systemd-resolved),运行中 DNS 服务器 (BIND、Unbound、dnsmasq)管理区域文件、优化性能和排除常见错误。

如果你运行网站、邮件服务器或内部服务,学习 DNS 在 Linux 系统上,这至关重要。在本指南中,我将解释如何操作。 DNS 工作原理、Linux 如何解析域名以及如何部署和 manage a DNS 服务器端。我们将使用适合初学者的语言、实际示例以及您可以立即运行的命令。

什么是 DNS 以及它的工作原理(60 秒内讲解)?

什么是 DNS 它是如何运作的(60 秒内)?

域名系统 (DNS) 地图域(例如 example.com)到 IP 地址。典型的查询流程是从您的 Linux 解析器到递归解析器(ISP、云端或本地),然后逐级向上:根服务器 → 顶级域名服务器 → 该域名的权威名称服务器。缓存可以加快后续查找速度并降低延迟。

理解 DNS Linux 系统上的解析器栈

在Linux系统中,“解析器”是客户端应用程序将域名转换为IP地址的路径。它主要由glibc驱动。 /etc/nsswitch.conf以及名称服务器定义 /etc/resolv.conf许多现代发行版也添加了 systemd-resolved 和/或 NetworkManager manage 动态 DNS 设置。

关键文件和服务

  • /etc/resolv.conf: 列出域名服务器和解析器的选项。在某些系统中,它是指向存根解析器(127.0.0.53)的符号链接。
  • /etc/nsswitch.conf: 控制查找顺序(例如, hosts: files dns).
  • systemd-resolved: 缓存存根解析器和 manager. 提供 resolvectl/systemd-resolve 用于状态和调试。
  • NetworkManager: 动态更新 DNS 基于连接和 VPN 的设置。

如何查看您正在使用的解析器

# Is resolv.conf a symlink to systemd-resolved?
ls -l /etc/resolv.conf

# Show current DNS servers (systemd-resolved)
resolvectl status

# Check nsswitch host resolution order
grep ^hosts /etc/nsswitch.conf

# Quick lookups
getent hosts example.com
dig example.com +short

常见问题包括 resolv.conf 文件被 DHCP 或 NetworkManager 覆盖,以及 systemd-resolved 和本地 resolv.conf 文件同时出现冲突。 DNS 服务(例如 dnsmasq)尝试绑定端口 53。确定一个单一的权威机构。 DNS 在主机上避免出现竞态条件。

运行 DNS Linux 服务器 - 选项

Linux 支持多种 DNS 服务器。根据您的使用场景选择:权威服务器 DNS 对于托管域名,可以使用递归/缓存来加快客户端查找速度,或者采用混合设计。

  • 绑定9:应用最广泛,支持权威和递归检索, DNSSEC、观点、RPZ。全能型选手。
  • 不作承诺轻量级、快速的递归解析器 DNS美国证券交易委员会(SEC)验证。通常与国家证券监管机构(NSD)或外部权威机构合作。 DNS.
  • 域名:简单 DNS 以及用于小型网络、实验室和边缘设备的 DHCP。
  • 电力DNS企业级,采用数据库后端;权威组件和递归组件分离。

何时使用哪个

  • 为您的域名提供权威托管服务: BIND9 或 PowerDNS 权威性。
  • 服务器或办公室的本地缓存: Unbound 或 dnsmasq。
  • 大规模 managed DNS: 考虑云/managed DNS;内部/私有区域的自托管。

安装并配置缓存解析器(Unbound)

Unbound 非常适合加快查找速度, 证实 DNS证券交易委员会 在您的Linux服务器上。

# Ubuntu/Debian
sudo apt update && sudo apt install unbound -y

# RHEL/CentOS/AlmaLinux/Rocky
sudo dnf install unbound -y

# Minimal config example
sudo tee /etc/unbound/unbound.conf >/dev/null <<'EOF'
server:
  interface: 0.0.0.0
  access-control: 127.0.0.0/8 allow
  access-control: 10.0.0.0/8 allow
  access-control: 192.168.0.0/16 allow
  qname-minimisation: yes
  prefetch: yes
  harden-dnssec-stripped: yes
  root-hints: "/var/lib/unbound/root.hints"
EOF

# Fetch root hints and start
sudo curl -o /var/lib/unbound/root.hints https://www.internic.net/domain/named.root
sudo systemctl enable --now unbound

通过设置让系统使用它 nameserver 127.0.0.1 in /etc/resolv.conf (或者配置 systemd-resolved/NetworkManager 转发到 127.0.0.1)。验证如下: dig 并确保缓存命中率随着时间的推移降低延迟。

安装和配置 BIND9(权威模式 + 可选递归)

BIND9 可以托管您域的区域,并在需要时为您的局域网提供递归查询服务。 意见 分割 DNS (内部答案与外部答案)并启用 DNS适用情况下,需遵守美国证券交易委员会(SEC)的规定。

Ubuntu/Debian 安装

sudo apt update && sudo apt install bind9 bind9-utils -y

# Global options (forwarders optional)
sudo tee /etc/bind/named.conf.options >/dev/null <<'EOF'
options {
  directory "/var/cache/bind";
  recursion no;            // set "yes" for recursive resolver
  allow-query { any; };
  dnssec-validation yes;
  auth-nxdomain no;
  listen-on { any; };
  listen-on-v6 { any; };
  // forwarders { 1.1.1.1; 8.8.8.8; }; // optional
};
EOF

创建权威区域

# Add zone to named.conf.local
sudo tee -a /etc/bind/named.conf.local >/dev/null <<'EOF'
zone "example.com" {
  type master;
  file "/etc/bind/zones/db.example.com";
};
EOF

# Create zone file
sudo mkdir -p /etc/bind/zones
sudo tee /etc/bind/zones/db.example.com >/dev/null <<'EOF'
$TTL 3600
@   IN SOA ns1.example.com. admin.example.com. (
        2025010101 ; Serial
        3600       ; Refresh
        900        ; Retry
        604800     ; Expire
        300 )      ; Negative Cache TTL
; NS records
    IN NS ns1.example.com.
; A/AAAA records
ns1 IN A 203.0.113.10
@   IN A 203.0.113.20
www IN CNAME @
mail IN A 203.0.113.30
; MX record
@   IN MX 10 mail.example.com.
; TXT example (SPF)
@   IN TXT "v=spf1 a mx ~all"
EOF

# Check config and restart
sudo named-checkconf
sudo named-checkzone example.com /etc/bind/zones/db.example.com
sudo systemctl enable --now bind9

更新您的域名注册商,将 NS 记录指向您的 BIND 服务器。请记住递增该区域的值。 串行 每次更改时。使用 dig @ns1.example.com example.com any 核实。

RHEL/CentOS/AlmaLinux 安装

sudo dnf install bind bind-utils -y

# Paths differ slightly; configs typically under /etc/named.conf
sudo semanage permissive -a named_t  # or set proper SELinux contexts for zone files
sudo systemctl enable --now named

# Firewalld
sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload

在 SELinux 系统中,确保区域文件具有正确的上下文(例如, chcon -t named_zone_t /var/named/yourzone)并且如果使用动态更新,BIND 可以进行读/写操作。

管理的 DNS 记录和TTL

  • A/AAAA:将名称映射到 IPv4/IPv6.
  • CNAME:将一个名称别名为另一个名称;不要为同一个标签创建 A/AAAA 别名。
  • MX邮件交换器优先处理电子邮件投递。
  • NS:区域或子委派的权威名称服务器。
  • TXTSPF、DKIM、DMARC、验证密钥。
  • SRV服务发现(例如,_sip._tcp)。
  • TTL:频繁更改时降低值;稳定后提高值以提高缓存性能。

在迁移之前规划好 TTL(生存时间)。例如,在站点迁移前 24-48 小时降低 TTL,然后在切换完成后提高 TTL,以提高性能并降低查询负载。

Linux 系统上的诊断和故障排除

使用这些工具进行调试 DNS 从配置错误的区域到网络级阻塞等问题,它们对于任何管理 Linux 系统的管理员来说都至关重要。 DNS 组态。

你每天都会用到的命令

# Query specific server and record type
dig @1.1.1.1 example.com A +noall +answer

# Trace delegation path (root -> TLD -> authoritative)
dig example.com +trace

# See DNSSEC validation chain
dig example.com DS +dnssec
dig example.com A +dnssec

# Reverse lookup
dig -x 203.0.113.20 +short

# Check local resolver status (systemd-resolved)
resolvectl status
resolvectl query example.com

# Packet capture on port 53
sudo tcpdump -n port 53

常见错误和修复

  • 服务失败: 经常 DNSSEC验证或无效委托。检查DS记录、时钟偏差、防火墙和上游运行状况。
  • NX域该名称不存在。请确认区域加载是否正常,以及正在查询的确切标签。
  • REFUSED您的服务器拒绝了某些查询(ACL、视图)。请调整允许查询/递归设置。
  • resolv.conf 文件已过期:已被 DHCP 覆盖。PIN 码或 manage 通过 NetworkManager 或 systemd-resolved。
  • 端口 53 正在使用中:另一个绑定到 53 的守护进程。选择一个服务或更改绑定地址。

性能和安全最佳实践

  • 启用缓存使用合理的 TTL 进行 Unbound 或 BIND 操作可以降低延迟和上游负载。
  • 硬化递归:将递归服务限制在受信任的子网内;对公共互联网禁用。
  • DNS证券交易委员会:尽可能在解析器上进行验证并签署权威区域。
  • QNAME 最小化提高隐私保护并减少向上游泄露数据。
  • 速率限制/RRL:缓解权威服务器上的放大滥用行为。
  • 分裂地平线 DNS仅使用视图向内部客户提供内部答案。
  • 记录和监控:谨慎启用查询日志;将指标发送到 Prometheus/Grafana 并发出峰值警报。
  • 高可用性:使用不同网络/区域中至少两个权威名称服务器。

自托管 vs 托管 DNS你应该使用哪一个?

如果您需要完全控制、私有区域或本地解决方案,请选择自托管。 DNS 在 Linux 系统上(使用 BIND/Unbound)是理想之选。对于面向公众的域名, managed DNS 提供全球弹性及任播性能,且无额外开销。

At YouStable我们看到许多客户通过混合方法取得了成功:使用 managed DNS 对于公共区域,我们会在其 VPS 或专用服务器上部署轻量级的 Unbound 或 dnsmasq 解析器,以实现快速、安全的本地缓存。 主机托管方案和VPS计划 既要方便部署这两种模型,又要保持 DNS 可靠且安全。

逐步指南:将 Linux 指向您首选的解析器

  • 决定: 使用本地 Unbound (127.0.0.1) 或受信任的上游 (例如,1.1.1.1、9.9.9.9)。
  • 如果使用 systemd-resolved,设定 DNS 每个接口: resolvectl dns eth0 127.0.0.1.
  • 如果使用 NetworkManager: nm-connection-editor or nmcli con mod <name> ipv4.dns "127.0.0.1" 然后重新连接。
  • 对于静态服务器,请编辑 /etc/resolv.conf (避免使用) managed 动态地)。
  • 核实 dig 并确保基于 TTL 的缓存按预期运行。

来自12年以上管理经验的实用技巧 DNS

  • 永远不要在公共 IP 地址上运行开放式递归。务必将其锁定在私有子网内。
  • 文档区域序列号策略。使用基于日期的序列号(YYYYMMDDnn)以避免混淆。
  • 迁移过程中错开 TTL 的变化;从低值开始,以高值结束。
  • 将权威服务器设置在不同的ASN/区域。定期测试故障转移。
  • 在 CI 中自动执行区域检查: named-checkzone, dnsviz.net和 DNS美国证券交易委员会验证机构。
  • 如果使用 SELinux,请在部署前规划上下文和目录,以节省数小时的调试时间。
  • 对于繁忙的解析器,为了性能和简洁性,建议优先选择 Unbound;添加本地根提示。

常见问题- DNS 在 Linux 服务器上

权威性和递归性有什么区别? DNS 在 Linux 上?

权威性 DNS 为托管区域(例如 example.com)提供最终答案。递归 DNS 代表客户执行查找操作,遍历 DNS 层级结构和缓存结果。BIND 可以同时做到这两点;而 Unbound 通常只支持递归。

如何永久设置 DNS 服务器运行在 Ubuntu 还是 Debian 系统上?

使用 systemd-resolved resolvectl dns <iface> <server> 并且可选地 resolvectl domain使用 NetworkManager 运行 nmcli con mod <name> ipv4.ignore-auto-dns yes ipv4.dns "1.1.1.1 9.9.9.9" 然后重新连接。避免编辑 /etc/resolv.conf 直接就行了,如果是这样的话。 managed.

我应该自己经营吗? DNS 或使用 managed DNS?

您可以自行运行,用于内部区域、实验室环境和特殊需求。使用 managed DNS 对于需要全局冗余、Anycast 性能和低维护成本的公共领域,许多团队会将两者结合起来,以实现可靠性和可控性。

如何排查运行缓慢的问题 DNS 在 Linux 上?

使用以下方式检查延迟 dig 以及 +stats验证缓存(重复查询应该更快),检查 resolvectl status 对于活动服务器,并确保没有冲突的本地守护进程。使用以下方式捕获数据包: tcpdump 可以揭示超时或阻塞的 UDP/53。

Is DNS需要启用SEC,我该如何启用?

DNSSEC 不是强制性的,但能显著提高完整性。对于解析器,启用验证(Unbound:默认启用;BIND: dnssec-validation yes;对于权威区域、标志区域(例如, dnssec-signzone)并在您的注册处公布DS记录。

掌握 DNS 在 Linux 系统上,您可以构建更快的网站、提供更稳定的服务并实现更安全的名称解析。无论您选择自托管的 BIND/Unbound 还是其他方案,都能获得同样的优势。 managed DNS 加上本地缓存, YouStable的托管和VPS平台为可靠的托管提供了稳定的基础。 DNS 无论规模如何。

分享通过:

桑吉特·乔汉

Sanjeet Chauhan是一位博主兼SEO专家,致力于帮助网站实现自然增长。他分享实用的策略、可操作的技巧和独到的见解,以提升流量、提高排名并最大限度地扩大在线影响力。

发表评论

您的电邮地址不会被公开。 必填项 *

滚动到顶部