介绍
管理服务器配置和基础架构的一个重要部分包括通过设置正确的域名系统(DNS),保持通过名称查找网络接口和IP地址的简单方法。 使用完全限定域名(FQDN)(而不是IP地址)来指定网络地址可以简化服务和应用程序的配置,并增加配置文件的可维护性。 为您的专用网络设置自己的DNS是改进服务器管理的好方法。
在本教程中,我们将讨论如何设置内部DNS服务器,使用Ubuntu 16.04上的BINDNameservers软件(BIND9),您的服务器可以使用它来解析专用主机名和专用IP地址。 这提供了一种管理内部主机名和专用IP地址的中央方法,当您的环境扩展到多个主机时,这是必不可少的。
本教程的CentOS的版本可以找到这里 。
先决条件
要完成本教程,您需要以下内容:
- 在具有相同的数据中心中运行的某些服务器专用网络启用 。 这些将是您的DNS客户端。
- 一个新的服务器作为主DNS服务器,NS1
- (推荐)一个新的服务器作为辅助DNS服务器,NS2
- 有管理访问
sudo
用户以上的服务器。 您可以按照我们的Ubuntu 16.04服务器初始设置指南设置此。
如果你不熟悉DNS的概念,建议你至少阅读我们的前三部分介绍管理DNS 。
基础架构和目标示例
为了本文的目的,我们假设如下:
- 我们有两个现有的客户端服务器,将利用我们创建的DNS基础设施。 我们将调用这些host1和host2本指南的 您可以添加任意数量的您的基础设施。
- 我们有另外两个服务器,它们将被指定为我们的DNSNameservers。 我们将把这些作为本指南中NS1和NS2。
- 所有这些服务器都存在于同一个数据中心中。 我们将假定这是在nyc3数据中心。
- 所有这些服务器启用专用网络(并且是在
10.128.0.0/16
子网中。你可能会需要调整该为你的服务器)。 - 所有服务器都与我们在“example.com”上运行的Web应用程序有关。
有了这些假设,我们决定使用使用“nyc3.example.com”来引用我们的私有子网或区域的命名方案是有意义的。 因此, 主机1的私人完全合格的域名(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 |
host1 | 通用主机1 | host1.nyc3.example.com | 10.128.100.101 |
host2 | 通用主机2 | host2.nyc3.example.com | 10.128.200.102 |
在本教程结束后,我们将有一个主DNS服务器,NS1和可选的辅助DNS服务器,NS2,这将作为备份。
让我们开始安装我们的主DNS服务器ns1。
在DNS服务器上安装BIND
host1.nyc3.example.com
,用自己的服务器的FQDN替换它。
同样,如果你看到host1_private_IP
,用你自己的服务器的私有IP地址替换它。
在两台DNS服务器,NS1和NS2,更新apt
通过打字包缓存:
sudo apt-get update
现在安装BIND:
sudo apt-get install bind9 bind9utils bind9-doc
IPv4模式
继续之前,让我们将BIND设置为IPv4模式。 在两台服务器上,编辑bind9
通过键入systemd单元文件:
sudo systemctl edit --full bind9
添加“-4”到年底ExecStart
指令。 它应该如下所示:
. . .
[Service]
ExecStart=/usr/sbin/named -f -u bind -4
保存并在完成后关闭编辑器。
重新加载systemd守护程序以将新配置读入运行的系统:
sudo systemctl daemon-reload
重新启动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
块,创建一个名为“可信赖”的新ACL块。 在这里,我们将定义的客户名单,我们将允许递归DNS查询(即你的服务器是在同一数据中心NS1)。 使用我们的例子中私有IP地址,我们将增加NS1,NS2, 主机1,和host2我们值得信赖的客户名单:
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
除了几个注释,文件应该为空。 在这里,我们将指定我们的前进和后退区域。
添加带有以下行的正向区域(用您自己的区域名称替换):
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”为例,它看起来在正向区域文件来解析主机1的对应的私有IP地址。
让我们创建我们的区域文件将驻留的目录。 根据我们的named.conf.local配置,该位置应该是/etc/bind/zones
:
sudo mkdir /etc/bind/zones
我们将立足于样品我们前进区文件db.local
区域文件。 使用以下命令将其复制到正确的位置:
cd /etc/bind/zones
sudo cp ../db.local ./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,然后用“admin.nyc3.example.com”替换“root.localhost”。 此外,每次你编辑区域文件时,你应该重新启动之前增加序列值named
过程。 我们将其增加到“3”。 它应该看起来像这样:
@ IN SOA ns1.nyc3.example.com. admin.nyc3.example.com. (
3 ; Serial
. . .
现在删除文件末尾的三个记录(在SOA记录之后)。 如果您不确定要删除哪些行,它们将标记上面的“删除此行”注释。
在文件末尾,使用以下行添加您的Nameservers记录(将名称替换为您自己的名称)。 注意,第二列指定这些是“NS”记录:
. . .
; 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像这样:
. . .
; 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
文件,创建一个反向区域文件。 我们将立足于我们的样本反向区域文件(S) db.127
区域文件。 使用以下命令将其复制到正确的位置(替换目标文件名,使其与您的反向区域定义相匹配):
cd /etc/bind/zones
sudo cp ../db.127 ./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记录之后)。 如果您不确定要删除哪些行,它们将标记上面的“删除此行”注释。
在文件末尾,使用以下行添加您的Nameservers记录(将名称替换为您自己的名称)。 注意,第二列指定这些是“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 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
在文件顶部,添加具有所有受信任服务器的专用IP地址的ACL:
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
文件。 这个文件应该看起来就像NS1的named.conf.options
文件,除了它应该被配置为侦听NS2的私有IP地址。
现在编辑named.conf.local
文件:
sudo nano /etc/bind/named.conf.local
定义与主DNS服务器上的主区域相对应的从区域。 注意,该类型是“从”,则该文件中不包含的路径,并有一个masters
应设置到主DNS服务器的私有IP指令。 如果在主DNS服务器中定义了多个反向区域,请确保在此添加所有反向区域:
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 restart bind9
通过更改UFW防火墙规则允许与服务器的DNS连接:
sudo ufw allow Bind9
现在您有用于专用网络名称和IP地址解析的主要和辅助DNS服务器。 现在,您必须将客户端服务器配置为使用您的专用DNS服务器。
配置DNS客户端
之前都在“信任”ACL服务器中可以查询你的DNS服务器,您必须配置他们每个人的使用NS1和NS2的域名服务器。 这个过程依赖于操作系统而异,但对于大多数Linux发行它涉及将您的域名服务器的/etc/resolv.conf
的文件。
Ubuntu客户端
在Ubuntu和Debian Linux服务器,您可以编辑/etc/network/interfaces
文件:
sudo nano /etc/network/interfaces
在内部,找到dns-nameservers
线,并且在目前是有名单的前面在前面加上你自己的域名服务器。 下面那行,添加dns-search
选项指出,基础设施的基础领域。 在我们的例子中,这将是“nyc3.example.com”:
. . .
dns-nameservers 10.128.10.11 10.128.20.12 8.8.8.8
dns-search nyc3.example.com
. . .
保存并在完成后关闭文件。
现在,重新启动网络服务,使用以下命令应用新更改。 请确保您更换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,红帽和Fedora Linux系统VPS,编辑/etc/sysconfig/network-scripts/ifcfg- eth0
文件。 您可能需要替换eth0
与主网络接口的名称:
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
搜索DNS1
和DNS2
选项,并将其设置为主要和次要域名服务器的私有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
您应该在列表中看到您的Nameservers和搜索域:
nameserver 10.128.10.11
nameserver 10.128.20.12
search nyc3.example.com
测试客户端
使用nslookup
测试,如果你的客户端可以查询你的域名服务器。 您应该能够对所有已配置并位于“受信任的”ACL中的客户端执行此操作。
对于CentOS客户端,您可能需要安装以下实用程序:
sudo yum install bind-utils
向前查找
例如,我们可以进行正向查找运行以下命令检索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
您应该看到类似以下的输出:
OutputServer: 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
)
然后重新加载BIND:
sudo systemctl reload bind9
辅助Nameservers
- 新主机的私有IP地址添加到“受信任”的ACL(
named.conf.options
)
然后重新加载BIND:
sudo systemctl reload bind9
配置新主机以使用您的DNS
- 配置
/etc/resolv.conf
使用您的DNS服务器 - 使用测试
nslookup
从DNS中删除主机
如果你从你的环境中删除一个主机或者想把它从DNS中删除,只需删除所有添加到DNS服务器时添加的东西(即上述步骤的相反)。
结论
现在您可以按名称而不是IP地址引用您的服务器的专用网络接口。 这使得服务和应用程序的配置更容易,因为您不再需要记住私有IP地址,并且文件将更容易阅读和理解。 此外,现在您可以将配置更改为指向单个位置(即主DNS服务器)中的新服务器,而不必编辑各种分布式配置文件,这样便于维护。
一旦你有你的内部DNS设置和配置文件正在使用专用的FQDN指定的网络连接, 关键是你的DNS服务器正确维护。 如果它们都不可用,您的服务和依赖它们的应用程序将停止正常工作。 这就是为什么建议您使用至少一个辅助服务器设置DNS,以及维护所有辅助服务器的工作备份。