在linux部署dns服务器需完成安装bind、配置named.conf、创建区域文件、启动服务四步。安装时区分发行版包名,配置监听地址与查询权限,正向区域文件需含soa/ns/a记录且serial递增,启动前用named-checkconf和named-checkzone校验语法,最后用dig测试解析。

在 Linux 系统上部署 DNS 服务器,核心是让 Bind(named 服务)稳定提供权威或递归解析能力。这不是改 /etc/resolv.conf 那种客户端配置,而是真正运行一个能响应外部查询的 DNS 服务。关键在于装对、配准、跑通、防拦——四个环节缺一不可。
安装 Bind 并确认基础组件
不同发行版使用对应包管理器安装,务必同时装上工具集,便于后续验证:
- RHEL/CentOS/Rocky/AlmaLinux(dnf/yum):
sudo dnf install -y bind bind-utils - Debian/Ubuntu:
sudo apt update && sudo apt install -y bind9 bind9utils bind9-doc
安装后检查服务状态:systemctl is-active named(RHEL系)或 systemctl is-active bind9(Debian系),初始应为 inactive —— 这是正常的,配置完成前不启动。
修改主配置文件 /etc/named.conf 或 /etc/bind/named.conf
路径取决于系统:RHEL系用 /etc/named.conf,Debian系用 /etc/bind/named.conf。重点调整 options 块:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
listen-on port 53 { any; };—— 让服务监听所有 IPv4 地址(含本机 LAN IP) -
listen-on-v6 port 53 { ::1; };(可选)—— 若需 IPv6 支持,至少保留本地回环 -
allow-query { any; };—— 允许来自任意客户端的查询(内网部署可缩为{ 192.168.0.0/16; };) -
recursion yes;—— 启用递归查询(仅当你要做缓存/转发服务器时才需要;纯权威服务器可设为no) - 确保
include "/etc/named.rfc1912.zones";(RHEL)或include "/etc/bind/named.conf.local";(Debian)未被注释,这是区域声明入口
创建并注册正向解析区域文件
以域 example.com 为例(请替换为你自己的域名和 IP):
- 在 RHEL 系:新建
/var/named/example.com.zone;在 Debian 系:新建/etc/bind/zones/db.example.com - 内容需包含 SOA、NS 和至少一条 A 记录,serial 必须是纯数字且每次修改后递增(如从
2026061401改为2026061402) - RHEL 系执行:
sudo chown root:named /var/named/example.com.zone && sudo chmod 640 /var/named/example.com.zone - Debian 系执行:
sudo chown bind:bind /etc/bind/zones/db.example.com - 在区域声明文件中添加 master 区域(RHEL 在
/etc/named.rfc1912.zones,Debian 在/etc/bind/named.conf.local):zone "example.com" { type master; file "/var/named/example.com.zone"; };(RHEL)zone "example.com" { type master; file "/etc/bind/zones/db.example.com"; };(Debian)
启动服务并排除常见故障
启动前务必验证语法,否则服务会静默失败:
- 检查主配置:
named-checkconf(RHEL)或named-checkconf -z(Debian,加-z同时校验 zone) - 检查区域文件:
named-checkzone example.com /var/named/example.com.zone(路径必须完整) - 启动服务:
sudo systemctl start named(RHEL)或sudo systemctl start bind9(Debian) - 若启动失败,查日志:
journalctl -u named -n 50 --no-pager或journalctl -u bind9 -n 50 - 常见卡点:SELinux 上下文错误(RHEL 执行
sudo restorecon -Rv /etc/named.conf /var/named/)、防火墙封 UDP 53(sudo firewall-cmd --add-service=dns --permanent && sudo firewall-cmd --reload)、监听地址遗漏、SOA serial 未更新或格式错误
验证成功后,用 dig @your-server-ip www.example.com 测试解析是否返回正确 A 记录。










