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

介绍

管理服务器配置和基础设施的一个重要部分包括,通过建立一个适当的域名系统(DNS),维持一种按名称查找网络接口和IP地址的简单方式. 使用完全合格的域名(FQDNs),而不是IP地址来指定网络地址来方便服务和应用程序的配置,并增加配置文件的可维护性. 为您的私人网络设置自己的DNS是改善您服务器管理的好方法.

在本教程中,我们将讨论如何设置内部DNS服务器,使用Ubuntu 14.04上的BIND名称服务器软件(BIND9),它可以被您的虚拟私人服务器(VPS)用来解决私人主机名称和私人IP地址。

本教程的 CentOS 版本可在此(https://andsky.com/tech/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos-7)找到。

前提条件

要完成本教程,您将需要以下内容:

  • 某些服务器在同一个数据中心运行,并且具有 私人网络启用 * 新VPS作为主DNS服务器, ns1 * 可选:新VPS作为二级DNS服务器, ns2 * 根访问上述所有(步骤1-4在这里)

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

主持人例子

例如,为目的,我们将假设如下:

  • 我们有两个现有的VPS称为host1host2 * 两个VPS都存在于nyc3数据中心 * 两个VPS都启用了私人网络(并且在10.128.0.0/16子网上) * 两个VPS都与我们在example.com上运行的Web应用程序有某种关系

基于这些假设,我们决定使用使用使用nyc3.example.com来参考我们的私人子网或区域的命名计划是有道理的,因此, host1 的私人完全合格域名(FQDN)将是host1.nyc3.example.com

主机 主机 主机 主机 主机 主机 主机 主机 主机 主机 主机 主机

** 注:** 您现有的设置将有所不同,但示例名称和IP地址将被用来演示如何配置一个DNS服务器,以提供功能正常的内部DNS. 您应该能够通过将主机名称和私人IP地址替换为自己的IP地址来轻松地调整此设置以适应自己的环境. 无需在您的命名计划中使用数据中心的区域名称, 但我们用它来表示这些主机属于特定数据中心的私人网络。 如果您使用多个数据中心,您可以在每个相应的数据中心内部设置一个DNS.

我们的目标

到本教程结束时,我们将有一个主要的DNS服务器 ns1,并可选地提供一个次要的DNS服务器 ns2,该服务器将作为备份。

以下是示例名称和IP地址的表:

主机 主机 主机 主机 主机 主机 主机 主机 主机 主机 主机 主机 主机

让我们通过安装我们的主要DNS服务器, ns1开始。

在 DNS 服务器上安装 BIND

** 注意:** 红色突出的文本很重要! 它通常会被用来表示需要用自己的设置更换的东西,或者它应该被修改或添加到配置文件中。 例如,如果您看到 host1.nyc3.example.com 这样的东西,请用您自己的服务器的 FQDN 更换它。

在 DNS 服务器上, ns1ns2,更新 apt:

1sudo apt-get update

现在安装BIND:

1sudo apt-get install bind9 bind9utils bind9-doc

IPv4模式

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

1sudo vi /etc/default/bind9

4添加到OPTIONS变量中,它应该如下:

1[label /etc/default/bind9]
2OPTIONS="-4 -u bind"

保存和退出。

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

配置主 DNS 服务器

BIND 的配置由多个文件组成,这些文件是由主配置文件 named.conf 包含的. 这些文件名以 "named" 开始,因为这是 BIND 运行的过程的名称。

配置选项文件

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

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

在现有的选项块上,创建一个名为可信的新ACL块,在此我们将定义我们将允许复发性DNS查询的客户端列表(即位于与ns1相同的数据中心的服务器)。

1[label /etc/bind/named.conf.options — 1 of 3]
2acl "trusted" {
3        10.128.10.11;    # ns1 - can be set to localhost
4        10.128.20.12;    # ns2
5        10.128.100.101;  # host1
6        10.128.200.102;  # host2
7};

现在我们有信任的DNS客户端列表,我们将想要编辑选项块,目前,区块的开始看起来如下:

1[label /etc/bind/named.conf.options  2 of 3]
2options {
3        directory "/var/cache/bind";
4...
5}

目录指令下方,添加突出的配置行(并在适当的 ns1 IP 地址中代替),以便它看起来像这样:

 1[label /etc/bind/named.conf.options  3 of 3]
 2options {
 3        directory "/var/cache/bind";
 4
 5        recursion yes;                 # enables resursive queries
 6        allow-recursion { trusted; };  # allows recursive queries from "trusted" clients
 7        listen-on { 10.128.10.11; };   # ns1 private IP address - listen on private network only
 8        allow-transfer { none; };      # disable zone transfers by default
 9
10        forwarders {
11                8.8.8.8;
12                8.8.4.4;
13        };
14...
15};

现在保存并退出named.conf.options。上面的配置规定,只有你自己的服务器(可信的服务器)才能查询你的DNS服务器。

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

配置本地文件

ns1 上,打开 named.conf.local 文件以编辑:

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

除了几个评论,该文件应该是空的. 在这里,我们将指定我们的前进和反向区域。

添加以下行前区域(将区域名称替换为您自己的):

1[label /etc/bind/named.conf.local — 1 of 2]
2zone "nyc3.example.com" {
3    type master;
4    file "/etc/bind/zones/db.nyc3.example.com"; # zone file path
5    allow-transfer { 10.128.20.12; };         # ns2 private IP address - secondary
6};

假设我们的私人子网是 10.128.0.0/16,请用以下行添加反向区域(请注意,我们的反向区域名称以128.10开始,这是10.128的十字节逆转):

1[label /etc/bind/named.conf.local — 2 of 2]
2zone "128.10.in-addr.arpa" {
3    type master;
4    file "/etc/bind/zones/db.10.128";  # 10.128.0.0/16 subnet
5    allow-transfer { 10.128.20.12; };  # ns2 private IP address - secondary
6};

如果您的服务器覆盖多个私人子网,但位于同一个数据中心,请确保为每个单独的子网指定一个额外的区域和区域文件。

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

创建向前区域文件

例如,当 DNS 收到一个名称查询,host1.nyc3.example.com时,它将查看前进区域文件以解决 host1 的相应私人 IP 地址。

根据我们的 named.conf.local 配置,该位置应该是 /etc/bind/zones:

1sudo mkdir /etc/bind/zones

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

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

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

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

起初,它将看起来如下:

 1[label /etc/bind/zones/db.nyc3.example.com  original]
 2$TTL 604800
 3@       IN SOA localhost. root.localhost. (
 4                              2         ; Serial
 5                         604800         ; Refresh
 6                          86400         ; Retry
 7                        2419200         ; Expire
 8                         604800 )       ; Negative Cache TTL
 9;
10@       IN NS localhost.      ; delete this line
11@       IN A 127.0.0.1       ; delete this line
12@       IN AAAA    ::1             ; delete this line

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

1[label /etc/bind/zones/db.nyc3.example.com  updated 1 of 3]
2@       IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3                              3         ; Serial

现在删除文件末尾的三个记录(SOA记录后)。如果您不确定要删除哪个行,它们上面标记为删除此行评论。

在文件的末尾,用以下行添加您的名称服务器记录(用自己的名称替换)。

1[label /etc/bind/zones/db.nyc3.example.com — updated 2 of 3]
2; name servers - NS records
3    IN NS ns1.nyc3.example.com.
4    IN NS ns2.nyc3.example.com.

然后为属于这个区域的主机添加A记录,这包括我们希望以 ".nyc3.example.com"(取代名称和私人IP地址)结束名称的任何服务器。使用我们的示例名称和私人IP地址,我们将为 ns1, ns2, _host1_和 _host2_添加A记录,如下:

1[label /etc/bind/zones/db.nyc3.example.com — updated 3 of 3]
2; name servers - A records
3ns1.nyc3.example.com. IN A 10.128.10.11
4ns2.nyc3.example.com. IN A 10.128.20.12
5
6; 10.128.0.0/16 - A records
7host1.nyc3.example.com. IN A 10.128.100.101
8host2.nyc3.example.com. IN A 10.128.200.102

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

我们的最终示例前进区域文件看起来如下:

 1[label /etc/bind/zones/db.nyc3.example.com  updated]
 2$TTL 604800
 3@       IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
 4    		      3		; Serial
 5    		 604800		; Refresh
 6    		  86400		; Retry
 7    		2419200		; Expire
 8    		 604800 )	; Negative Cache TTL
 9;
10; name servers - NS records
11     IN NS ns1.nyc3.example.com.
12     IN NS ns2.nyc3.example.com.
13
14; name servers - A records
15ns1.nyc3.example.com. IN A 10.128.10.11
16ns2.nyc3.example.com. IN A 10.128.20.12
17
18; 10.128.0.0/16 - A records
19host1.nyc3.example.com. IN A 10.128.100.101
20host2.nyc3.example.com. IN A 10.128.200.102

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

创建反向区域文件(s)

也就是说,当DNS通过IP地址接收一个查询时,例如10.128.100.101,它将查看反向区域文件(s)以解决相应的FQDN,host1.nyc3.example.com在这种情况下。

ns1 上,为在 named.conf.local 文件中指定的每个反向区域创建一个反向区域文件. 我们将我们的反向区域文件(s)基于样本 db.127 区域文件. 用以下命令将其复制到正确的位置(取代目的地文件名以匹配您的反向区域定义):

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

编辑与named.conf.local中定义的反向区域(s)相匹配的反向区域文件:

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

起初,它将看起来如下:

 1[label /etc/bind/zones/db.10.128  original]
 2$TTL 604800
 3@       IN SOA localhost. root.localhost. (
 4                              1         ; Serial
 5                         604800         ; Refresh
 6                          86400         ; Retry
 7                        2419200         ; Expire
 8                         604800 )       ; Negative Cache TTL
 9;
10@       IN NS localhost.      ; delete this line
111.0.0 IN PTR localhost.      ; delete this line

与前进区域文件相同的方式,您将想要编辑 SOA 记录并增加 serial 值。

1[label /etc/bind/zones/db.10.128  updated 1 of 3]
2@       IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3                              3         ; Serial

现在删除文件末尾的两个记录(SOA记录后)。如果您不确定要删除哪个行,它们上面标记为删除此行评论。

在文件的末尾,用以下行添加您的名称服务器记录(用自己的名称替换)。

1[label /etc/bind/zones/db.10.128 — updated 2 of 3]
2; name servers - NS records
3      IN NS ns1.nyc3.example.com.
4      IN NS ns2.nyc3.example.com.

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

1[label /etc/bind/zones/db.10.128 — updated 3 of 3]
2; PTR Records
311.10 IN PTR ns1.nyc3.example.com.    ; 10.128.10.11
412.20 IN PTR ns2.nyc3.example.com.    ; 10.128.20.12
5101.100 IN PTR host1.nyc3.example.com.  ; 10.128.100.101
6102.200 IN PTR host2.nyc3.example.com.  ; 10.128.200.102

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

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

 1[label /etc/bind/zones/db.10.128  updated]
 2$TTL 604800
 3@       IN SOA nyc3.example.com. admin.nyc3.example.com. (
 4                              3         ; Serial
 5                         604800         ; Refresh
 6                          86400         ; Retry
 7                        2419200         ; Expire
 8                         604800 )       ; Negative Cache TTL
 9; name servers
10      IN NS ns1.nyc3.example.com.
11      IN NS ns2.nyc3.example.com.
12
13; PTR Records
1411.10 IN PTR ns1.nyc3.example.com.    ; 10.128.10.11
1512.20 IN PTR ns2.nyc3.example.com.    ; 10.128.20.12
16101.100 IN PTR host1.nyc3.example.com.  ; 10.128.100.101
17102.200 IN PTR host2.nyc3.example.com.  ; 10.128.200.102

检查 BIND 配置语法

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

1sudo named-checkconf

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

可以使用「named-checkzone」命令來檢查您的區域檔案的正確性,其第一個論點指定區域名稱,第二個論點指定相應的區域檔案,這兩個論點都定義在「named.conf.local」。

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

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

并且要检查128.10.in-addr.arpa逆区配置,请执行以下命令(更改数字以匹配您的逆区和文件):

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

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

重新启动链接

重启链接:

1sudo service bind9 restart

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

配置二级 DNS 服务器

在大多数环境中,创建一台辅助DNS服务器是很好的想法,如果主服务器变得不可用,它将响应请求。

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

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

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

1[label /etc/bind/named.conf.options — updated 1 of 2 (secondary)]
2acl "trusted" {
3        10.128.10.11;   # ns1
4        10.128.20.12;   # ns2 - can be set to localhost
5        10.128.100.101;  # host1
6        10.128.200.102;  # host2
7};

目录指令下方,添加以下几行:

 1[label /etc/bind/named.conf.options — updated 2 of 2 (secondary)]
 2        recursion yes;
 3        allow-recursion { trusted; };
 4        listen-on { 10.128.20.12; };      # ns2 private IP address
 5        allow-transfer { none; };          # disable zone transfers by default
 6
 7        forwarders {
 8                8.8.8.8;
 9                8.8.4.4;
10        };

保存和退出「named.conf.options」这个文件应该看起来完全像 ns1 的「named.conf.options」文件,但它应该配置为聆听 ns2 的私人 IP 地址。

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

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

定义原始 DNS 服务器上的主区的奴隶区域. 请注意,类型是奴隶,文件不包含路径,并且有一个大师指令,该指令应设置为原始 DNS 服务器的私人 IP。

 1[label /etc/bind/named.conf.local — updated (secondary)]
 2zone "nyc3.example.com" {
 3    type slave;
 4    file "slaves/db.nyc3.example.com";
 5    masters { 10.128.10.11; };  # ns1 private IP
 6};
 7
 8zone "128.10.in-addr.arpa" {
 9    type slave;
10    file "slaves/db.10.128";
11    masters { 10.128.10.11; };  # ns1 private IP
12};

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

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

1sudo named-checkconf

一旦检查了,重新启动链接

1sudo service bind9 restart

现在你有主和次要 DNS 服务器用于私人网络名称和 IP 地址分辨率. 现在你必须配置你的服务器使用你的私人 DNS 服务器。

配置 DNS 客户端

可信 ACL 中的所有服务器可以查询您的 DNS 服务器之前,您必须配置每个服务器以使用 ns1ns2 作为名称服务器。

Ubuntu 客户端

在Ubuntu和Debian Linux VPS上,您可以编辑文件,该文件在启动时预先为resolv.conf:

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

将下列行添加到文件中(取代您的私有域和 ns1ns2 私有 IP 地址):

1[label /etc/resolvconf/resolv.conf.d/head]
2search nyc3.example.com  # your private domain
3nameserver 10.128.10.11  # ns1 private IP address
4nameserver 10.128.20.12  # ns2 private IP address

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

1sudo resolvconf -u

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

CentOS 客户端

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

1sudo vi /etc/resolv.conf

然后将下列行添加到文件的顶部(取代您的私有域和 ns1ns2 私有 IP 地址):

1[label /etc/resolv.conf]
2search nyc3.example.com  # your private domain
3nameserver 10.128.10.11  # ns1 private IP address
4nameserver 10.128.20.12  # ns2 private IP address

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

测试客户

使用nslookup来测试您的客户端是否可以查询您的名称服务器,您应该能够在您配置的所有客户端上进行查询,并且位于可信ACL中。

向前看

例如,我们可以通过执行以下命令来检索 _host1.nyc3.example.com 的 IP 地址:

1nslookup host1

查询host1扩展到host1.nyc3.example.com,因为搜索选项被设置为您的私人子域,DNS查询将尝试查看该子域,然后在其他地方寻找主机。

1[secondary_label Output:]
2Server:		10.128.10.11
3Address:	10.128.10.11#53
4
5Name:	host1.nyc3.example.com
6Address: 10.128.100.101

反向搜索

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

1nslookup 10.128.100.101

你应该看到的输出看起来如下:

1[secondary_label Output:]
2Server:		10.128.10.11
3Address:	10.128.10.11#53
4
511.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:

1sudo service bind9 reload

二级名称服务器

  • 将新主机的私人 IP 地址添加到可信的 ACL (named.conf.options)

然后重新加载BIND:

1sudo service bind9 reload

配置新主机以使用您的 DNS

  • 設定 resolv.conf 以使用您的 DNS 伺服器 * 使用 'nslookup' 測試

从DNS中删除主机

如果您从环境中删除主机,或者只想将其从DNS中删除,只需删除在将服务器添加到DNS时添加的所有东西(即上述步骤的反面)。

结论

现在,您可以通过名称而不是 IP 地址参考服务器的私人网络接口,这使得服务和应用程序的配置更容易,因为您不再需要记住私人 IP 地址,并且文件将更容易阅读和理解。

一旦你已经建立了内部 DNS 设置,并且你的配置文件正在使用私人 FQDN 来指定网络连接, DNS 服务器的维护很重要。如果它们都无法使用,依靠它们的服务和应用程序将停止正常运作。

Published At
Categories with 技术
comments powered by Disqus