如何在Ubuntu上使用Bind搭建局域网DNS服务器?

来源:编程网作者:蚂蚁头衔:草根站长
导读:本期聚焦于蚂蚁创作的《如何在Ubuntu上使用Bind搭建局域网DNS服务器?》,敬请观看详情。局域网内设备和服务逐渐增多,依赖IP地址访问既不便也容易出错。Bind作为经典的DNS服务软件,可以在Ubuntu上快速构建一套自主可控的域名解析系统。本文从安装bind9开始,展示正向解析区域和反向解析区域的配置方法,并补充转发器、安全选项以及named-checkconf、named-checkzone等排错工具的使用。完成配置后,内网主机只需输入自定义域名即可访问对应服务,无需依赖公网DNS或手动维护hosts文件。文中步骤适合Debian系发行版,操作门槛低,配置文件结构清晰,读者可以结合自身网络环境调整域名、网段和记录内容。测试环节介绍了dig与nslookup命令,帮助确认解析是否生效。整个过程有助于理解DNS解析流程,也为后续搭建内网服务发现、测试环境域名隔离等应用打下基础。

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

如何在Ubuntu上使用Bind搭建局域网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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。