介绍
管理服务器配置和基础架构的一个重要部分包括通过设置正确的域名系统(DNS),保持通过名称查找网络接口和IP地址的简单方法。使用完全限定域名(FQDN)(而不是IP地址)来指定网络地址可以简化服务和应用程序的配置,并增加配置文件的可维护性。为您的专用网络设置自己的DNS是改进服务器管理的好方法。 在本教程中,我们将介绍如何设置内部DNS服务器,使用CentOS 7上的BINDNameservers软件(BIND9),您的虚拟专用服务器(VPS)可以使用它来解析专用主机名和专用IP地址。这提供了一种管理内部主机名和专用IP地址的中央方法,当您的环境扩展到多个主机时,这是必不可少的。 本教程的Ubuntu的版本可以找到 这里 。先决条件
要完成本教程,您需要以下内容: 如果你不熟悉DNS的概念,建议你至少阅读我们的前三部分 介绍管理DNS 。示例主机
为了示例的目的,我们将假设如下:- 我们有两个现有的VPS称为“host1”和“host2”
- 两个VPS都存在于nyc3数据中心中
- 两个VPS都启用了专用网络(并且位于10.128.0.0/16子网上)
- 两个VPS都与我们的web应用程序运行在“example.com”
主办 | 角色 | 私有FQDN | 私有IP地址 |
---|---|---|---|
host1 | 通用主机1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | 通用主机2 | host2.nyc3.example.com | 10.128.200.102 |
我们的目标
在本教程结束后,我们将有一个主DNS服务器 ,NS1和可选的辅助DNS服务器 ,NS2,这将作为备份。 以下是包含示例名称和IP地址的表:主办 | 角色 | 私有FQDN | 私有IP地址 |
---|---|---|---|
ns1 | 主DNS服务器 | ns1.nyc3.example.com | 10.128.10.11 |
ns2 | 辅助DNS服务器 | ns2.nyc3.example.com | 10.128.20.12 |
在DNS服务器上安装BIND
注:以 红色突出显示文本是非常重要的! 它通常用于表示需要用您自己的设置替换的东西,或者它应该被修改或添加到配置文件中。 例如,如果你看到这样 host1.nyc3.example.com,用自己的服务器的FQDN替换它。 同样,如果你看到 host1_private_IP,用你自己的服务器的私有IP地址替换它。 在两台DNS服务器 ,NS1和 NS2,安装BIND使用yum:sudo yum install bind bind-utils
确认输入的提示
y
。 现在BIND已安装,让我们配置主DNS服务器。
配置主DNS服务器
BIND的配置包含多个文件,这是从主配置文件,包括named.conf
。这些文件名以“named”开头,因为它是BIND运行的进程的名称。我们将从配置选项文件开始。
配置绑定
为 名为 BIND的过程是已知的。因此,许多文件引用“命名”而不是“BIND”。 在 NS1上,打开named.conf
文件进行编辑:
sudo vi /etc/named.conf
上述现有的
options
块,创建一个名为“可信赖”的新ACL块。 这是我们将定义我们将允许递归DNS查询的客户端列表(即与ns1位于同一数据中心的服务器)。 使用我们的例子中私有IP地址,我们将增加
NS1,NS2,
主机1,和
host2我们值得信赖的客户名单:
/etc/named.conf - 1 of 4
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
块。 NS1的私有IP地址添加到
listen-on port 53
的指令,并注释掉
listen-on-v6
行:
/etc/named.conf - 2/4
options {
listen-on port 53 { 127.0.0.1; 10.128.10.11; };
# listen-on-v6 port 53 { ::1; };
...
下面这些条目中,更改
allow-transfer
指令从“无”到
NS2的私有IP地址。 此外,改变
allow-query
从“本地主机”到“受信任”的指令:
/etc/named.conf - 3/4
...
options {
...
allow-transfer { 10.128.20.12; }; # disable zone transfers by default
...
allow-query { trusted; }; # allows queries from "trusted" clients
...
在文件末尾,添加以下行:
/etc/named.conf - 4的4
include "/etc/named/named.conf.local";
现在保存并退出
named.conf
。以上配置指定只有您自己的服务器(“受信任的”服务器)将能够查询您的DNS服务器。 接下来,我们将配置本地文件,以指定我们的DNS区域。
配置本地文件
在 NS1,打开named.conf.local
文件进行编辑:
sudo vi /etc/named/named.conf.local
文件应为空。在这里,我们将指定我们的前进和后退区域。 添加带有以下行的正向区域(用您自己的区域名称替换):
/etc/named/named.conf.local - 1/2
zone "nyc3.example.com" {
type master;
file "/etc/named/zones/db.nyc3.example.com"; # zone file path
};
假设我们的私人子网是
10.128.0.0/16,通过以下行添加反向区域(注意:我们的反向区域名称以“128.10”,这是“10.128”的八位逆转开始):
/etc/named/named.conf.local - 2/2
zone "128.10.in-addr.arpa" {
type master;
file "/etc/named/zones/db.10.128"; # 10.128.0.0/16 subnet
};
如果您的服务器跨多个私有子网但位于同一数据中心,请务必为每个不同子网指定一个附加区域和区域文件。当您完成将所有您想要的区域,保存并退出
named.conf.local
文件。 现在我们的区域在BIND中指定,我们需要创建相应的正向和反向区域文件。
创建前向区域文件
正向区域文件是我们为正向DNS查找定义DNS记录的位置。也就是说,当接收到DNS名称查询,“host1.nyc3.example.com”为例,它看起来在正向区域文件来解析 主机1的对应的私有IP地址。 让我们创建我们的区域文件将驻留的目录。根据我们的 named.conf.local配置,该位置应该是/etc/named/zones
:
sudo chmod 755 /etc/named
sudo mkdir /etc/named/zones
现在让我们编辑我们的正向区域文件:
sudo vi /etc/named/zones/db.nyc3.example.com
首先,您将要添加SOA记录。将突出显示的ns1 FQDN替换为您自己的FQDN,然后将第二个“nyc3.example.com”替换为您自己的域。每次你编辑区域文件的时候,重新启动之前,您应该增加
序列值
named
的过程-我们将递增到“3”。它应该看起来像这样:
/etc/named/zones/db.nyc3.example.com - 1/3
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
之后,添加以下行的Nameservers记录(用您自己的名称替换名称)。注意,第二列指定这些是“NS”记录:
/etc/named/zones/db.nyc3.example.com - 2/3
; name servers - NS records
IN NS ns1.nyc3.example.com.
IN NS ns2.nyc3.example.com.
然后为属于此区域的主机添加A记录。这包括任何我们想以“.nyc3.example.com”结尾的服务器(替换名称和私有IP地址)。使用我们的示例名称和私有IP地址,我们将添加一个记录
NS1,NS2,
主机1,和
host2像这样:
/etc/named/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/named/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”在这种情况下。 在 NS1,在指定的每个反向区域named.conf.local
文件,创建一个反向区域文件。 编辑对应于所定义的反向区域(多个)反向区域文件
named.conf.local
:
sudo vi /etc/named/zones/db.10.128
以与正向区域文件相同的方式,将突出显示的ns1 FQDN替换为您自己的FQDN,然后将第二个“nyc3.example.com”替换为您自己的域。每次你编辑区域文件的时候,重新启动之前,您应该增加
序列值
named
的过程-我们将递增到“3”。它应该看起来像这样:
/etc/named/zones/db.10.128 - 1/3
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
之后,添加以下行的Nameservers记录(用您自己的名称替换名称)。注意,第二列指定这些是“NS”记录:
/etc/named/zones/db.10.128 - 2/3
; 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地址以匹配您的服务器:
/etc/named/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/named/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提示符,并且看不到任何错误消息。如果有您的配置文件的问题,请查看错误消息,然后尝试
named-checkconf
一次。 该
named-checkzone
命令可以用来检查你的区域文件的正确性。 它的第一个参数指定一个区域名称,第二个参数指定了相应的区域文件,这是在这两个定义
named.conf.local
。 例如,要检查
“nyc3.example.com”正向区域配置,运行以下命令(更改名称以匹配您的正向区域和文件):
sudo named-checkzone nyc3.example.com /etc/named/zones/db.nyc3.example.com
并检查了
“128.10带.in-addr.arpa”反向区域配置,运行以下命令(更改号码来匹配您的反向区域和文件):
sudo named-checkzone 128.10.in-addr.arpa /etc/named/zones/db.10.128
当所有配置和区域文件中都没有错误时,您应该可以重新启动BIND服务了。
启动BIND
开始BIND:sudo systemctl start named
现在你将要启用它,所以它将在启动时启动:
sudo systemctl enable named
您的主DNS服务器现在已设置并准备好响应DNS查询。让我们继续创建辅助DNS服务器。
配置辅助DNS服务器
在大多数环境中,最好设置一个辅助DNS服务器,如果主服务器不可用,它将响应请求。幸运的是,辅助DNS服务器更容易配置。 在 NS2上,编辑named.conf
文件:
sudo vi /etc/named.conf
注意:如果你喜欢跳过这些说明,您可以复制NS1的named.conf
文件,并修改它来听NS2上的私有IP地址,不允许转让。 上述现有的
options
块,创建一个名为“可信赖”的新ACL块。 这是我们将定义我们将允许递归DNS查询的客户端列表(即与ns1位于同一数据中心的服务器)。 使用我们的例子中私有IP地址,我们将增加
NS1,NS2,
主机1,和
host2我们值得信赖的客户名单:
/etc/named.conf - 1 of 4
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
块。 NS1的私有IP地址添加到
listen-on port 53
的指令,并注释掉
listen-on-v6
行:
/etc/named.conf - 2/4
options {
listen-on port 53 { 127.0.0.1; 10.128.20.12; };
# listen-on-v6 port 53 { ::1; };
...
更改
allow-query
指令从“本地主机”到“受信任”:
/etc/named.conf - 3/4
...
options {
...
allow-query { trusted; }; # allows queries from "trusted" clients
...
在文件末尾,添加以下行:
/etc/named.conf - 4的4
include "/etc/named/named.conf.local";
现在保存并退出
named.conf
。以上配置指定只有您自己的服务器(“受信任的”服务器)将能够查询您的DNS服务器。 接下来,我们将配置本地文件,以指定我们的DNS区域。 保存并退出
named.conf
。 现在编辑
named.conf.local
文件:
sudo chmod 755 /etc/named
sudo vi /etc/named/named.conf.local
定义与主DNS服务器上的主区域相对应的从区域。注意,该类型是“从”,则该文件中不包含的路径,并有一个
masters
应设置到主DNS服务器的私有IP指令。如果在主DNS服务器中定义了多个反向区域,请确保在此添加所有反向区域:
/etc/named/named.conf.local
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
。 运行以下命令检查配置文件的有效性:
sudo named-checkconf
一旦检出,启动BIND:
sudo systemctl start named
启用BIND在启动时启动:
sudo systemctl enable named
现在您有用于专用网络名称和IP地址解析的主要和辅助DNS服务器。现在您必须将服务器配置为使用您的专用DNS服务器。
配置DNS客户端
之前都在“信任”ACL服务器中可以查询你的DNS服务器,您必须配置他们每个人的使用 NS1和 NS2的域名服务器。 这个过程依赖于操作系统而异,但对于大多数Linux发行它涉及将您的域名服务器的/etc/resolv.conf
的文件。
CentOS客户端
在CentOS,红帽和Fedora Linux系统VPS,只需编辑resolv.conf
文件:
sudo vi /etc/resolv.conf
然后将以下行添加到文件的顶部(代替你的私人领地,而
NS1和
NS2私有IP地址):
/etc/resolv.conf
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服务器。
Ubuntu客户端
在Ubuntu和Debian Linux的VPS,您可以编辑head
文件,该文件前置到
resolv.conf
开机:
sudo vi /etc/resolvconf/resolv.conf.d/head
添加以下行到文件(代替你的私人领地,而
NS1和
NS2私有IP地址):
/etc/resolvconf/resolv.conf.d/head
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
文件中:
sudo resolvconf -u
您的客户端现在配置为使用您的DNS服务器。
测试客户端
使用nslookup
在-included的“绑定-utils的”包来测试,如果你的客户端可以查询你的域名服务器。您应该能够对所有已配置并位于“受信任的”ACL中的客户端执行此操作。
向前查找
例如,我们可以进行正向查找运行以下命令检索 host1.nyc3.example.com的IP地址:nslookup host1
查询“主机1”扩展为“因为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
反向查找
要测试反向查找,查询与 主机1的私有IP地址的DNS服务器: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。以下是您需要执行的步骤列表:主Nameservers
- 转发区域文件:为新主机添加“A”记录,增加“串行”
- 反向区域文件:为新主机添加“PTR”记录,增加“串行”
- 新主机的私有IP地址添加到“受信任”的ACL(
named.conf.options
)
sudo systemctl reload named
辅助Nameservers
- 新主机的私有IP地址添加到“受信任”的ACL(
named.conf.options
)
sudo systemctl reload named
配置新主机以使用您的DNS
- 配置resolv.conf以使用您的DNS服务器
- 使用测试
nslookup