介绍
管理服务器配置和基础设施的一个重要部分包括,通过建立一个适当的域名系统(DNS),维持一种按名称查找网络接口和IP地址的简单方式. 使用完全合格的域名(FQDNs),而不是IP地址来指定网络地址来方便服务和应用程序的配置,并增加配置文件的可维护性. 为您的私人网络设置自己的DNS是改善您服务器管理的好方法.
在本教程中,我们将讨论如何设置内部DNS服务器,使用Ubuntu 16.04上的BIND名称服务器软件(BIND9),该软件可以被您的服务器用来解决私人主机名和私人IP地址。
本教程的 CentOS 版本可在此(https://andsky.com/tech/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos-7)找到。
前提条件
要完成本教程,您将需要以下内容:
- 某些服务器在同一数据中心运行,具有 私人网络启用。这些将是您的DNS客户端。 * 新服务器作为主DNS服务器, ns1 * (推荐) 新服务器作为二级DNS服务器, ** ns2** * 与
sudo
用户访问上述服务器。
如果您对 DNS 概念不熟悉,建议您至少阅读我们的 介绍 DNS 管理的前三部分。
基础设施和目标示例
对于本条目的,我们将假设如下:
- 联合国 我们有两台现有的客户服务器,将利用我们创建的DNS基础设施。 我们将在本指南中称这些为host1 和** host2** 。 你可以多加一点 基础设施。
- 联合国 我们还有两台服务器 将被指定为DNS名服务器 我们将在本指南中将其称为ns1 和** ns2** 。
- 联合国 所有这些服务器都存在于同一个数据中心. 我们将假设这是nyc3 数据中心。
- 联合国 所有这些服务器都启用了私人联网(并在 " 10.128.0.0/16 " 子网上)。 您可能必须调整此功能用于您的服务器 。
- 联合国 所有服务器都与我们运行在"example.com"上的网络应用程序有某种关联. .
基于这些假设,我们决定使用使用使用nyc3.example.com
来参考我们的私人子网或区域的命名计划是有道理的,因此, host1 的私人完全合格域名(FQDN)将是 ** host1.nyc3.example.com** 。
主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人 主持人
<美元 > [注] [标签注] 您现有的设置将不同, 但实例名称和 IP 地址将用来演示如何配置 DNS 服务器, 以提供可运行的内部 DNS 。 您应该能够通过将主机名称和私人IP地址替换为自己的IP地址来轻松地调整此设置以适应自己的环境. 无需在您的命名计划中使用数据中心的区域名称, 但我们用它来表示这些主机属于特定数据中心的私人网络。 如果您使用多个数据中心,您可以在每个相应的数据中心内部设置一个DNS. < $ > (美元)
到本教程结束时,我们将有一个主要的DNS服务器, ns1 ,并可选地有一个次要的DNS服务器, ** ns2** ,该服务器将作为备份。
让我们通过安装我们的主要DNS服务器, ns1开始。
在 DNS 服务器上安装 BIND
<$>[注] [标签注] 红色标注的文本很重要! 它通常会被用来表示需要用自己的设置更换的东西,或者它应该被修改或添加到配置文件中。 例如,如果您看到类似host1.nyc3.example.com
的东西,请用您自己的服务器的FQDN替换它。 同样,如果您看到host1_private_IP
,请用您自己的服务器的私人IP地址替换它。
在两个DNS服务器上, ns1 和 ** ns2** ,通过键入以下方式更新apt
包缓存:
1sudo apt-get update
现在安装BIND:
1sudo apt-get install bind9 bind9utils bind9-doc
IPv4模式
在继续之前,让我们将 BIND 设置为 IPv4 模式. 在两个服务器上,通过键入编辑 bind9
systemd 单元文件:
1sudo systemctl edit --full bind9
将4
添加到ExecStart
指令的末尾,该指令应如下:
1[label /etc/systemd/system/bind9.service]
2. . .
3[Service]
4ExecStart=/usr/sbin/named -f -u bind -4
保存并关闭编辑器,当你完成。
重新加载 systemd daemon 以将新配置读入运行系统:
1sudo systemctl daemon-reload
重启 BIND 以执行更改:
1sudo systemctl restart bind9
现在BIND已安装,让我们配置主DNS服务器。
配置主 DNS 服务器
BIND的配置由多个文件组成,这些文件是由主配置文件 named.conf
包含的. 这些文件名以 named
开始,因为这是 BIND 运行的过程的名称。
配置选项文件
在 ns1 上,打开named.conf.options
文件以编辑:
1sudo nano /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};
8
9options {
10
11 . . .
现在我们有信任的DNS客户端列表,我们将想要编辑选项
块,目前,区块的开始看起来如下:
1[label /etc/bind/named.conf.options — 2 of 3]
2 . . .
3};
4
5options {
6 directory "/var/cache/bind";
7 . . .
8}
在目录
指令下方,添加突出的配置行(并在适当的 ns1 IP 地址中代替),以便它看起来像这样:
1[label /etc/bind/named.conf.options — 3 of 3]
2 . . .
3
4};
5
6options {
7 directory "/var/cache/bind";
8
9 recursion yes; # enables resursive queries
10 allow-recursion { trusted; }; # allows recursive queries from "trusted" clients
11 listen-on { 10.128.10.11; }; # ns1 private IP address - listen on private network only
12 allow-transfer { none; }; # disable zone transfers by default
13
14 forwarders {
15 8.8.8.8;
16 8.8.4.4;
17 };
18
19 . . .
20};
当你完成时,保存并关闭conf.conf.options
文件. 上面的配置规定,只有你自己的服务器(可信
的服务器)才能查询你的DNS服务器。
接下来,我们将配置本地文件,以指定我们的DNS区域。
配置本地文件
在 ns1 上,打开named.conf.local
文件以编辑:
1sudo nano /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]
2 . . .
3};
4
5zone "128.10.in-addr.arpa" {
6 type master;
7 file "/etc/bind/zones/db.10.128"; # 10.128.0.0/16 subnet
8 allow-transfer { 10.128.20.12; }; # ns2 private IP address - secondary
9};
如果您的服务器覆盖多个私人子网,但位于同一个数据中心,请确保为每个单独的子网指定一个额外的区域和区域文件。
现在,我们的区域已在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 nano /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
。 此外,每次编辑区域文件时,在重新启动命名
过程之前,你应该增加 ** 序列值。
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
4
5 . . .
现在删除文件末尾的三个记录(SOA记录后)。如果您不确定要删除哪个行,它们上面标记为删除此行
评论。
在文件的末尾,用以下行添加你的名称服务器记录(以自己的名称替换)。
1[label /etc/bind/zones/db.nyc3.example.com — updated 2 of 3]
2. . .
3
4; name servers - NS records
5 IN NS ns1.nyc3.example.com.
6 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. . .
3
4; name servers - A records
5ns1.nyc3.example.com. IN A 10.128.10.11
6ns2.nyc3.example.com. IN A 10.128.20.12
7
8; 10.128.0.0/16 - A records
9host1.nyc3.example.com. IN A 10.128.100.101
10host2.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 nano /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 记录并增加 ** 序列** 值。
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
4
5 . . .
现在删除文件末尾的两个记录(SOA记录后)。如果您不确定要删除哪个行,它们上面标记为删除此行
评论。
在文件的末尾,用以下行添加你的名称服务器记录(以自己的名称替换)。
1[label /etc/bind/zones/db.10.128 — updated 2 of 3]
2. . .
3
4; name servers - NS records
5 IN NS ns1.nyc3.example.com.
6 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. . .
3
4; PTR Records
511.10 IN PTR ns1.nyc3.example.com. ; 10.128.10.11
612.20 IN PTR ns2.nyc3.example.com. ; 10.128.20.12
7101.100 IN PTR host1.nyc3.example.com. ; 10.128.100.101
8102.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 服务器
部分,然后再试试命名-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 systemctl restart bind9
如果您已配置 UFW 防火墙,请通过键入打开 BIND 访问:
1sudo ufw allow Bind9
您的主要 DNS 服务器现在已设置并准备好响应 DNS 查询,让我们继续创建次要 DNS 服务器。
配置二级 DNS 服务器
在大多数环境中,创建一台辅助DNS服务器是很好的想法,如果主服务器变得不可用,它将响应请求。
在 ns2 上,编辑named.conf.options
文件:
1sudo nano /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};
8
9options {
10
11 . . .
在目录
指令下方,添加以下几行:
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 nano /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
一旦检查了,请重新启动 BIND:
1sudo systemctl restart bind9
通过更改 UFW 防火墙规则,允许 DNS 连接到服务器:
1sudo ufw allow Bind9
现在你有主和次要 DNS 服务器用于私人网络名称和 IP 地址分辨率. 现在你必须配置你的客户端服务器使用你的私人 DNS 服务器。
配置 DNS 客户端
在可信
ACL 中的所有服务器可以查询您的 DNS 服务器之前,您必须配置每个服务器以使用 ns1 和 ** ns2** 作为名称服务器。
Ubuntu 客户端
在 Ubuntu 和 Debian Linux 服务器上,您可以编辑 /etc/network/interfaces
文件:
1sudo nano /etc/network/interfaces
在内部,找到dns-nameservers
行,并在当前存在的列表前预设自己的名称服务器. 在该行下方,添加一个dns-search
选项,指向您的基础设施的基域。
1[label /etc/network/interfaces]
2 . . .
3
4 dns-nameservers 10.128.10.11 10.128.20.12 8.8.8.8
5 dns-search nyc3.example.com
6
7 . . .
保存并关闭文件,当你完成。
现在,重新启动您的网络服务,使用以下命令应用新的更改. 请确保您用网络接口的名称代替「eth0」:
1sudo ifdown --force eth0 && sudo ip addr flush dev eth0 && sudo ifup --force eth0
这应该重新启动您的网络,而不会放弃当前的连接. 如果它工作正确,你应该看到这样的东西:
1[secondary_label Output]
2RTNETLINK answers: No such process
3Waiting for DAD... Done
双重检查您的设置是通过键入应用的:
1cat /etc/resolv.conf
您应该在 /etc/resolv.conf
文件中看到您的名称服务器,以及您的搜索域:
1[secondary_label Output]
2# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
3# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
4nameserver 10.128.10.11
5nameserver 10.128.20.12
6nameserver 8.8.8.8
7search nyc3.example.com
您的客户端现在已配置为使用您的 DNS 服务器。
CentOS 客户端
在 CentOS、RedHat 和 Fedora Linux VPS 上,编辑 /etc/sysconfig/network-scripts/ifcfg-eth0
文件,您可能需要用您的主要网络接口的名称代替 eth0
:
1sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
搜索DNS1
和DNS2
选项,并将其设置为您的主要和次要名称服务器的私人IP地址. 添加一个DOMAIN
参数,以您的基础设施的基域。
1[label /etc/sysconfig/network-scripts/ifcfg-eth0]
2. . .
3DNS1=10.128.10.11
4DNS2=10.128.20.12
5DOMAIN='nyc3.example.com'
6. . .
保存并关闭文件,当你完成。
现在,通过键入重新启动网络服务:
1sudo systemctl restart network
命令可能会暂停几秒钟,但应该很快返回提示。
检查您的更改是否被应用通过键入:
1cat /etc/resolv.conf
您应该在列表中看到您的名称服务器和搜索域:
1[label /etc/resolv.conf]
2nameserver 10.128.10.11
3nameserver 10.128.20.12
4search nyc3.example.com
测试客户
使用nslookup
来测试您的客户端是否可以查询您的名称服务器,您应该能够在您配置的所有客户端上进行查询,并且位于可信
ACL中。
对于 CentOS 客户端,您可能需要安装该实用程序:
1sudo yum install bind-utils
向前看
例如,我们可以通过运行以下命令进行前瞻搜索以获取 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
反向搜索
要测试反向搜索,请查询 DNS 服务器使用 host1 的私人 IP 地址:
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 systemctl reload bind9
二级名称服务器
- 将新主机的私人 IP 地址添加到
可信
的 ACL (named.conf.options
)
然后重新加载BIND:
1sudo systemctl reload bind9
配置新主机以使用您的 DNS
- 配置
/etc/resolv.conf
以使用您的 DNS 服务器 * 使用nslookup
测试
从DNS中删除主机
如果您从环境中删除主机,或者只想将其从DNS中删除,只需删除在将服务器添加到DNS时添加的所有东西(即上述步骤的反面)。
结论
现在,您可以通过名称而不是 IP 地址参考服务器的私人网络接口,这使得服务和应用程序的配置更容易,因为您不再需要记住私人 IP 地址,并且文件将更容易阅读和理解。
一旦你已经建立了内部 DNS 设置,并且你的配置文件正在使用私人 FQDN 来指定网络连接, DNS 服务器的维护很重要。如果它们都无法使用,依靠它们的服务和应用程序将停止正常运作。