在数字化时代,域名系统(DNS)扮演着互联网“电话簿”的角色,负责将我们易于记忆的域名(如www.google.com)翻译成机器能够理解的IP地址,虽然我们可以使用公共DNS服务,但在特定场景下,例如企业内网、家庭实验室或开发环境中,自行搭建一个DNS服务器能带来更高的控制力、更快的解析速度以及更强的隐私保护,Ubuntu作为一款广受欢迎且稳定可靠的Linux发行版,是搭建DNS服务器的理想选择,本文将详细介绍如何在Ubuntu上利用BIND9软件套件构建一个功能完善的DNS服务器。

准备工作与环境配置
在开始安装和配置之前,确保你的Ubuntu服务器已经满足以下基本条件,DNS服务器必须拥有一个静态的IP地址,因为客户端需要通过这个固定地址来找到它,如果服务器IP地址频繁变更,整个网络解析将会陷入混乱,假设我们的服务器IP地址为168.1.10。
保持系统软件包为最新版本是一个良好的习惯,打开终端,执行以下命令来更新系统:
sudo apt update sudo apt upgrade -y
更新完成后,我们就可以开始安装核心软件了,在DNS服务器领域,BIND(Berkeley Internet Name Domain)是最为流行和标准的软件,它提供了强大而灵活的DNS服务功能,安装BIND9非常简单:
sudo apt install bind9 -y
安装完成后,BIND9服务会自动启动,并开始使用默认配置进行监听,我们的任务就是修改这些配置,使其服务于我们自己的域名。
BIND9核心配置文件解析
BIND9的配置文件主要存放在/etc/bind/目录下,理解几个关键文件的作用是成功配置的第一步。
named.conf.options: 这是全局配置文件,用于设置DNS服务器的通用选项,例如监听的IP地址、允许查询的客户端范围、是否转发请求到其他DNS服务器等。named.conf.local: 这个文件用于定义我们自己管理的“区域”,也就是我们的域名,我们将声明哪些域名由这台服务器负责解析。- *`/etc/bind/db.
**: 这些是区域数据库文件,存储了具体的DNS记录。db.local是本地回环地址的解析模板,db.127`是反向解析的模板,我们将基于这些模板创建我们自己的区域文件。
创建正向解析区域
正向解析是指将域名解析为IP地址的过程,假设我们要为内网创建一个名为lan.example.com的域名。
第一步:在named.conf.local中声明区域
编辑该文件:
sudo nano /etc/bind/named.conf.local
在文件末尾添加以下内容:
zone "lan.example.com" {
type master;
file "/etc/bind/db.lan.example.com";
};
这段代码定义了一个名为lan.example.com的主区域,其配置信息存放在/etc/bind/db.lan.example.com文件中。
第二步:创建并编辑区域数据库文件

我们可以通过复制模板文件来快速创建我们自己的区域文件:
sudo cp /etc/bind/db.local /etc/bind/db.lan.example.com sudo nano /etc/bind/db.lan.example.com
打开文件后,你需要修改其中的记录,一个典型的区域文件包含以下几种重要记录类型:
| 记录类型 | 名称 | 用途 |
|---|---|---|
| SOA | 授权起始 | 标识区域的起点,包含管理信息 |
| NS | 名称服务器 | 指定负责该区域的DNS服务器 |
| A | 地址 | 将主机名映射到IPv4地址 |
| CNAME | 规范名称 | 为一个主机名创建别名 |
| MX | 邮件交换 | 指定处理该域名邮件的服务器 |
修改后的文件内容示例如下(注意修改序列号):
$TTL 604800
@ IN SOA ns.lan.example.com. admin.lan.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.lan.example.com.
@ IN A 192.168.1.10
ns IN A 192.168.1.10
server IN A 192.168.1.20
www IN CNAME server.lan.example.com.
创建反向解析区域
反向解析是将IP地址解析回域名,常用于网络诊断和安全验证。
第一步:在named.conf.local中声明反向区域
反向区域的名称是根据IP网段反向书写的,并以.in-addr.arpa对于168.1.0/24网段,其区域名为168.192.in-addr.arpa,在named.conf.local中添加:
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};
第二步:创建并编辑反向区域文件
sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1 sudo nano /etc/bind/db.192.168.1
如下,主要使用PTR(Pointer)记录:
$TTL 604800
@ IN SOA ns.lan.example.com. admin.lan.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.lan.example.com.
10 IN PTR ns.lan.example.com.
20 IN PTR server.lan.example.com.
检查配置与启动服务
在应用新配置之前,务必检查语法错误,这能避免很多不必要的麻烦。
- 检查主配置文件:
sudo named-checkconf
- 检查区域文件:
sudo named-checkzone lan.example.com /etc/bind/db.lan.example.com sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
如果命令没有输出任何信息,表示配置正确,重启BIND9服务使配置生效:
sudo systemctl restart bind9 sudo systemctl enable bind9
使用sudo systemctl status bind9可以查看服务运行状态,确保其正常启动。

客户端测试与验证
将网络内其他计算机的DNS服务器地址指向168.1.10,然后在这些客户端上使用nslookup或dig等工具进行测试。
-
正向解析测试:
nslookup server.lan.example.com
应返回
168.1.20。 -
反向解析测试:
nslookup 192.168.1.20
应返回
server.lan.example.com。
如果测试结果符合预期,恭喜你,你的Ubuntu DNS服务器已经成功搭建并运行了。
相关问答FAQs
Q1: 为什么我的DNS服务器无法解析外部域名(如google.com)?
A: 这是因为你的DNS服务器目前只知道自己管理的内部区域(lan.example.com),对于外部请求,它不知道该去问谁,你需要配置“转发器”,编辑/etc/bind/named.conf.options文件,在options {}块内添加以下内容:
forwarders {
8.8.8.8;
1.1.1.1;
};
这样,当你的服务器收到无法解析的请求时,会将其转发给Google或Cloudflare的公共DNS服务器,保存后重启BIND9服务即可。
Q2: 如何管理DNS记录,比如添加一台新主机?
A: 管理DNS记录非常直接,使用sudo nano编辑对应的区域文件(正向或反向),要添加一台IP为168.1.30、主机名为workstation的新电脑,你需要在/etc/bind/db.lan.example.com中添加一行workstation IN A 192.168.1.30;,并在/etc/bind/db.192.168.1中添加一行30 IN PTR workstation.lan.example.com.;。最重要的一步是,在两个文件中都将SOA记录中的Serial序列号加一(例如从3改为4),这会通知DNS服务器区域文件已更新,使用sudo systemctl reload bind9平滑重载配置,无需中断服务即可生效。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/258557.html