Ubuntu如何搭建DNS服务器,实现内网域名解析?

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

Ubuntu如何搭建DNS服务器,实现内网域名解析?

准备工作

在开始之前,请确保您已经具备以下条件:

  1. 一台Ubuntu服务器:推荐使用LTS(长期支持)版本,如Ubuntu 20.04或22.04。
  2. 静态IP地址:DNS服务器必须拥有一个固定的IP地址,否则客户端将无法稳定地找到它,假设我们的服务器IP为168.1.5
  3. 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

如下,请根据您的实际情况替换相关值:

Ubuntu如何搭建DNS服务器,实现内网域名解析?

$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地址的最后一部分(如510)映射回完整的主机名。

检查配置与重启服务

在应用更改之前,最好先检查配置文件的语法,避免因错误导致服务无法启动。

  1. 检查主配置文件语法

    sudo named-checkconf

    如果没有输出任何信息,表示语法正确。

  2. 检查区域文件语法

    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服务器

使用dignslookup工具来测试我们的DNS服务器是否工作正常。

Ubuntu如何搭建DNS服务器,实现内网域名解析?

  1. 测试正向解析

    dig @localhost www.example.com

    在输出中,您应该能看到ANSWER SECTION部分显示www.example.com对应的IP地址是168.1.10

  2. 测试反向解析

    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

Like (0)
小编小编
Previous 2025年10月1日 22:50
Next 2025年10月1日 23:04

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注