在当今的互联网架构中,域名系统扮演着至关重要的角色,它如同网络的“电话簿”,将人类易于记忆的域名(如www.example.com)翻译成机器能够识别的IP地址(如192.168.1.10),虽然我们可以使用公共DNS服务(如8.8.8.8或1.1.1.1),但在特定场景下,例如企业内网、开发测试环境或个人学习,搭建一台专属的DNS服务器会带来更高的灵活性和控制力,Ubuntu,凭借其稳定性和强大的社区支持,成为搭建DNS服务器的理想选择,本文将详细介绍如何在Ubuntu系统上,使用业界标准的BIND9软件来配置一台功能完整的DNS服务器。

准备工作
在开始之前,请确保您已经具备以下条件:
- 一台Ubuntu服务器:推荐使用LTS(长期支持)版本,如Ubuntu 20.04或22.04。
- 静态IP地址:DNS服务器必须拥有一个固定的IP地址,否则客户端将无法稳定地找到它,假设我们的服务器IP为
168.1.5。 - Sudo权限:您需要一个具有管理员权限的用户账户来安装和配置软件。
通过SSH登录到您的Ubuntu服务器,并执行以下命令更新系统软件包列表和升级已安装的软件:
sudo apt update sudo apt upgrade -y
安装BIND9
BIND (Berkeley Internet Name Domain) 是目前互联网上使用最广泛的DNS软件,在Ubuntu上安装BIND9及其相关工具非常简单,只需一条命令:
sudo apt install bind9 bind9utils bind9-doc -y
bind9:核心的DNS服务软件。bind9utils:包含一系列有用的DNS诊断和管理工具。bind9-doc:提供BIND的官方文档,可供深入查阅。
安装完成后,BIND9服务会自动启动,您可以使用 sudo systemctl status bind9 命令来检查其运行状态。
配置BIND9
BIND9的配置文件主要位于/etc/bind/目录下,我们将主要修改两个部分:主配置文件和区域文件。
配置主文件
我们将在/etc/bind/named.conf.local文件中定义我们自己的DNS区域,这个文件专门用于本地配置,不会与系统自带的默认配置冲突。
使用文本编辑器打开该文件:
sudo nano /etc/bind/named.conf.local
在文件末尾添加以下内容,分别定义一个正向查找区域和一个反向查找区域:
// 正向查找区域:域名 -> IP地址
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-update { none; };
};
// 反向查找区域:IP地址 -> 域名
// 注意:192.168.1.in-addr.arpa 对应的是 192.168.1.0 网段
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
allow-update { none; };
};
这里我们创建了一个名为example.com的域,并指定了其对应的正向解析文件和反向解析文件。
创建正向查找区域文件
正向查找文件负责将域名映射到IP地址,我们可以从模板文件复制一份并进行修改:
sudo cp /etc/bind/db.local /etc/bind/db.example.com
现在编辑新创建的文件:
sudo nano /etc/bind/db.example.com
如下,请根据您的实际情况替换相关值:

$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
2 ; Serial, 每次修改后请递增此数字
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
@ IN A 192.168.1.5
ns1 IN A 192.168.1.5
www IN A 192.168.1.10
mail IN A 192.168.1.20
api IN CNAME www.example.com.
常用记录类型说明:
| 记录类型 | 名称 | 功能描述 |
|---|---|---|
| SOA | 授权起始 | 标志着一个区域的开始,包含区域管理者的邮箱和序列号等关键信息。 |
| NS | 名称服务器 | 指定负责该域的DNS服务器。 |
| A | 地址 | 将域名映射到一个IPv4地址。 |
| CNAME | 别名 | 将一个域名指向另一个域名(规范名称)。 |
| MX | 邮件交换器 | 指定接收该域电子邮件的服务器。 |
创建反向查找区域文件
反向查找文件负责将IP地址映射回域名,同样,我们从模板复制:
sudo cp /etc/bind/db.127 /etc/bind/db.192.168.1
编辑此文件:
sudo nano /etc/bind/db.192.168.1
如下:
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
5 IN PTR ns1.example.com.
10 IN PTR www.example.com.
20 IN PTR mail.example.com.
这里的关键是PTR(Pointer)记录,它将IP地址的最后一部分(如5、10)映射回完整的主机名。
检查配置与重启服务
在应用更改之前,最好先检查配置文件的语法,避免因错误导致服务无法启动。
-
检查主配置文件语法:
sudo named-checkconf
如果没有输出任何信息,表示语法正确。
-
检查区域文件语法:
sudo named-checkzone example.com /etc/bind/db.example.com sudo named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192.168.1
如果一切正常,您会看到 “OK” 的提示。
确认无误后,重启BIND9服务以使配置生效:
sudo systemctl restart bind9
测试DNS服务器
使用dig或nslookup工具来测试我们的DNS服务器是否工作正常。

-
测试正向解析:
dig @localhost www.example.com
在输出中,您应该能看到
ANSWER SECTION部分显示www.example.com对应的IP地址是168.1.10。 -
测试反向解析:
dig -x 192.168.1.10 @localhost
在输出中,您应该能看到
ANSWER SECTION部分显示168.1.10对应的域名是www.example.com。
至此,一台基于Ubuntu和BIND9的基础DNS服务器已经成功搭建并配置完成,它可以在您的私有网络中提供域名解析服务,为后续的网络应用和服务部署打下坚实的基础。
相关问答FAQs
问题1:我的DNS服务器无法解析外部域名(如google.com),怎么办?
解答:这是因为我们目前配置的DNS服务器是一个“权威服务器”,它只对自己定义的区域(如example.com)有解析权限,并不知道如何查询互联网上的其他域名,要让它能够解析外部域名,需要将其配置为“递归解析器”或设置“转发器”,最简单的方法是配置转发器,编辑/etc/bind/named.conf.options文件,在options { ... };块内添加以下内容:
forwarders {
8.8.8.8;
1.1.1.1;
};
这样,当服务器遇到无法解析的请求时,会将其转发给Google或Cloudflare的公共DNS服务器,保存文件后重启BIND9服务即可。
问题2:如何让局域网内的其他计算机使用我新搭建的这台DNS服务器?
解答:您需要在客户端计算机上修改网络设置,将其DNS服务器地址指向您新搭建的DNS服务器的IP地址(即168.1.5)。
- 在Linux/Ubuntu客户端上:可以编辑
/etc/netplan/目录下的网络配置文件,在nameservers部分添加服务器的IP,然后运行sudo netplan apply,或者临时修改/etc/resolv.conf文件(注意:此方法在重启后可能失效)。 - 在Windows客户端上:进入“控制面板” > “网络和 Internet” > “网络和共享中心” > “更改适配器设置”,右键点击当前网络连接,选择“属性”,找到并双击“Internet 协议版本 4 (TCP/IPv4)”,在“使用下面的DNS服务器地址”中填入
168.1.5。
修改后,客户端就可以通过这台内网DNS服务器来解析example.com域下的所有主机名了。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/250334.html