域名系统DNS负责将人类易记的域名转换为机器可读的IP地址。在没有内网DNS的情况下,访问内网服务器需要记住类似192.168.1.10这样的地址,一旦服务增多,管理成本会迅速上升。Ubuntu软件源中的Bind9是一款成熟稳定的DNS服务端软件,通过简单配置即可为局域网提供域名解析、反向查询和转发功能。

一、安装Bind并理解配置文件结构
首先更新软件包索引,然后安装bind9主程序以及常用工具和文档。安装完成后,Ubuntu会自动创建named系统服务,可以通过systemctl查看运行状态。如果状态不是active,需要根据systemctl和日志提示排查。
sudo apt update sudo apt install bind9 bind9utils bind9-doc sudo systemctl status named
Bind的主配置文件是/etc/bind/named.conf,该文件通过include引入named.conf.options、named.conf.local和named.conf.default-zones等文件。named.conf.options主要用于全局选项,例如监听地址、转发器、递归限制;named.conf.local用于声明自定义区域;named.conf.default-zones则包含localhost、127.0.0.1等默认区域,一般不需要修改。这种拆分方式使配置更有条理,排错时也能快速定位问题所在。
区域数据文件默认可以放在/etc/bind目录下,但建议单独创建zones子目录统一管理,例如/etc/bind/zones。Ubuntu的AppArmor默认允许Bind访问/var/lib/bind和/var/cache/bind等路径,如果自定义目录不在允许范围内,可能导致服务无法读取区域文件。较为稳妥的做法是把区域文件放在/etc/bind/zones,并在必要时调整AppArmor配置。安装后可以先不修改任何内容,确认服务能够正常启动,再进行区域配置。
二、配置正向解析区域
正向解析是把域名解析为IP地址。假设局域网使用的域名为example.local,网段为192.168.1.0/24,DNS服务器IP为192.168.1.2。首先编辑/etc/bind/named.conf.local,在文件中添加一个zone声明,类型为master,并指定区域文件路径。
sudo mkdir -p /etc/bind/zones sudo nano /etc/bind/named.conf.local
在named.conf.local中加入以下内容:
zone "example.local" {
type master;
file "/etc/bind/zones/db.example.local";
};
接下来创建区域文件。可以复制系统自带的db.local模板,再根据实际需求修改内容。db.local位于/etc/bind目录,使用cp命令复制为/etc/bind/zones/db.example.local,然后编辑该文件。区域文件中$TTL设置默认缓存时间,SOA记录包含主DNS服务器、管理员邮箱、序列号和刷新重试参数。NS记录指定该区域的权威服务器,A记录把域名指向IP地址,CNAME记录可用于别名。
$TTL 604800
@ IN SOA ns1.example.local. admin.example.local. (
2025010101 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.local.
ns1 IN A 192.168.1.2
server IN A 192.168.1.10
nas IN A 192.168.1.20
www IN CNAME server
SOA记录中的管理员邮箱admin.example.local.实际表示admin@example.local,注意结尾的点号不能省略。序列号通常使用日期加序号的形式,每次修改区域文件后需要递增序列号,否则辅助服务器或缓存可能不会及时获取更新。本例中只有一台主服务器,序列号影响相对较小,但养成递增习惯有利于后续扩展。
保存文件后,使用named-checkconf检查主配置文件语法,使用named-checkzone检查区域文件语法和数据一致性。这两个工具能够在重启服务前发现绝大多数拼写错误、漏掉的点号或非法记录类型。若检查通过,重启named服务或使用rndc reload重新加载区域。
sudo named-checkconf sudo named-checkzone example.local /etc/bind/zones/db.example.local sudo systemctl restart named
三、配置反向解析区域与转发器
反向解析根据IP地址查询对应的域名,在日志分析、邮件服务验证和内网排错中比较常见。反向区域名需要将IP地址前三段倒序,并以in-addr.arpa结尾。对于192.168.1.0/24网段,区域名就是1.168.192.in-addr.arpa。继续编辑named.conf.local,增加反向zone声明,并在区域文件中添加PTR记录。
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168.1";
};
反向区域文件可以从db.127模板复制。PTR记录将IP地址最后一段映射到域名,例如10对应server.example.local.,20对应nas.example.local.。同样需要注意域名结尾的点号,否则Bind会自动追加区域名,导致记录变成错误形式。
$TTL 604800
@ IN SOA ns1.example.local. admin.example.local. (
2025010101 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.local.
2 IN PTR ns1.example.local.
10 IN PTR server.example.local.
20 IN PTR nas.example.local.
如果希望局域网客户端能够通过该DNS服务器解析公网域名,还需要配置转发器。编辑/etc/bind/named.conf.options,在options块中增加forwarders列表,指定公共DNS地址,例如运营商DNS或1.1.1.1、8.8.8.8。还可以设置forward only,让服务器只转发而不自行递归,减少外部查询链路。allow-query参数可以限制允许查询的客户端网段,默认通常允许本机,需要根据实际局域网调整。
options {
directory "/var/cache/bind";
recursion yes;
allow-query { 192.168.1.0/24; 127.0.0.1; };
forwarders {
1.1.1.1;
8.8.8.8;
};
forward only;
dnssec-validation auto;
listen-on { 192.168.1.2; 127.0.0.1; };
listen-on-v6 { none; };
};
完成配置后再次使用named-checkconf检查,并用named-checkzone检查反向区域。确认无误后重启服务。如果防火墙开启53端口限制,需要放行UDP和TCP协议,因为DNS查询默认使用UDP 53,区域传输和较大响应可能使用TCP 53。Ubuntu自带ufw可以执行sudo ufw allow 53/tcp和sudo ufw allow 53/udp。
四、客户端测试与故障排查
将局域网内一台测试机的DNS服务器地址设置为Ubuntu服务器的IP,例如192.168.1.2。Linux客户端可以编辑/etc/resolv.conf临时验证,Windows客户端在网卡属性中修改IPv4 DNS。设置完成后,使用dig或nslookup命令查询之前配置的域名。
dig server.example.local @192.168.1.2 nslookup 192.168.1.10 192.168.1.2
若正向解析返回正确的A记录,反向查询返回对应的PTR记录,说明Bind服务运行正常。dig命令可以显示响应详情,包括flags、ANSWER SECTION和查询耗时,有助于判断问题发生在服务端还是网络链路。nslookup操作更简单,适合快速验证。
解析失败时,优先检查/var/log/syslog中与named相关的日志,使用journalctl -u named -f可以实时跟踪服务输出。常见错误包括区域文件路径错误、点号缺失、序列号不递增、named.conf语法拼写错误等。named-checkconf和named-checkzone能拦截大部分配置问题,但如果区域文件路径不受AppArmor保护,可能只在加载时记录拒绝访问,需要结合日志确认。客户端方面还需检查53端口连通性,使用nc -uzv 192.168.1.2 53或telnet进行测试。
sudo journalctl -u named -f sudo tail -f /var/log/syslog | grep named nc -uzv 192.168.1.2 53
确定配置改动生效后,建议将客户端的DNS地址固化到网络配置中,避免重启后丢失。对于Windows域环境或需要统一管理的网络,可以通过DHCP服务器下发DNS选项,让所有客户端自动获得内网DNS地址。此外,可以定期备份区域文件,特别是在添加新主机记录时,先复制备份再修改,降低误操作风险。
至此,Ubuntu上的Bind DNS服务器已经能够为局域网提供正向解析、反向解析和公网转发服务。后续如果要支持多个域名,只需在named.conf.local中增加新的zone声明,并创建对应区域文件即可。对于更复杂的需求,还可以研究主从同步、动态更新和DNSSEC等高级特性,但当前配置已能覆盖大多数内网场景。
Ubuntu DNS服务器Bind配置域名解析修改时间:2026-08-22 19:39:36