如何在Debian9上将BIND配置为专用网络DNS服务器

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

先决条件

要完成本教程,您将需要以下基础架构。 在启用 私有网络 的同一数据中心 中创建每个服务器

  • 用作主 DNS 服务器的全新 Debian 9 服务器,ns1
  • (推荐)第二个 Debian 9 服务器作为辅助 DNS 服务器,ns2
  • 同一数据中心中将使用您的 DNS 服务器的其他服务器

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

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

示例基础架构和目标

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

  • 我们有两台服务器将被指定为我们的 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

笔记

red 突出显示的文本很重要! 它通常用于表示需要用您自己的设置替换或者应该修改或添加到配置文件中的内容。 例如,如果您看到类似 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”。 它应该如下所示:

/etc/default/bind9

. . .
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”的 new ACL(访问控制列表)块。 在这里,我们将定义一个客户端列表,我们将允许从这些客户端进行递归 DNS 查询(即 您的服务器与 ns1 位于同一数据中心)。 使用我们的示例私有 IP 地址,我们将 ns1ns2host1host2 添加到我们的受信任客户端列表中:

/etc/bind/named.conf.options - 1 of 3

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 块。 目前,块的开头如下所示:

/etc/bind/named.conf.options - 2 of 3

        . . .
};

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

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

/etc/bind/named.conf.options - 3 of 3

        . . .

};

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/16 IP 空间中,所以我们将设置一个反向区域,以便我们可以在该范围内定义反向查找。

使用以下行添加转发区域,用您自己的区域名称和 allow-transfer 指令中的 辅助 DNS 服务器的私有 IP 地址 替换区域名称:

/etc/bind/named.conf.local — 1 of 2

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” 的八位字节反转) :

/etc/bind/named.conf.local — 2 个,共 2 个

    . . .
};

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

最初,它将如下所示:

/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”。 它现在应该看起来像这样:

/etc/bind/zones/db.nyc3.example.com — 更新 1 of 3

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

                              . . .

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

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

/etc/bind/zones/db.nyc3.example.com — 更新 2 of 3

. . .

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

现在,为属于该区域的主机添加 A 记录。 这包括我们希望其名称以“.nyc3.example.com”结尾的任何服务器(替换名称和私有 IP 地址)。 使用我们的示例名称和私有 IP 地址,我们将为 ns1ns2host1host2 添加 A 记录,如下所示:

/etc/bind/zones/db.nyc3.example.com — 更新了 3 个,共 3 个

. . .

; 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 文件。

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

/etc/bind/zones/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[ X187X]”在这种情况下。

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

最初,它将如下所示:

/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 值。 它应该看起来像这样:

/etc/bind/zones/db.10.128 — 更新 1 of 3

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

                              . . .

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

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

/etc/bind/zones/db.10.128 — 更新了 2 个,共 3 个

. . .

; 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 地址以匹配您的服务器:

/etc/bind/zones/db.10.128 — 更新了 3 个,共 3 个

. . .

; 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

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

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

/etc/bind/zones/db.10.128 — 更新

$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

重启绑定:

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

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

/etc/bind/named.conf.options — 更新 1 of 2(次要)

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 指令下方,添加以下行:

/etc/bind/named.conf.options — 更新 2 of 2(次要)

        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 服务器中定义了多个反向区域,请确保将它们全部添加到此处:

/etc/bind/named.conf.local — 更新(次要)

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
Output3: 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 使用缩进和空格来定义其数据结构,因此请确保您的定义使用一致的缩进以避免错误。


/etc/netplan 00-private-nameservers.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 try 告诉 Netplan 尝试使用新的配置文件。 如果出现导致网络丢失的问题,Netplan 将在超时后自动回滚更改:

sudo netplan try
OutputWarning: 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 域”中:

Output. . .
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”:

/etc/网络/接口

    . . .

    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

这应该会在不断开当前连接的情况下重新启动您的网络。 如果它工作正常,您应该会看到如下内容:

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

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

cat /etc/resolv.conf

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

Output# 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-eth0 文件。 您可能必须将 eth0 替换为您的主网络接口的名称:

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

搜索 DNS1DNS2 选项并将它们设置为您的主要和次要名称服务器的私有 IP 地址。 添加一个 DOMAIN 参数,用于您的基础架构的基本域。 在本指南中,这将是“nyc3.example.com”:

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

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

完成后保存并关闭文件。

现在,通过键入以下内容重新启动网络服务:

sudo systemctl restart network

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

通过键入以下内容检查您的更改是否已应用:

cat /etc/resolv.conf

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

/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 查询将在查找之前尝试查看该子域主机在别处。 上面命令的输出如下所示:

OutputServer:     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

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

Output11.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,并维护所有这些服务器的工作备份。