网站搜索

在 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";

以下是我们在上面文件中使用的每个配置的解释。

  1. 侦听端口 53 – 用于 DNS 侦听可用接口。
  2. 主 DNS – 定义您的主 DNS IP 地址以侦听查询。
  3. 从属 DNS – 定义您的从属 DNS,用于同步我们的区域信息以解析主服务器的主机。
  4. recursion no – 如果设置为yes,递归查询将使服务器遭受DDOS攻击。
  5. 区域名称 – 在此处定义您的区域名称,定义为 tecminlocal.com。
  6. type master – 由于该系统是为主服务器配置的,因此对于即将推出的从服务器,这将是从服务器。
  7. howtoinglocal.fwd.zone – 该文件包含该区域的主机信息。
  8. 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

最后,使用 dignslookup 工具测试配置的主 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

了解挖掘输出:

  1. 标题 – 这说明了我们所要求的一切以及结果如何。
  2. 状态 – 状态为“无错误”,这意味着我们发送的查询请求成功,没有任何错误。
  3. 问题 – 我们提出的查询,这里我的查询是masterdns.howtoinglocal.com。
  4. 应答 – 如果有可用信息,则查询请求已解决。
  5. 权威 – 名称服务器对域和区域的响应。
  6. 附加 – 有关名称服务器的附加信息,例如主机名和 IP 地址。
  7. 查询时间 – 从上述服务器解析名称所花费的时间。

最后检查我们的节点并进行 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服务器,希望大家都设置好了没有任何问题,如果您在设置时遇到任何问题,请随时发表评论。