搭建DNS服务器核心是部署递归缓存服务,首选BIND9,需配置监听所有IP、允许内网查询、开启递归、设置上游转发,并可选配内网正向解析,最后确保防火墙与权限正确。

搭建 DNS 服务器核心是部署一个能响应域名查询的递归缓存服务,常见于局域网或家庭环境。重点不是替代公共 DNS,而是解决内网解析、加速常用域名、屏蔽广告等实际需求。BIND9 是最成熟稳定的选择,以下以 CentOS 7/8 或 Ubuntu 20.04+ 为例,分步说明。
安装 BIND9 并启动服务
确保系统已更新,用对应包管理器安装 BIND 及配套工具:
-
CentOS/RHEL:
sudo yum install -y bind bind-utils;启用并启动:sudo systemctl enable named && sudo systemctl start named -
Ubuntu/Debian:
sudo apt update && sudo apt install -y bind9 bind9utils;启用并启动:sudo systemctl enable bind9 && sudo systemctl start bind9 - 验证是否运行:
sudo systemctl status named(或bind9),再执行named -v确认版本
修改主配置文件 /etc/named.conf
关键是要让服务监听本机所有 IP,并允许客户端查询。编辑后务必检查语法:
- 将
listen-on port 53 { localhost; };改为listen-on port 53 { any; }; - 注释掉或删除
listen-on-v6行(若不需 IPv6) - 将
allow-query { localhost; };改为allow-query { any; };(生产环境建议限制为内网段,如{ 192.168.1.0/24; };) - 开启递归:
recursion yes;(这是本地缓存 DNS 的核心) - 添加上游转发(可选但推荐):
forwarders { 223.5.5.5; 119.29.29.29; };(阿里云和腾讯 DNS,国内解析更稳) - 保存后运行
named-checkconf检查配置语法,无输出即表示正确
配置正向解析(内网域名映射)
若需解析 nas.local、print.local 等内部域名,需定义区域:
- 在
/etc/named.rfc1912.zones末尾追加:
type master;
file "local.zone";
allow-update { none; };
};
- 复制模板创建数据文件:
sudo cp -a /var/named/named.localhost /var/named/local.zone - 编辑
/var/named/local.zone,替换 SOA 和 NS 记录中的域名,再添加 A 记录,例如:
@ IN SOA local. root.local. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS local.
nas IN A 192.168.1.100
print IN A 192.168.1.101
- 保存后运行
named-checkzone local /var/named/local.zone验证格式 - 重启服务:
sudo systemctl restart named
客户端测试与生效
配置完成后,客户端需指向该 DNS 服务器 IP:
- Linux/macOS:修改
/etc/resolv.conf,第一行写nameserver 192.168.1.10(替换成你的 DNS 服务器 IP) - Windows:网络适配器 IPv4 属性中,首选 DNS 填服务器 IP
- 测试命令:
nslookup nas.local应返回192.168.1.100;dig baidu.com应能正常返回公网 IP - 首次查询可能稍慢(需递归获取),后续相同域名会缓存,响应变快
不复杂但容易忽略细节,比如防火墙未放行 UDP 53 端口、SELinux 未设为 permissive、区域文件权限不对(应属 named:named),这些都可能导致服务看似运行却无法响应。











