bind9主dns服务搭建核心是禁用递归、监听指定ip、定义master区域并配置正向解析文件,经named-checkconf与named-checkzone验证后reload生效,dig/host测试返回预期ip即成功。

在Linux中搭建本地BIND9主DNS服务,核心是让服务器能自主管理一个或多个域名的解析记录(比如 example.local),并对外提供权威应答。这不是做递归查询用的“上网DNS”,而是你说了算的“自家域名管家”。下面分三步讲清楚:安装、配置、验证。
安装BIND9并确认基础环境
不同发行版命令略有差异,但目标一致:装好named主程序、配套工具和文档。
- Ubuntu/Debian系统执行:
sudo apt update && sudo apt install bind9 bind9-utils bind9-doc -y - CentOS/RHEL/Rocky 8+执行:
sudo dnf install bind bind-utils -y - 安装后检查版本和状态:
named -v(看是否为9.16+稳定版)
sudo systemctl is-active bind9 或 sudo systemctl is-active named(应显示 active)
配置主DNS服务的关键文件
主DNS必须禁用递归、明确监听地址、定义区域,并提供可读写的正向区域文件。以Ubuntu为例(路径为/etc/bind/):
- 编辑 /etc/bind/named.conf.options,确保关键项如下:
recursion no;(主DNS不替别人查,必须关掉)listen-on port 53 { 127.0.0.1; 192.168.1.100; };(只监听本机及内网IP,别开any)allow-query { localhost; 192.168.1.0/24; };(只允许本地和内网客户端查) - 在 /etc/bind/named.conf.local 中添加你的域名区域声明:
zone "example.local" {<br> type master;<br> file "/etc/bind/zones/db.example.local";<br> notify yes;<br> }; - 创建区域目录与文件:
sudo mkdir -p /etc/bind/zones
sudo cp /etc/bind/db.local /etc/bind/zones/db.example.local
编辑该文件,把@ IN SOA localhost.改成@ IN SOA ns1.example.local. admin.example.local.,把@ IN NS localhost.改成@ IN NS ns1.example.local.,再加一条ns1 IN A 192.168.1.100和几条测试记录如www IN A 192.168.1.200
启动服务并验证解析是否生效
改完配置不能直接重启,先语法检查,再重载,最后实测。
- 检查配置语法是否正确:
sudo named-checkconf(无输出即通过)
sudo named-checkzone example.local /etc/bind/zones/db.example.local(应显示 OK) - 重载服务使配置生效:
sudo systemctl reload bind9(Ubuntu)或 sudo systemctl reload named(RHEL) - 本地测试:
dig @127.0.0.1 www.example.local A +short 应返回192.168.1.200
dig @192.168.1.100 ns1.example.local A +short 应返回服务器自身IP - 从局域网另一台机器测试:
修改其/etc/resolv.conf,首行为nameserver 192.168.1.100,然后运行host www.example.local或nslookup www.example.local
只要 dig/host 返回你填进去的IP,且没有 SERVFAIL 或 NXDOMAIN 错误,说明主DNS已正常工作。后续可加反向解析、TSIG密钥同步、日志细化等进阶功能,但基础权威服务已经跑起来了。











