如何在 Ubuntu 14.04 上将 BIND 配置为私网 DNS 服务器如何在 Ubuntu 14.04 上将 BIND 配置为私网 DNS 服务器如何在 Ubuntu 14.04 上将 BIND 配置为私网 DNS 服务器如何在 Ubuntu 14.04 上将 BIND 配置为私网 DNS 服务器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上将 BIND 配置为私网 DNS 服务器

介绍

管理服务器配置和基础设施的一个重要部分包括通过设置适当的域名系统 (DNS) 维护一种按名称查找网络接口和 IP 地址的简单方法。使用完全限定的域名 (FQDN) 而不是 IP 地址来指定网络地址可以简化服务和应用程序的配置,并提高配置文件的可维护性。为您的专用网络设置您自己的 DNS 是改进服务器管理的好方法。

在本教程中,我们将介绍如何在 Ubuntu 14.04 上使用 BIND 名称服务器软件 (BIND9) 设置内部 DNS 服务器,您的虚拟专用服务器 (VPS) 可以使用它来解析私有主机名和私有 IP地址。这提供了一种管理内部主机名和私有 IP 地址的集中方式,当您的环境扩展到多个主机时,这是必不可少的。

本教程的 CentOS 版本可以在这里找到。

先决条件

要完成本教程,您需要具备以下条件:

  • 一些服务器在同一个数据中心运行并启用了私有网络
  • 用作主 DNS 服务器的新 VPS,ns1
  • 可选:用作辅助 DNS 服务器的新 VPS,ns2
  • 对上述所有内容的根访问权限(此处为第 1-4 步)

如果您不熟悉 DNS 概念,建议您至少阅读我们的 DNS 管理简介的前三部分。

示例主机

出于示例目的,我们将假设以下内容:

  • 我们有两个现有的 VPS,分别称为“host1”和“host2”
  • 两个 VPS 都存在于 nyc3 数据中心
  • 两个 VPS 都启用了私有网络(并且都在 10.128.0.0/16 子网上)
  • 这两个 VPS 都以某种方式与我们在 \example.com 上运行的 Web 应用程序相关

有了这些假设,我们决定使用使用 \host1.nyc3.example.com 的命名方案是有意义的。请参阅下表相关详细信息:

Host Role Private FQDN Private IP Address
host1 Generic Host 1 host1.nyc3.example.com 10.128.100.101
host2 Generic Host 2 host2.nyc3.example.com 10.128.200.102

注意:您现有的设置会有所不同,但示例名称和 IP 地址将用于演示如何配置 DNS 服务器以提供正常运行的内部 DNS。通过将主机名和私有 IP 地址替换为您自己的,您应该能够轻松地使此设置适应您自己的环境。在您的命名方案中没有必要使用数据中心的区域名称,但我们在这里使用它来表示这些主机属于特定数据中心的专用网络。如果您使用多个数据中心,则可以在每个数据中心内设置一个内部 DNS。

我们的目标

到本教程结束时,我们将拥有一个主 DNS 服务器 ns1 和一个可选的辅助 DNS 服务器 ns2,它将用作备份。

这是一个包含示例名称和 IP 地址的表格:

Host Role Private FQDN Private IP Address
ns1 Primary DNS Server ns1.nyc3.example.com 10.128.10.11
ns2 Secondary DNS Server ns2.nyc3.example.com 10.128.20.12

让我们开始安装我们的主 DNS 服务器 ns1。

在 DNS 服务器上安装 BIND

注意:以红色 突出显示的文本很重要!它通常用于表示需要用您自己的设置替换的东西,或者应该修改或添加到配置文件中的东西。例如,如果您看到类似 host1.nyc3.example.com 的内容,请将其替换为您自己服务器的 FQDN。同样,如果您看到 host1_private_IP,请将其替换为您自己服务器的私有 IP 地址。

在两个 DNS 服务器上,ns1 和 ns2,更新 apt:

  1. sudo apt-get update

现在安装 BIND:

  1. sudo apt-get install bind9 bind9utils bind9-doc

IPv4模式

在继续之前,让我们将 BIND 设置为 IPv4 模式。在两台服务器上,编辑 bind9 服务参数文件:

  1. sudo vi /etc/default/bind9

将 \-4 添加到 OPTIONS 变量。它应该如下所示:

OPTIONS="-4 -u bind"

保存并退出。

现在已经安装了 BIND,让我们配置主 DNS 服务器。

配置主 DNS 服务器

BIND 的配置由多个文件组成,这些文件来自主配置文件 named.conf。这些文件名以 \named 开头,因为这是 BIND 运行的进程的名称。我们将从配置选项文件开始。

配置选项文件

在 ns1 上,打开 named.conf.options 文件进行编辑:

  1. sudo vi /etc/bind/named.conf.options

在现有的 options 块之上,创建一个名为 \trusted 的新 ACL 块。我们将在此处定义我们将允许递归 DNS 查询的客户端列表(即您的服务器位于相同的数据中心作为 ns1)。使用我们的示例私有 IP 地址,我们将添加 ns1、ns2、host1 和 host2 到我们值得信赖的客户名单:

acl "trusted" {
        10.128.10.11;    # ns1 - can be set to localhost
        10.128.20.12;    # ns2
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

现在我们有了受信任的 DNS 客户端列表,我们将要编辑 options 块。目前,块的开头如下所示:

options {
        directory "/var/cache/bind";
...
}

在 directory 指令下方,添加突出显示的配置行(并替换为正确的 ns1 IP 地址),使其看起来像这样:

options {
        directory "/var/cache/bind";
        
        recursion yes;                 # enables resursive queries
        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network only
        allow-transfer { none; };      # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...
};

现在保存并退出 named.conf.options。上面的配置指定只有您自己的服务器(“受信任的”服务器)才能查询您的 DNS 服务器。

接下来,我们将配置本地文件,以指定我们的 DNS 区域。

配置本地文件

在 ns1 上,打开 named.conf.local 文件进行编辑:

  1. sudo vi /etc/bind/named.conf.local

除了一些评论,该文件应该是空的。在这里,我们将指定我们的正向和反向区域。

使用以下行添加前向区域(用您自己的区域名称替换):

zone "nyc3.example.com" {
    type master;
    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
    allow-transfer { 10.128.20.12; };         # ns2 private IP address - secondary
};

假设我们的私有子网是10.128.0.0/16,通过以下几行添加反向区域(注意我们的反向区域名称以\128.10开头,这是\10.128的八位字节反转”):

zone "128.10.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.10.128";  # 10.128.0.0/16 subnet
    allow-transfer { 10.128.20.12; };  # ns2 private IP address - secondary
};

如果您的服务器跨越多个私有子网但位于同一数据中心,请务必为每个不同的子网指定一个额外的区域和区域文件。添加完所有所需区域后,保存并退出 named.conf.local 文件。

现在我们的区域在 BIND 中指定了,我们需要创建相应的正向和反向区域文件。

创建前向区文件

正向区域文件是我们为正向 DNS 查找定义 DNS 记录的地方。也就是说,当 DNS 收到名称查询时,例如“host1.nyc3.example.com”,它会在正向区域文件中查找以解析 host1 对应的私有 IP 地址。

让我们创建区域文件所在的目录。根据我们的 named.conf.local 配置,该位置应该是 /etc/bind/zones:

  1. sudo mkdir /etc/bind/zones

我们将以示例 db.local 区域文件为基础创建前向区域文件。使用以下命令将其复制到正确的位置:

  1. cd /etc/bind/zones
  2. sudo cp ../db.local ./db.nyc3.example.com

现在让我们编辑我们的前向区域文件:

  1. sudo vi /etc/bind/zones/db.nyc3.example.com

最初,它将类似于以下内容:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
@       IN      A       127.0.0.1       ; delete this line
@       IN      AAAA    ::1             ; delete this line

首先,您需要编辑 SOA 记录。将第一个 \localhost 替换为 ns1 的 FQDN,然后将 \root.localhost 替换为 \admin.nyc3.example.com。此外,每次编辑区域文件时,在重新启动 named 进程之前,您应该增加 serial 值——我们会将其增加到 \3。它应该看起来像这样:

@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

现在删除文件末尾的三个记录(在 SOA 记录之后)。如果您不确定要删除哪些行,它们会在上面标有“删除此行”注释。

在文件末尾,使用以下行添加您的名称服务器记录(将名称替换为您自己的名称)。请注意,第二列指定这些是 \NS 记录:

; name servers - NS records
    IN      NS      ns1.nyc3.example.com.
    IN      NS      ns2.nyc3.example.com.

然后为属于该区域的主机添加 A 记录。这包括名称以“.nyc3.example.com”结尾的任何服务器(替换名称和私有 IP 地址)。使用我们的示例名称和私有 IP 地址,我们将为 ns1 添加 A 记录、ns2、host1 和 host2 像这样:

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

保存并退出 db.nyc3.example.com 文件。

我们的最终示例前向区域文件如下所示:

$TTL    604800
@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
			      3		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
; name servers - NS records
     IN      NS      ns1.nyc3.example.com.
     IN      NS      ns2.nyc3.example.com.

; name servers - A records
ns1.nyc3.example.com.          IN      A       10.128.10.11
ns2.nyc3.example.com.          IN      A       10.128.20.12

; 10.128.0.0/16 - A records
host1.nyc3.example.com.        IN      A      10.128.100.101
host2.nyc3.example.com.        IN      A      10.128.200.102

现在让我们转到反向区域文件。

创建反向区域文件

反向区域文件是我们为反向 DNS 查找定义 DNS PTR 记录的地方。也就是说,当 DNS 收到 IP 地址查询时,例如“10.128.100.101”,它会在反向区域文件中查找以解析相应的 FQDN,“host1.nyc3.example.com”这个案例。

在 ns1 上,为 named.conf.local 文件中指定的每个反向区域创建一个反向区域文件。我们的反向区域文件将基于示例 db.127 区域文件。使用以下命令将其复制到正确的位置(替换目标文件名,使其与您的反向区域定义匹配):

  1. cd /etc/bind/zones
  2. sudo cp ../db.127 ./db.10.128

编辑与 named.conf.local 中定义的反向区域相对应的反向区域文件:

  1. sudo vi /etc/bind/zones/db.10.128

最初,它将类似于以下内容:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.      ; delete this line
1.0.0   IN      PTR     localhost.      ; delete this line

以与前向区域文件相同的方式,您需要编辑 SOA 记录并增加 serial 值。它应该看起来像这样:

@       IN      SOA     ns1.nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial

现在删除文件末尾的两条记录(在 SOA 记录之后)。如果您不确定要删除哪些行,它们会在上面标有“删除此行”注释。

在文件末尾,使用以下行添加您的名称服务器记录(将名称替换为您自己的名称)。请注意,第二列指定这些是 \NS 记录:

; name servers - NS records
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

然后为其 IP 地址位于您正在编辑的区域文件的子网上的所有服务器添加 PTR 记录。在我们的示例中,这包括我们所有的主机,因为它们都位于 10.128.0.0/16 子网上。请注意,第一列由倒序排列的服务器私有 IP 地址的最后两个八位字节组成。请务必替换名称和私有 IP 地址以匹配您的服务器:

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

保存并退出反向区域文件(如果您需要添加更多反向区域文件,请重复此部分)。

我们的最终示例反向区域文件如下所示:

$TTL    604800
@       IN      SOA     nyc3.example.com. admin.nyc3.example.com. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers
      IN      NS      ns1.nyc3.example.com.
      IN      NS      ns2.nyc3.example.com.

; PTR Records
11.10   IN      PTR     ns1.nyc3.example.com.    ; 10.128.10.11
12.20   IN      PTR     ns2.nyc3.example.com.    ; 10.128.20.12
101.100 IN      PTR     host1.nyc3.example.com.  ; 10.128.100.101
102.200 IN      PTR     host2.nyc3.example.com.  ; 10.128.200.102

检查 BIND 配置语法

运行以下命令来检查 named.conf* 文件的语法:

  1. sudo named-checkconf

如果您命名的配置文件没有语法错误,您将返回到您的 shell 提示符并且看不到任何错误消息。如果您的配置文件有问题,请查看错误消息和配置主 DNS 服务器部分,然后重试 named-checkconf。

named-checkzone 命令可用于检查区域文件的正确性。它的第一个参数指定一个区域名称,第二个参数指定相应的区域文件,这两个参数都在 named.conf.local 中定义。

例如,要检查 \nyc3.example.com 前向区域配置,请运行以下命令(更改名称以匹配您的前向区域和文件):

  1. sudo named-checkzone nyc3.example.com db.nyc3.example.com

并检查 \128.10.in-addr.arpa” 反向区域配置,运行以下命令(更改数字以匹配您的反向区域和文件):

  1. sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

当您的所有配置和区域文件都没有错误时,您应该准备好重新启动 BIND 服务。

重启绑定

重新启动绑定:

  1. sudo service bind9 restart

您的主 DNS 服务器现已设置并准备好响应 DNS 查询。让我们继续创建辅助 DNS 服务器。

配置辅助 DNS 服务器

在大多数环境中,最好设置一个辅助 DNS 服务器,以便在主服务器不可用时响应请求。幸运的是,辅助 DNS 服务器更容易配置。

在 ns2 上,编辑 named.conf.options 文件:

  1. sudo vi /etc/bind/named.conf.options

在文件的顶部,添加带有所有受信任服务器的私有 IP 地址的 ACL:

acl "trusted" {
        10.128.10.11;   # ns1
        10.128.20.12;   # ns2 - can be set to localhost
        10.128.100.101;  # host1
        10.128.200.102;  # host2
};

在 directory 指令下方,添加以下行:

        recursion yes;
        allow-recursion { trusted; };
        listen-on { 10.128.20.12; };      # ns2 private IP address
        allow-transfer { none; };          # disable zone transfers by default

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

保存并退出 named.conf.options。这个文件看起来应该与 ns1 的 named.conf.options 文件完全一样,只是它应该被配置为监听 ns2 的私有 IP 地址.

现在编辑 named.conf.local 文件:

  1. sudo vi /etc/bind/named.conf.local

定义与主 DNS 服务器上的主区域相对应的从属区域。注意类型是\slave,文件中没有路径,还有一个masters指令,应该设置为主DNS服务器的私有IP。如果定义了多个reverse zone主 DNS 服务器,请确保将它们全部添加到此处:

zone "nyc3.example.com" {
    type slave;
    file "slaves/db.nyc3.example.com";
    masters { 10.128.10.11; };  # ns1 private IP
};

zone "128.10.in-addr.arpa" {
    type slave;
    file "slaves/db.10.128";
    masters { 10.128.10.11; };  # ns1 private IP
};

现在保存并退出 named.conf.local。

运行以下命令来检查配置文件的有效性:

  1. sudo named-checkconf

签出后,重新启动绑定

  1. sudo service bind9 restart

现在您拥有用于专用网络名称和 IP 地址解析的主要和次要 DNS 服务器。现在您必须配置您的服务器以使用您的私有 DNS 服务器。

配置 DNS 客户端

在“受信任的”ACL 中的所有服务器都可以查询您的 DNS 服务器之前,您必须将它们中的每一个配置为使用 ns1 和 ns2 作为名称服务器。此过程因人而异在 OS 上,但对于大多数 Linux 发行版,它涉及将您的名称服务器添加到 /etc/resolv.conf 文件中。

Ubuntu 客户端

在 Ubuntu 和 Debian Linux VPS 上,您可以编辑 head 文件,该文件在启动时添加到 resolv.conf 之前:

  1. sudo vi /etc/resolvconf/resolv.conf.d/head

将以下行添加到文件中(替换为您的私有域,以及 ns1 和 ns2 私有 IP 地址):

search nyc3.example.com  # your private domain
nameserver 10.128.10.11  # ns1 private IP address
nameserver 10.128.20.12  # ns2 private IP address

现在运行 resolvconf 生成一个新的 resolv.conf 文件:

  1. sudo resolvconf -u

您的客户端现已配置为使用您的 DNS 服务器。

CentOS 客户端

在 CentOS、RedHat 和 Fedora Linux VPS 上,只需编辑 resolv.conf 文件:

  1. sudo vi /etc/resolv.conf

然后将以下行添加到文件的顶部(替换为您的私有域,以及 ns1 和 ns2 私有 IP 地址):

search nyc3.example.com  # your private domain
nameserver 10.128.10.11  # ns1 private IP address
nameserver 10.128.20.12  # ns2 private IP address

现在保存并退出。您的客户端现已配置为使用您的 DNS 服务器。

测试客户端

使用 nslookup 测试您的客户端是否可以查询您的名称服务器。您应该能够在您已配置并位于“受信任”ACL 中的所有客户端上执行此操作。

正向查找

例如,我们可以通过运行以下命令执行正向查找以检索 host1.nyc3.example.com 的 IP 地址:

  1. nslookup host1

查询 \host1 扩展为 host1.nyc3.example.com,因为 search 选项设置为您的私有子域,DNS 查询将尝试在该子域上查找,然后再在其他地方查找主机.上面命令的输出如下所示:

Output:
Server: 10.128.10.11 Address: 10.128.10.11#53 Name: host1.nyc3.example.com Address: 10.128.100.101

反向查找

要测试反向查找,请使用 host1 的私有 IP 地址查询 DNS 服务器:

  1. nslookup 10.128.100.101

您应该看到如下所示的输出:

Output:
Server: 10.128.10.11 Address: 10.128.10.11#53 11.10.128.10.in-addr.arpa name = host1.nyc3.example.com.

如果所有名称和 IP 地址都解析为正确的值,则意味着您的区域文件配置正确。如果您收到意外值,请务必检查您的主 DNS 服务器上的区域文件(例如 db.nyc3.example.com 和 db.10.128)。

恭喜!您的内部 DNS 服务器现已正确设置!现在我们将介绍如何维护您的区域记录。

维护 DNS 记录

既然您拥有一个可用的内部 DNS,您需要维护您的 DNS 记录,以便它们准确地反映您的服务器环境。

将主机添加到 DNS

每当您将主机添加到您的环境(在同一数据中心)时,您将希望将其添加到 DNS。以下是您需要执行的步骤列表:

主名称服务器

  • 正向区域文件:为新主机添加“A”记录,增加“Serial”的值
  • 反向区域文件:为新主机添加“PTR”记录,增加“Serial”的值
  • 将新主机的私有 IP 地址添加到“受信任的”ACL (named.conf.options)

然后重新加载 BIND:

  1. sudo service bind9 reload

二级域名服务器

  • 将新主机的私有 IP 地址添加到“受信任的”ACL (named.conf.options)

然后重新加载 BIND:

  1. sudo service bind9 reload

配置新主机以使用您的 DNS

  • 配置 resolv.conf 以使用您的 DNS 服务器
  • 使用 nslookup 进行测试

从 DNS 中删除主机

如果您从您的环境中删除主机或只想将其从 DNS 中删除,只需删除您将服务器添加到 DNS 时添加的所有内容(即上述步骤的反向操作)。

结论

现在您可以通过名称而不是 IP 地址来引用服务器的专用网络接口。这使得服务和应用程序的配置更加容易,因为您不再需要记住私有 IP 地址,并且文件将更易于阅读和理解。此外,现在您可以更改您的配置以指向一个单一位置的新服务器,即您的主要 DNS 服务器,而不必编辑各种分布式配置文件,从而简化了维护。

一旦您设置了内部 DNS,并且您的配置文件使用私有 FQDN 来指定网络连接,正确维护您的 DNS 服务器就很重要了。如果它们都变得不可用,则依赖它们的服务和应用程序将停止正常运行。这就是为什么建议使用至少一台辅助服务器设置您的 DNS,并维护所有这些服务器的工作备份。

©2015-2025 艾丽卡 support@alaica.com