在Debian 9上将BIND配置为专用网络DNS服务器

发布于 2020-10-13  409 次阅读


原文地址 https://cloud.tencent.com/developer/article/1360743

不使用 Debian 9?选择其他版本:

介绍

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

在本教程中,我们将讨论如何使用 Debian 9 上的 BIND 名称服务器软件(BIND9)设置内部 DNS 服务器,服务器可以使用该软件来解析专用主机名和专用 IP 地址。这提供了一种管理内部主机名和私有 IP 地址的核心方法,当您的环境扩展到多个主机时,这是必不可少的。

先决条件

要完成本教程,您需要以下基础结构。在启用了专用网络同一数据中心中创建每个服务器:

  • 一个新的 Debian 9 服务器,用作主 DNS 服务器,ns1。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • (推荐)第二个 Debian 9 服务器用作辅助 DNS 服务器 ns2
  • 将使用 DNS 服务器的同一数据中心中的其他服务器

在每台服务器上,按照我们的 Debian 9 初始服务器设置指南,通过具有sudo权限的用户和防火墙配置管理访问权限。

基础设施和目标示例

出于本文的目的,我们将假设以下内容:

  • 我们有两台服务器将被指定为我们的 DNS 名称服务器。我们将在本指南中将它们称为 ns1ns2
  • 我们有两个额外的客户端服务器将使用我们创建的 DNS 基础结构。我们将在本指南中将这些称为 host1host2。您可以为基础架构添加任意数量的内容。
  • 所有这些服务器都存在于同一数据中心中。我们假设这是 nyc3 数据中心。
  • 所有这些服务器都启用了专用网络(并且位于10.128.0.0/16子网上。您可能需要为服务器调整此设置)。
  • 所有服务器都连接到在 “example.com” 上运行的项目。由于我们的 DNS 系统完全是内部和私有的,因此您无需购买域名。但是,使用您拥有的域可能有助于避免与可公共路由域发生冲突。

根据这些假设,我们认为使用 “nyc3.example.com” 的命名方案来引用我们的私有子网或区域是有意义的。因此,host1 的私有完全限定域名(FQDN)将为 host1.nyc3.example.com。请参阅下表中的相关详细信息:

主办 角色 私人 FQDN 私有 IP 地址
NS1 主 DNS 服务器 ns1.nyc3.example.com 10.128.10.11
NS2 辅助 DNS 服务器 ns2.nyc3.example.com 10.128.20.12
主机 1 通用主机 1 host1.nyc3.example.com 10.128.100.101
主机 2 通用主机 2 host2.nyc3.example.com 10.128.200.102

注意

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

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

让我们通过安装我们的主 DNS 服务器 ns1 来开始这个教程。

在 DNS 服务器上安装 BIND

注意

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

在两个 DNS 服务器 ns1ns2 上,键入以下命令更新apt包缓存:

sudo apt update

现在安装 BIND:

sudo apt install bind9 bind9utils bind9-doc

设置绑定到 IPv4 模式

在继续之前,让我们将 BIND 设置为 IPv4 模式,因为我们的专用网络专门使用 IPv4。在两台服务器上,键入以下内容编辑bind9默认设置文件:

sudo nano /etc/default/bind9

OPTIONS参数末尾添加 “-4” 。它应该如下所示:

. . .
OPTIONS="-u bind -4"

完成后保存并关闭文件。

重新启动 BIND 以实现更改:

sudo systemctl restart bind9

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

配置 DNS 主服务器

BIND 的配置包含多个文件,这些文件包含在主配置文件named.conf中。这些文件名以named开头,因为这是 BIND 运行的进程的名称(“域名守护程序” 的缩写)。我们将从配置选项文件开始。

配置选项文件

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

sudo nano /etc/bind/named.conf.options

在现有options块上方,创建一个名为 “trusted” 的 ACL(访问控制列表)块。这是我们将定义客户列表的地方,我们将允许递归 DNS 查询(即与 ns1 位于同一数据中心的服务器)。使用我们的示例私有 IP 地址,我们将 ns1ns2host1host2 添加到可信客户端列表中:

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
};
​
options {
​
        . . .

现在我们已经拥有了受信任的 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文件进行编辑:

sudo nano /etc/bind/named.conf.local

除了一些注释,该文件应为空。在这里,我们将指定前向和反向区域。 DNS 区域指定用于管理和定义 DNS 记录的特定范围。由于我们的域名都在 “nyc3.example.com” 子域中,因此我们将其用作前向区域。因为我们服务器的私有 IP 地址都在10.128.0.0/16IP 空间中,所以我们将设置一个反向区域,以便我们可以在该范围内定义反向查找。

使用以下行添加前向区域,用您自己的区域名称替换,并在allow-transfer指令中替换辅助 DNS 服务器的专用 IP 地址

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

sudo mkdir /etc/bind/zones

我们将前向区域文件基于样本db.local区域文件。使用以下命令将其复制到正确的位置:

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

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

sudo nano /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 记录。用 ns1 的 FQDN 替换第一个 “localhost” ,然后将“root.localhost” 替换为“admin.nyc3.example.com”。每次编辑区域文件时,都需要在重新启动进程之前增加序列named。我们将它增加到 “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 地址,我们将为 ns1ns2host1host2 添加 A 记录,如下所示:

. . .
​
; 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区域文件。使用以下命令将其复制到正确的位置(替换目标文件名,使其与反向区域定义匹配):

sudo cp /etc/bind/db.127 /etc/bind/zones/db.10.128

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

sudo nano /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 记录并增加序列值。它应该看起来像这样:

@       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.

然后为所有服务器添加PTR记录,这些服务器的 IP 地址位于您正在编辑的区域文件的子网上。在我们的示例中,这包括我们所有的主机,因为它们都在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*文件的语法:

sudo named-checkconf

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

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

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

sudo named-checkzone nyc3.example.com /etc/bind/zones/db.nyc3.example.com

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

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

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

重新启动 BIND

重启 BIND:

sudo systemctl restart bind9

如果已配置 UFW 防火墙,请键入以下命令以打开对 BIND 的访问权限:

sudo ufw allow Bind9

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

配置备用 DNS 服务器

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

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

sudo nano /etc/bind/named.conf.options

在文件顶部,添加 ACL,其中包含所有可信服务器的专用 IP 地址:

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
};

options {

        . . .

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文件。该文件看起来应该与 ns1named.conf.options文件完全相同,但应配置为侦听 ns2 的私有 IP 地址。

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

sudo nano /etc/bind/named.conf.local

定义与主 DNS 服务器上的主区域对应的从属区域。请注意,类型是 “slave”,文件不包含路径,并且有一个masters指令应该设置为主 DNS 服务器的专用 IP 地址。如果您在主 DNS 服务器中定义了多个反向区域,请确保在此处全部添加它们:

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

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

现在保存并关闭named.conf.local文件。

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

sudo named-checkconf

检查完毕后,重启 BIND:

sudo systemctl restart bind9

通过更改 UFW 防火墙规则允许与服务器的 DNS 连接:

sudo ufw allow Bind9

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

配置 DNS 客户端

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

Ubuntu 18.04 客户端

在 Ubuntu 18.04 上,网络配置了 Netplan,这是一种抽象,允许您编写标准化的网络配置并将其应用于不兼容的后端网络软件。要配置 DNS,我们需要编写 Netplan 配置文件。

首先,通过使用以下ip address命令查询私有子网,找到与您的专用网络关联的设备:

ip address show to 10.128.0.0/16
3: eth1: <BROADCAST,MULTICAST,UP,LOWER\_UP> mtu 1500 qdisc fq\_codel state UP group default qlen 1000
    inet 10.128.100.101/16 brd 10.128.255.255 scope global eth1
           valid\_lft forever preferred\_lft forever

在此示例中,私有接口是eth1

接下来,在/etc/netplan中创建一个名为00-private-nameservers.yaml的新文件:

sudo nano /etc/netplan/00-private-nameservers.yaml

在里面,粘贴以下内容。您需要修改专用网络的接口,ns1ns2 DNS 服务器的地址以及 DNS 区域:

注意: Netplan 将 YAML 数据序列化格式用于其配置文件。因为 YAML 使用缩进和空格来定义其数据结构,所以请确保您的定义使用一致的缩进来避免错误。

network:
    version: 2
    ethernets:
        eth1:                                 # Private network interface
            nameservers:
                addresses:
                - 10.128.10.11                # Private IP for ns1
                - 10.132.20.12                # Private IP for ns2
                search: \[ nyc3.example.com \]  # DNS zone

完成后保存并关闭文件。

接下来,告诉 Netplan 尝试通过netplan try来使用新的配置文件。如果存在导致网络丢失的问题,Netplan 将在超时后自动回滚更改:

sudo netplan try
Warning: Stopping systemd-networkd.service, but it can still be activated by:
  systemd-networkd.socket
Do you want to keep these settings?

Press ENTER before the timeout to accept the new configuration

Changes will revert in 120 seconds

如果倒计时在底部正确更新,则新配置至少功能足以不破坏 SSH 连接。按 ENTER 键接受新配置。

现在,检查系统的 DNS 解析器以确定您的 DNS 配置是否已应用:

sudo systemd-resolve --status

向下滚动,直到看到专用网络接口的部分。您应该首先看到列出的 DNS 服务器的私有 IP 地址,然后是一些回退值。您的域名应该位于 “DNS 域名” 中:

. . .
Link 3 (eth1)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 10.128.10.11
                      10.128.20.12
                      67.207.67.2
                      67.207.67.3
          DNS Domain: nyc3.example.com
. . .

您的客户端现在应配置为使用您的内部 DNS 服务器。

Ubuntu 16.04 和 Debian 客户端

在 Ubuntu 16.04 和 Debian Linux 服务器上,您可以编辑该/etc/network/interfaces文件:

sudo nano /etc/network/interfaces

在里面,找到这dns-nameservers条线。如果它已连接到lo接口,请将其移至网络接口(例如eth0eth1)。接下来,在当前列表前面添加您自己的名称服务器。在该行下方,添加一个指向基础结构基本域的dns-search选项。在我们的例子中,是 “nyc3.example.com”:

    . . .

    dns-nameservers 10.128.10.11 10.128.20.12 8.8.8.8
    dns-search nyc3.example.com

    . . .

完成后保存并关闭文件。

确保您的系统上已安装该resolvconf软件包:

sudo apt update
sudo apt install resolvconf

现在,重新启动网络服务,使用以下命令应用新更改。确保使用网络接口的名称替换eth0

sudo ifdown --force eth0 && sudo ip addr flush dev eth0 && sudo ifup --force eth0

这应该重新启动您的网络而不丢弃您当前的连接。如果它工作正常,你应该看到这样的事情:

RTNETLINK answers: No such process
Waiting for DAD... Done

通过输入以下内容仔细检查您的设置是否已应

cat /etc/resolv.conf

您应该在/etc/resolv.conf文件和搜索域中看到您的名称服务器:

\# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.128.10.11
nameserver 10.128.20.12
nameserver 8.8.8.8
search nyc3.example.com

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

CentOS 客户

在 CentOS,RedHat 和 Fedora Linux 上,编辑该/etc/sysconfig/network-scripts/ifcfg-eth0eth0文件。您可能必须使用主网络接口的名称替换:

sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

搜索DNS1DNS2选项,并将它们设置为主要和辅助名称服务器的专用 IP 地址。添加与基础结构的基本域一起使用的DOMAIN参数。在本指南中,是 “nyc3.example.com”:

. . .
DNS1=10.128.10.11
DNS2=10.128.20.12
DOMAIN='nyc3.example.com'
. . .

完成后保存并关闭文件。

现在,键入以下命令重启网络服务:

sudo systemctl restart network

该命令可能会挂起几秒钟,但很快就会返回提示符。

输入以下命令检查是否已应用更改:

cat /etc/resolv.conf

您应该在列表中看到您的名称服务器和搜索域:

nameserver 10.128.10.11
nameserver 10.128.20.12
search nyc3.example.com

您的客户现在应该能够连接并使用您的 DNS 服务器。

测试客户端

使用nslookup来测试,如果您的客户端可以查询你的域名服务器。您应该能够在已配置且位于 “可信”ACL 中的所有客户端上执行此操作。

对于 CentOS 客户端,您可能需要安装该实用程序:

sudo yum install bind-utils

对于 Debian 客户端,您可以安装:

sudo apt install dnsutils

我们可以从执行正向查找开始。

正向查找

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

nslookup host1

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

Server:     127.0.0.53
Address:    127.0.0.53#53

Non-authoritative answer:
Name:   host1.nyc3.example.com
Address: 10.128.100.101

接下来,我们可以检查反向查找。

反向查找

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

nslookup 10.128.100.101

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

11.10.128.10.in-addr.arpa   name = host1.nyc3.example.com.

Authoritative answers can be found from:

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

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

维护 DNS 记录

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

将主机添加到 DNS

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

主名称服务器

  • 转发区文件:为新主机添加 “A” 记录,增加 “Serial” 的值
  • 反向区域文件:为新主机添加 “PTR” 记录,增加 “Serial” 的值
  • 将新主机的专用 IP 地址添加到 “可信”ACL(named.conf.options

测试配置文件:

sudo named-checkconf
sudo named-checkzone nyc3.example.com db.nyc3.example.com
sudo named-checkzone 128.10.in-addr.arpa /etc/bind/zones/db.10.128

然后重新加载 BIND:

sudo systemctl reload bind9

现在应该为新主机配置主服务器。

辅助名称服务器

  • 将新主机的专用 IP 地址添加到 “可信”ACL(named.conf.options

检查配置语法:

sudo named-checkconf

然后重新加载 BIND:

sudo systemctl reload bind9

您的辅助服务器现在将接受来自新主机的连接。

配置新主机以使用您的 DNS

  • 配置/etc/resolv.conf来使用 DNS 服务器
  • 使用 nslookup测试

从 DNS 中删除主机

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

结论

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

设置内部 DNS 并且配置文件使用专用 FQDN 指定网络连接后,正确维护 DNS 服务器至关重要。如果它们都不可用,那么依赖它们的服务和应用程序将无法正常运行。这就是为什么建议使用至少一个辅助服务器设置 DNS,并维护所有辅助服务器的工作备份的原因。

更多 Debian 教程请前往腾讯云 + 社区学习更多知识。

参考文献:《How To Configure BIND as a Private Network DNS Server on Debian 9》


或许明日太阳西下倦鸟已归时