A-A+

RedHat搭建DNS服务器的方法

2015年12月13日 站长资讯 暂无评论

由于人类对于数字远远不如文字来得敏感,偏偏计算机的世界中仅认识0,1而已。为了将两者结合起来,于是就有了主机名称与IP的对应,这个对应的协议就是DNS。

DNS的作用就是正向将ip地址解析为域名,人们记忆起来会比较方便。本篇文章将会介绍如何在linux下部署dns服务器。

以下是部署dns的过程:

基本场景

某单位需要配置两台 DNS 服务器来实现域名解析。

wKioL1P-9Y3hX4dFAAA-zgRxBuI282.gif

您的实验环境的 IP 地址

ns1.abc.local ns2.abc.local

192.168.1.241 192.168.1.242

需要完成以下域名的解析:

  1. ftp.abc.local    
  2. 10.0.0.1   
  3. mailsrv1.abc.local 10.0.0.2   
  4. smtp.abc.local   
  5. 10.0.0.2   
  6. pop3.abc.local   
  7. 10.0.0.2   
  8. www.abc.local    
  9. 10.0.0.3、10.0.0.4(两个主机,以平衡负荷)   

smtp 及 pop3 需要使用 CNAME 来进行解析。同时,需要实现反向地址解析。

2. 实验环境

2.1. 服务器安装

  1. # cat /etc/redhat-release    
  2. Red Hat Enterprise Linux Server release 6.4 (Santiago)    
  3. # uname -a   
  4. Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29   
  5. 11:47:41 EST 2013 x86_64 x86_64 x86_64 GNU/Linux   

2.2. 服务器基本配置

ns1.abc.local 的配置。

修改IP地址。 (注意:根据您的实现环境进行配置)

  1. # vi /etc/sysconfig/network-scripts/ifcfg-eth0   
  2. DEVICE=eth0   
  3. TYPE=Ethernet   
  4. ONBOOT=yes   
  5. NM_CONTROLLED=yes   
  6. BOOTPROTO=static   
  7. IPADDR=192.168.1.241   
  8. NETMASK=255.255.255.0   
  9. GATEWAY=192.168.1.1   

修改主机名

  1. # vi /etc/sysconfig/network   
  2. NETWORKING=yes   
  3. #HOSTNAME=localhost.localdomain   
  4. HOSTNAME=ns1.abc.local  

重新启动以便主机名更改生效

# reboot

为了方便实验,将防火墙关闭

# service iptables stop

# chkconfig iptables off

同时关闭 selinux (这时十分重要的,不然很多都是实现不了)

  1. # vi /etc/sysconfig/selinux   
  2. # This file controls the state of SELinux on the system.   
  3. SELINUXcan take one of these three values:   
  4. #     enforcing - SELinux security policy is enforced.   
  5. #     permissive - SELinux prints warnings instead of enforcing.   
  6. #     disabled - No SELinux policy is loaded.   
  7. #SELINUX=enforcing   
  8. SELINUX=disabled    
  9. SELINUXTYPEcan take one of these two values:   
  10. #     targeted - Targeted processes are protected,   
  11. #     mls - Multi Level Security protection.   
  12. SELINUXTYPE=targeted  

与此类似,修改 ns2.abc.local 的配置。

3. DNS 客户机配置

修改/etc/resolv.conf 将 DNS 服务器配置

  1. # vi /etc/resolv.conf   
  2. nameserver 192.168.1.241   
  3. nameserver 192.168.1.242  

测试解析域名 www.xiaoxiongboke.com

# nslookup www.xiaoxiongboke.com

;; connection timed out; trying next origin

;; connection timed out; no servers could be reached

问题:为什么无法解析?

回答:本机 DNS 服务器没有启动,通过以下命令检查 named 是否启动

# ps aux | grep named

root 1776 0.0 0.0 103236 860 pts/0 S+ 20:15 0:00 grep named

切换 DNS 服务器,再重新进行尝试

  1. # nslookup   
  2. > server 202.102.224.68 (指向另一台服务器,外网)  
  3. Default server: 202.102.224.68   
  4. Address: 202.102.224.68#53   
  5. > www.xiaoxiongboke.com   
  6. Server:         202.102.224.68   
  7. Address:        202.102.224.68#53  

Non-authoritative answer: (非权威应答,意思是从别的dns服务器那里得到的答案,这个提示是正常的,因为总是有人会误以为是错误的)

  1. www.xiaoxiongboke.com canonical name = jupiter.xiaoxiongboke.com.   
  2. jupiter.xiaoxiongboke.com     canonical name = polaris.xiaoxiongboke.com.   
  3. Name:   polaris.sina.com.cn   
  4. Address: 202.108.33.60   
  5. > exit  

问题:为什么这样可以解析?

回答:切换了 DNS 服务器,而且本机可以访问 Internet

4. DNS 服务器组件安装

4.1. 通过 rpm 来进行安装

  1. # mkdir /mnt/cdrom   
  2. # mount /dev/cdrom /mnt/cdrom/   
  3. mount: block device /dev/sr0 is write-protected, mounting read-only    
  4. # cd /mnt/cdrom/Packages/   
  5. # ls bind*   
  6. bind-9.8.2-0.17.rc1.el6.x86_64.rpm           
  7. bind-dyndb-ldap-2.3-2.el6.x86_64.rpm     
  8. bind-libs-9.8.2-0.17.rc1.el6.x86_64.rpm   
  9. bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm    
  10. bind-libs-9.8.2-0.17.rc1.el6.i686.rpm    
  11. bind-utils-9.8.2-0.17.rc1.el6.x86_64.rpm   
  12. # rpm -Uvh bind-9.8.2-0.17.rc1.el6.x86_64.rpm    
  13. error: Failed dependencies:   
  14.         portreserve is needed by bind-32:9.8.2-0.17.rc1.el6.x86_64   
  15. # rpm -Uvh bind-9.8.2-0.17.rc1.el6.x86_64.rpm \   
  16. portreserve-0.0.4-9.el6.x86_64.rpm    
  17.     
  18. Preparing...                ########################################### [100%]  
  19.   
  20.   
  21.    1:portreserve           ########################################### [ 50%]   
  22.    2:bind   ######################### [100%]  

4.2. 通过 yum 来进行安装

还可以通过 yum 来进行安装,前提条件是配置过 yum 的 repositories

还有如果你的虚拟机是可以联网的,就不用再配置yum库了,直接用下面的命令从网上下载资源安装

# yum -y install bind

4.3. 基本配置

查看配置文件

  1. # rpm -qc bind   
  2. /etc/logrotate.d/named   
  3. /etc/named.conf   
  4. /etc/named.iscdlv.key   
  5. /etc/named.rfc1912.zones   
  6. /etc/named.root.key   
  7. /etc/rndc.conf   
  8. /etc/rndc.key   
  9. /etc/sysconfig/named    
  10. /var/named/named.ca   
  11. /var/named/named.empty   
  12. /var/named/named.localhost   
  13. /var/named/named.loopback   

其中,/etc/named.conf 为主配置文件。

新开一个会话,通过 tail -f 命令观察日志:

# tail -f /var/log/messages

启动服务

# service named start

Generating /etc/rndc.key:

第一次生成 key 会慢一些。

[ OK ]
Starting named: [ OK ]

生成 key 慢,这是一个已知的问题。以后就不会出现此问题了。

# service named restart

Stopping named: . [ OK ]

Starting named: [ OK ]

速度很快

# ps aux | grep named

named 1862 0.0 0.5 159204 11048 ? Ssl 20:33 0:00 /usr/sbin/named -u named

root 1870 0.0 0.0 103236 860 pts/0 S+ 20:35 0:00 grep named

修改配置文件。

在修改之前,先进行备份,这是一个好习惯

  1. # cp /etc/named.conf  /etc/named.conf.original   
  2.    
  3. # netstat -an | grep :53   
  4. tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN         
  5. tcp        0      0 ::1:53                      :::*                        LISTEN         
  6. udp        0      0 127.0.0.1:53                0.0.0.0:*                                  
  7. udp        0      0 ::1:53    
  8. # vi /etc/named.conf  

注意配置文件中的分号

建议:先将原有配置注释,再写新的配置,如下所示

  1. options {   
  2.         //listen-on port 53 { 127.0.0.1; };   
  3.         listen-on port 53 { any; };  

将 dnssec 设置"yes"修改为 no,示例如下:

  1. //dnssec-enable yes;   
  2. dnssec-enable no;   
  3. //dnssec-validation yes;   
  4. dnssec-validation no;   
  5. dnssec-lookaside auto;  

将 allow-query 设置修改为 any,示例如下:

  1. //allow-query     { localhost; };   
  2. allow-query     { any; };  

重新启动服务

  1. # service named restart   
  2. Stopping named: .   [  OK  ]   
  3. Starting named:     [  OK  ]   
  4. # netstat -an | grep :53   
  5. tcp        0      0 192.168.1.241:53            0.0.0.0:*                   LISTEN         
  6. tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN         
  7. tcp        0      0 ::1:53                      :::*                        LISTEN        
  8.   
  9.   
  10. udp        0      0 192.168.1.241:53            0.0.0.0:*                                  
  11. udp        0      0 127.0.0.1:53                0.0.0.0:*                                  
  12. udp        0      0 ::1:53   
  13. # chkconfig named on   
  14. # chkconfig --list named   
  15. named           0:off   1:off   2:on    3:on    4:on    5:on    6:off  

此时的 DNS 服务器是 cache only 服务器,只有 root 域的记录。

5. 主 DNS 服务器配置

5.1. 创建正向 ZONE

# vi /etc/named.conf

会看到 directory "/var/named";

配置文件的目录中/var/named

在配置文件的后面添加如下信息

  1. zone "abc.local" IN {   
  2.         type master;   
  3.         file "abc.local.zone";   
  4. };   
  5.    
  6. # cd /var/named/   
  7. # ls   
  8. data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves  

使用空白模板来进行创建新的 zone 文件

  1. # cp named.empty abc.local.zone   
  2. # vi abc.local.zone   
  3. $TTL 3H   
  4. @       IN SOA  ns1.abc.local. admin.abc.local. (   
  5.     0       ; seria 序列号   
  6.     1D      ; refresh 辅助域名服务器多少时间更新数据   
  7.     1H      ; retry 若辅助域名服务器更新数据失败,多少时间再试   
  8.     1W      ; expire 若辅助域名服务器无法从主服务器上更新数据,原有数据有效期   
  9.     3H )    ; minimum 若资源记录没有设定 TTL,则以此 TTL 为准   
  10.            NS   ns1.abc.local.   
  11. ns1        A    192.168.1.241   
  12. ftp        A    10.0.0.1   
  13. mailsrv1   A    10.0.0.2   
  14. www     A       10.0.0.3   
  15. www     A       10.0.0.4   
  16. smtp    CNAME   mailsrv1.abc.local.   
  17. pop3    CNAME   mailsrv1.abc.local.  

修改新创建配置文件的属主。

# chown root:named /var/named/abc.local.zone

# rndc status

修改配置之后,有两种方法以修改生效

方法 1:重新启动服务

  1. # service named restart   
  2. Stopping named:        [  OK  ]   
  3. Starting named:        [  OK  ]   

方法 2:使用 rndc

# rndc reload

server reload successful

测试一下:

  1. # nslookup ns1.abc.local   
  2. # nslookup mailsrv1.abc.local   
  3. # nslookup smtp.abc.local   
  4. # nslookup pop3.abc.local   
  5. # nslookup www.abc.local   
  6. # nslookup www.abc.local   

注意观察,两次对 www.abc.local 解析的结果的不同

  1. Server:         192.168.1.241   
  2.   
  3. Address:        192.168.1.241#53   
  4.    
  5. # rndc status   
  6. version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6   
  7. CPUs found: 1   
  8. worker threads: 1   
  9. number of zones: 20    

增加了一个 zone

  1. debug level: 0   
  2. xfers running: 0   
  3. xfers deferred: 0   
  4. soa queries in progress: 0   
  5. query logging is OFF   
  6. recursive clients: 0/0/1000   
  7. tcp clients: 0/100   
  8. server is up and running   

5.2. 创建反向 ZONE

# vi /etc/named.conf

在配置文件的后面添加如下信息,这里一定要写反向的地址

  1. zone "0.0.10.in-addr.arpa" IN {   
  2.         type master;   
  3.         file "10.0.0.zone";   
  4. };   
  5.    
  6. # cd /var/named/   
  7. # cp abc.local.zone  10.0.0.zone   
  8.    
  9. # vi 10.0.0.zone  

修改配置文件,内容如下:

  1. $TTL 3H   
  2. @       IN SOA  ns1.abc.local. admin.abc.local. (   
  3.                                         0       ; serial  
  4.   
  5.   
  6.                                         1D      ; refresh   
  7.                                         1H      ; retry   
  8.                                         1W      ; expire   
  9.                                         3H )    ; minimum   
  10.        NS       ns1.abc.local.   
  11. 1      PTR      ftp.abc.local.   
  12. 2      PTR      mailsrv1.abc.local.   
  13. 3      PTR      www.abc.local.   
  14. 4      PTR      WWW.abc.local.   
  15. ~   

修改新创建配置文件的属主。

  1. # chown root:named /var/named/10.0.0.zone   
  2. # rndc reload   
  3. server reload successful   

查看日志文件中是否有错误信息

  1. # rndc status   
  2. version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6   
  3. CPUs found: 1   
  4. worker threads: 1   
  5. number of zones: 21   

增加了一个 zone

  1. debug level: 0   
  2. xfers running: 0   
  3. xfers deferred: 0   
  4. soa queries in progress: 0   
  5. query logging is OFF   
  6. recursive clients: 0/0/1000   
  7. tcp clients: 0/100   
  8. server is up and running  

验证一下:

  1. # nslookup 10.0.0.1   
  2. Server:         192.168.1.241   
  3. Address:        192.168.1.241#53   
  4.    
  5. 1.0.0.10.in-addr.arpa   name = ftp.abc.local.   
  6.    
  7. # nslookup 10.0.0.2   
  8. Server:         192.168.1.241   
  9. Address:        192.168.1.241#53   
  10.    
  11. 2.0.0.10.in-addr.arpa   name = mailsrv1.abc.local.   
  12.    
  13. # nslookup 10.0.0.3   
  14. Server:         192.168.1.241   
  15. Address:        192.168.1.241#53   
  16.    
  17. 3.0.0.10.in-addr.arpa   name = www.abc.local.   
  18.    
  19. # nslookup 10.0.0.4   
  20. Server:         192.168.1.241   
  21. Address:        192.168.1.241#53   
  22.    
  23. 4.0.0.10.in-addr.arpa   name = WWW.abc.local.   

6.配置转发器

场景:

缺省情况下, DNS 服务器为会为不在本机所管理的域信息通过迭代的方式从根服务器查起。由于多数根服务器主要在国外,速度比较慢。现在希望通过配置转发器,将查询发给本地 ISP 的 DNS 服务器以提高效率。 以郑州为例,可以使用:

网通:202.102.224.68、202.102.227.68

电信:219.150.150.150

操作:

修改 DNS 主配置文件

# vi /etc/named.conf

在全局配置语句 option 中添加 forwarders 配置,注意分号

  1. options {   
  2. ……   
  3. forwarders {202.102.224.68; 202.102.227.68; 219.150.150.150; };   
  4. };   

需要重新启动 DNS 服务

# service named restart

我们可以通过 tcpdump 等抓包工具来查看是否进行了转发。

# tcpdump -n port 53

再打开一个会话,运行以下命令使用# nslookup www.msn.com 命令触发一个解析请求。 观察 tcpdump 的输出结果

  1. tcpdump: verbose output suppressed, use -v or -vv for full protocol decode   
  2. listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes   
  3. 11:39:25.862065 IP 192.168.1.241.60113 > 202.102.227.68.domain: 58544+% [1au] A?   
  4. www.msn.com. (40)   
  5. 11:39:25.862190 IP 192.168.1.241.62826 > 202.102.227.68.domain: 57413+ [1au] NS? . (28)   
  6. 11:39:26.108518 IP 202.102.227.68.domain > 192.168.1.241.60113: 58544 2/0/1 CNAME   
  7. us.co1.cb3.glbdns2.microsoft.com., A 131.253.13.140 (99)   
  8. 11:39:26.108755 IP 202.102.227.68.domain > 192.168.1.241.62826: 57413 13/0/11 NS   
  9. e.root-servers.net., NS j.root-servers.net., NS m.root-servers.net., NS g.root-servers.net., NS   
  10. b.root-servers.net., NS h.root-servers.net., NS f.root-servers.net., NS a.root-servers.net., NS   
  11. k.root-servers.net., NS c.root-servers.net., NS l.root-servers.net., NS i.root-servers.net., NS   
  12. d.root-servers.net. (423)   
  13. 11:39:26.109540 IP 192.168.1.241.25836 > 202.102.224.68.domain: 61158+% [1au] A?   
  14. us.co1.cb3.glbdns2.microsoft.com. (61)   
  15. 11:39:26.110633 IP 202.102.224.68.domain > 192.168.1.241.25836: 61158 1/0/1 A   
  16. 131.253.13.140 (77)   

可以看到,随机的转发到202.102.227.68上,查询到结果,解析出了www.msn.com

7. 辅助 DNS 服务器配置

场景:

为了提高域名服务可靠性,防止单点失败,企业新添加一个 DNS 服务器。由它作为abc.local 的辅助 DNS 服务器。

辅助名称服务主机为 ns2,IP 地址为 192.168.1.242

7.1. DNS 组件安装

与主 DNS 安装类似.

  1. # mount /dev/cdrom /mnt/cdrom/   
  2. # cd /mnt/cdrom/Packages/   
  3. # rpm -ivh bind-9.8.2-0.17.rc1.el6.x86_64.rpm \   
  4.  bind-libs-9.8.2-0.17.rc1.el6.x86_64.rpm  \   
  5. portreserve-0.0.4-9.el6.x86_64.rpm   

7.2. 配置 Zone 传递

在 NS1 上修改配置主配置文件,添加 ns2 的 NS 及 AY 记录。

  1. [root@ns1 ~]# vi /var/named/abc.local.zone   
  2. $TTL 3H   
  3. @       IN SOA  ns1.abc.local. admin.abc.local. (   
  4.                                         0       ; serial   
  5.                                         1D      ; refresh   
  6.                                         1H      ; retry   
  7.                                         1W      ; expire   
  8.                                         3H )    ; minimum  
  9.   
  10.   
  11.            NS   ns1.abc.local.   
  12.            NS   ns2.abc.local.   
标签:

给我留言