在 RHEL/CentOS 6.5 中使用“Bind”工具设置主从 DNS 服务器
域名服务器 (DNS),用于解析任何主机的名称。主 DNS 服务器(主服务器)是原始区域数据处理程序,从 DNS 服务器(辅助服务器)只是备份服务器,用于从 DNS 复制相同的区域信息。主服务器。主服务器将解析我们在区域数据库中定义的每个主机的名称并使用UDP协议,因为UDP协议从不使用确认过程,而tcp使用确认。 DNS服务器也使用UDP协议最早解析查询请求。
DNS 是如何工作的?
对于新手来说,了解 DNS 可能会有点困惑。以下是 DNS 工作原理的简要说明。
比方说,如果我们需要访问任何网站,我们会做什么?只需在浏览器中输入 www.google.com 并按 Enter 键即可。嗯,这就是我们所知道的一切,但事实是,DNS 在为我们查询时经历了多么痛苦的过程。当我们输入 www.google.com 时,系统将查找 www.google.com。每当我们输入某个域名时,www.google.com 末尾都会有一个.(点),表示要搜索命名空间的根服务器。
全球有 13 个根服务器可用于解决查询。首先,当我们输入 www.google.com 时,我们的浏览器会将请求传递给我们的本地解析器,其中包含有关我们的主 DNS 服务器信息和从属 DNS 服务器信息的条目。如果他们没有有关此类请求查询的信息,他们会将请求传递到顶级域(TLD),如果 TLD 说我不知道该请求,则可能是权威服务器知道您的请求时,会转发到权威服务器,这里仅将www.google.com定义为地址72.36.15.56。
同时,权威服务器将给出 TLD 的答案,TLD 将传递给根服务器,根服务器将信息提供给浏览器,因此浏览器将缓存 DNS 请求以供将来使用。因此,这些漫长的过程将在几毫秒内解决。如果他们不知道该请求,他们将作为 NXDOMAIN 进行回复。这意味着,在区域数据库中没有找到任何记录。希望这能让您了解 DNS 的工作原理。
另请阅读:在 Ubuntu 中设置 DNS 缓存服务器
我的测试环境
在本文中,我使用 3 台机器,其中 2 台用于服务器设置(主服务器和从属服务器),1 台用于客户端。
---------------------------------------------------
Master DNS Server
---------------------------------------------------
IP Address : 192.168.0.200
Host-name : masterdns.tecmintlocal.com
OS : Centos 6.5 Final
---------------------------------------------------
Slave DNS Server
---------------------------------------------------
IP Address : 192.168.0.201
Host-name : slavedns.tecmintlocal.com
OS : Centos 6.5 Final
---------------------------------------------------
Client Machine to use DNS
---------------------------------------------------
IP Address : 192.168.0.210
Host-name : node1.tecmintlocal.com
OS : Centos 6.5 Final
需求包
bind, bind-utils, bind-chroot
使用的配置文件
config file : /etc/named.conf
script file : /etc/init.d/named
使用的端口和协议
53, UDP
设置主 DNS 服务器
首先,在继续设置之前验证主 DNS 服务器的 IP 地址、主机名和分发版本。
sudo ifconfig | grep inet
hostname
cat /etc/redhat-release
一旦确认上述设置正确,就可以继续安装所需的软件包了。
sudo yum install bind* -y
安装和配置绑定
安装所需的软件包后,现在在主配置“named.conf”文件中定义区域文件。
sudo vim /etc/named.conf
下面给出的是我的 named.conf 文件条目,根据您的需要更改配置文件。
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.0.200; }; # Here we need to add our Master DNS Server IP.
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.0.0/24; }; # subnet range where my hosts are allowed to query our DNS.
allow-transfer { localhost; 192.168.0.201; }; # Here we need to our Slave DNS server IP.
recursion no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
## Define our forward & reverse Zone file here for tecmintlocal.com.
zone"tecmintlocal.com" IN {
type master;
file "tecmintlocal.fwd.zone";
allow-update { none; };
};
zone"0.168.192.in-addr.arpa" IN {
type master;
file "tecmintlocal.rev.zone";
allow-update { none; };
};
#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
以下是我们在上面文件中使用的每个配置的解释。
- 侦听端口 53 – 用于 DNS 侦听可用接口。
- 主 DNS – 定义您的主 DNS IP 地址以侦听查询。
- 从属 DNS – 定义您的从属 DNS,用于同步我们的区域信息以解析主服务器的主机。
- recursion no – 如果设置为yes,递归查询将使服务器遭受DDOS攻击。
- 区域名称 – 在此处定义您的区域名称,定义为 tecminlocal.com。
- type master – 由于该系统是为主服务器配置的,因此对于即将推出的从服务器,这将是从服务器。
- howtoinglocal.fwd.zone – 该文件包含该区域的主机信息。
- allow-update none – 如果没有则设置。它不会使用动态 DNS (DDNS)。
创建主区域文件
首先让我们定义前向查找区域条目。这里我们需要以我们在 named.conf 文件中定义的名称创建区域文件,如下所示。
tecmintlocal.fwd.zone
tecmintlocal.rev.zone
我们使用示例配置文件来创建转发区域文件,为此我们必须复制示例配置文件。
sudo cp /var/named/named.localhost /var/named/tecmintlocal.fwd.zone
sudo cp /var/named/named.loopback /var/named/tecmintlocal.rev.zone
一旦您复制了配置文件,现在使用 vim 编辑器编辑这些区域文件。
sudo vim /var/named/tecmintlocal.fwd.zone
在转发区域文件中定义主机信息之前,首先快速浏览一下示例区域文件。
这是我的前向区域配置,附加以下条目并根据您的需要进行更改。
$TTL 86400
@ IN SOA masterdns.tecmintlocal.com. root.tecmintlocal.com. (
2014090401 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
; Name server's
@ IN NS masterdns.tecmintlocal.com.
@ IN NS slavedns.tecmintlocal.com.
; Name server hostname to IP resolve.
@ IN A 192.168.0.200
@ IN A 192.168.0.201
; Hosts in this Domain
@ IN A 192.168.0.210
@ IN A 192.168.0.220
masterdns IN A 192.168.0.200
slavedns IN A 192.168.0.201
node1 IN A 192.168.0.210
rhel1 IN A 192.168.0.220
使用wq!保存并退出文件。编辑正向查找后,如下所示,使用 TAB 在区域文件中获得合适的格式。
现在,创建反向查找文件,我们已经以 howtoinglocal.rev.zone 的名称复制了环回文件。因此,我们使用此文件来配置反向查找。
sudo vim /var/named/tecmintlocal.rev.zone
在反向区域文件中定义主机信息之前,请快速查看示例反向查找文件,如下所示。
这是我的反向区域配置,附加以下条目并根据您的需要进行更改。
$TTL 86400
@ IN SOA masterdns.tecmintlocal.com. root.tecmintlocal.com. (
2014090402 ; serial
3600 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
; Name server's
@ IN NS masterdns.tecmintlocal.com.
@ IN NS slavedns.tecmintlocal.com.
@ IN PTR tecmintlocal.com.
; Name server hostname to IP resolve.
masterdns IN A 192.168.0.200
slavedns IN A 192.168.0.201
;Hosts in Domain
node1 IN A 192.168.0.210
rhel IN A 192.168.0.220
200 IN PTR masterdns.tecmintlocal.com.
201 IN PTR slavedns.tecmintlocal.com.
210 IN PTR node1.tecmintlocal.com.
220 IN PTR rhel1.tecmintlocal.com.
使用wq!保存并退出文件。编辑反向查找后,如下所示,使用 TAB 在区域文件中获得合适的格式。
在检查配置中是否有任何错误之前,请检查正向查找和反向查找文件的组所有权。
sudo ls -l /var/named/
在这里我们可以看到这两个文件都属于 root 用户所有权,因为我们从示例文件复制的文件位于 /var/named/ 下。使用以下命令将两个文件上的组更改为已命名。
sudo chgrp named /var/named/tecmintlocal.fwd.zone
sudo chgrp named /var/named/tecmintlocal.rev.zone
在文件上设置正确的所有权后,再次验证它们。
sudo ls -l /var/named/
现在,在启动 DNS 服务之前检查区域文件中的错误。首先检查 named.conf 文件,然后检查其他区域文件。
sudo named-checkconf /etc/named.conf
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.fwd.zone
sudo named-checkzone masterdns.tecminlocal.com /var/named/tecmintlocal.rev.zone
默认情况下 iptables 正在运行,并且我们的 DNS 服务器仅限于 localhost,如果客户端想要从我们的 DNS 服务器解析名称,那么我们必须允许入站请求,为此我们需要为端口 53 添加 iptables 入站规则。
sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
现在,验证规则是否已正确添加到 INPUT 链中。
sudo iptables -L INPUT
接下来,保存规则并重新启动防火墙。
sudo service iptables save
sudo service iptables restart
启动指定服务并使其持久化。
sudo service named start
sudo chkconfig named on
sudo chkconfig --list named
最后,使用 dig 和 nslookup 工具测试配置的主 DNS 区域文件(正向和反向)。
dig masterdns.tecmintlocal.com [Forward Zone]
dig -x 192.168.0.200
nslookup tecmintlocal.com
nslookup masterdns.tecmintlocal.com
nslookup slavedns.tecmintlocal.com
凉爽的!我们已经配置了主 DNS,现在我们需要设置从 DNS 服务器。让我们继续设置从服务器,这不会花费太多时间作为主服务器设置。
设置从属 DNS 服务器
在从机中,我们还需要安装与主机中所示相同的绑定包,所以让我们使用以下命令安装它们。
sudo yum install bind* -y
打开并编辑我们的区域数据库和端口侦听的“named.conf”文件。
sudo vim /etc/named.conf
根据您的要求进行如图所示的更改。
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; 192.168.0.201}; # Our Slave DNS server IP
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 192.168.0.0/24; };
recursion no;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
## Define our slave forward and reverse zone, Zone files are replicated from master.
zone"tecmintlocal.com" IN {
type slave;
file "slaves/tecmintlocal.fwd.zone";
masters { 192.168.0.200; };
};
zone"0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/tecmintlocal.rev.zone";
masters { 192.168.0.200; };
};
#####
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
使用启动 DNS 服务。
sudo service named start
重新启动绑定服务后,我们不必单独定义区域信息,因为我们的 allow-transfer 将从主服务器复制区域信息,如下图所示。
sudo ls -l /var/named/slaves
使用 cat 命令验证区域信息。
sudo cat /var/named/slaves/tecmintlocal.fwd.zone
sudo cat /var/named/slaves/tecmintlocal.rev.zone
接下来,在 iptables 上打开 DNS 端口 53 以允许入站连接。
sudo iptables -I INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
保存 iptables 规则并重新启动 iptables 服务。
sudo service iptables save
sudo service iptables restart
使服务在系统启动时持续存在。
sudo chkconfig iptables on
Check whether persistent set for run-levels .
sudo chkconfig --list iptables
就是这样!。现在是时候配置我们的客户端计算机并检查主机名了。
配置客户端机器
在客户端,我们需要在网络设置中分配主要 (192.168.0.200) 和辅助 DNS (192.168.0.201) 条目以分配主机名。为此,请运行安装命令来定义所有这些条目,如图所示。
setup
否则,编辑“/etc/reslov.conf”文件并添加以下条目。
vim /etc/resolv.conf
search tecmintlocal.com
nameserver 192.168.0.200
nameserver 192.168.0.201
现在,验证 IP、主机名和名称服务器查找。
ifconfig | grep inet
hostname
nslookup tecmintlocal.com
现在,使用以下命令检查正向和反向 DNS 查找。
dig masterdns.tecmintlocal.com
dig -x 192.168.0.200
了解挖掘输出:
- 标题 – 这说明了我们所要求的一切以及结果如何。
- 状态 – 状态为“无错误”,这意味着我们发送的查询请求成功,没有任何错误。
- 问题 – 我们提出的查询,这里我的查询是masterdns.howtoinglocal.com。
- 应答 – 如果有可用信息,则查询请求已解决。
- 权威 – 名称服务器对域和区域的响应。
- 附加 – 有关名称服务器的附加信息,例如主机名和 IP 地址。
- 查询时间 – 从上述服务器解析名称所花费的时间。
最后检查我们的节点并进行 ping 操作。
dig node1.tecmintlocal.com
ping masterdns.tecmintlocal.com -c 2
ping slavedns.tecmintlocal.com -c 2
ping 192.168.0.200 -c 2
ping 192.168.0.201 -c 2
最后,设置完成,这里我们已经成功配置了主(主)和从(辅)DNS服务器,希望大家都设置好了没有任何问题,如果您在设置时遇到任何问题,请随时发表评论。