开发者社区> 科技小先锋> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

RHCE培训笔记——DNS基础

简介:
+关注继续查看

DNS(Donmain Name Service)域名系统是一个分布式数据系统,其作用是将域名解析成IP地址。Linux DNS一般使用bind来完成,其中主要是对named服务的配置。

本文实验平台为Centos 6.2。
DNS服务器
主机名:itpro        IP地址:192.168.1.53
辅助DNS服务器
主机名:itsec        IP地址:192.168.1.54
客户端测试机
主机名:pca     IP地址:192.168.1.100
一、DNS服务器端配置
1.安装相关软件
bind是linux的DNS服务器程序,bind-chroot是bind的一个功能,使bind可以在一个chroot的模式下运行,也就是说bind运行时的/(根)目录并不是系统真正的/(根)目录,而是系统中的一个子目录,这样做的目的是为了提高安全性,因为在chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升、进入到系统的其他目录中。
[root@itpro ~]# yum install bind bind-chroot
[root@itpro ~]# service named start
Stopping named:                                            [  OK  ]
Generating /etc/rndc.key:^C
[root@itpro ~]# rndc-confgen -r /dev/urandom -a
wrote key file "/etc/rndc.key"
[root@itpro ~]# service named start
Stopping named:                                            [  OK  ]
Starting named:                                            [  OK  ]
[root@ itpro ~]# chkconfig named on
(注:实验之初,安装完成bind及bind-chroot后,重启named服务时,rndc找不到key,等半天没反应,主要原因在于RHEL6上没有caching-named这个包。在网上查到,使用rndc-confgen -r /dev/urandom –a这条命令可以解决问题。另,记得将named设为开机启动。)
进入到伪目录/var/named/chroot,
[root@itpro ~]# cd /var/named/chroot/
[root@itpro chroot]# ls
dev  etc  usr  var
[root@itpro chroot]# ls etc/
localtime  named.conf        named.rfc1912.zones  pki
named      named.iscdlv.key  named.root.key       rndc.key
[root@itpro chroot]# ls var/named/
chroot  dynamic   named.empty      named.loopback
data    named.ca  named.localhost  slaves
注:在伪目录里,也有etc和var目录,从这里读到的配置及软件相关文件,其实是根目录下/etc和/var里面文件的一部分,但其他与named服务不相关的文件就看不到了,提高了操作的安全性。
实际操作建议在伪目录中进行,也可以root目录下进行。
为避免路径过长或因切换路径等而作多余的啰嗦,本文是在root目录下进行的,请注意。
2.修改主配文件/etc/named.conf
在RHEL 6中,安装完bind后,将会自动生成主配文件named.conf,现要对其进行修改。
修改后的内容如下
[root@itpro ~]# cat /etc/named.conf

  1. options {

  2.        listen-on port 53 { any; };  //any表示监听所有客户端发来的信息

  3.        listen-on-v6 port 53 { any; };  //这个是针对IPv6的,当前环境下可以不改

  4.        directory       "/var/named";

  5.        dump-file       "/var/named/data/cache_dump.db";

  6.        statistics-file "/var/named/data/named_stats.txt";

  7.        memstatistics-file "/var/named/data/named_mem_stats.txt";

  8.        allow-query     { any; };  //any表示允许所有客户端进行dns查询

  9.        recursion yes;  //是否使用递归式DNS服务器,默认为yes

  10.        dnssec-enable yes;

  11.        dnssec-validation yes;

  12.        dnssec-lookaside auto;

  13.        /* Path to ISC DLV key */

  14.        bindkeys-file "/etc/named.iscdlv.key";

  15.        managed-keys-directory "/var/named/dynamic";

  16. };

  17. logging {

  18.        channel default_debug {

  19.                file "data/named.run";

  20.                severity dynamic;

  21.        };

  22. };

  23. zone "." IN {

  24.        type hint;  //表示这个区被定义为启动时初始化高速缓存的域名服务器

  25.        file "named.ca";

  26. };

  27. include "/etc/named.rfc1912.zones";

  28. include "/etc/named.root.key";

(注:主配置文件 named.conf里面只有“.”区域,在最下面有个 named.rfc1912.zones定义,是一个named.conf的辅助区域配置文件。意思是除了根域外,其他所有的区域配置建议在named.rfc1912.zones文件中配置,主要是为了方便管理,不轻易破坏主配置文件named.conf。)
3.修改辅助区域配置文件/etc/named.rfc1912.zones
在文件最末添加正向解析和反向解析域(注:本实验,正向解析、反向解析一并实现),
修改后的内容为:
[root@itpro ~]# cat /etc/named.rfc1912.zones

  1. …………省略部分输出…………

  2. zone "sq.com" IN {  //这个是正向解析区域,区域名一般使用需要被解析的域名

  3.        type master;  //master表示这个区被定义为主域名服务器

  4.        file "sq.com.zone";  //定义正向解析域的文件,名字随意,一般标记为:域名+.zone

  5.        allow-update { none; };

  6. };

  7. zone "200.96.202.in-addr.arpa" IN {  //这个是正向解析区域,这里遵循一般的命名格式

  8.        type master;

  9.        file "sq.com.local";  //定义反向解析域的文件, ,名字随意,一般标记为:域名+.local

  10.        allow-update { none; };

  11. };


4.创建解析文件
在/var/named中,以named.localhost为模板,创建正向和反向解析文件,
这两个文件的文件名,要以/etc/named.rfc1912.zones 文件中定义的一致,即sq.com.zone和sq.com.local
[root@itpro ~]# ls /var/named/
chroot  dynamic   named.empty      named.loopback
data    named.ca  named.localhost  slaves
[root@itpro named]# cp -p /var/named/named.localhost /var/named/sq.com.zone
[root@itpro named]# cp -p /var/named/named.localhost /var/named/sq.com.local
[root@itpro named]# ll /var/named/
total 44
drwxr-x---. 6 root  named 4096 Mar 18 02:04 chroot
drwxrwx---. 2 named named 4096 Mar 18 02:12 data
drwxrwx---. 2 named named 4096 Mar 22 06:11 dynamic
-rw-r-----. 1 root  named 1892 Feb 18  2008 named.ca
-rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
-rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
-rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx---. 2 named named 4096 Feb 23 14:26 slaves
-rw-r-----. 1 root  named  175 Mar 22 07:05 sq.com.local
-rw-r-----. 1 root  named  175 Mar 22 06:59 sq.com.zone
(注:使命cp命令时,要使用-p选项,以保留文件的权限属性。通过ll查看,可以看到这里的文件都是属于named用户组的,如果cp时不加-p选项,生成的文件将会属root用户组,不符合要求)
sq.com.zone文件内容为正向域名解析记录,修改后内容如下:
[root@itpro ~]# cat /var/named/sq.com.zone

  1. $TTL 1D

  2. @       IN SOA  ns.sq.com root (  //@表示当前域,IN指internet ,SOA起始授权机构,

  3.                              //root管理员邮箱地址,也可写作root.sq.com.,相当于root@sq.com.

  4.                                        0       ; serial

  5.                                        1D      ; refresh

  6.                                        1H      ; retry

  7.                                        1W      ; expire

  8.                                        3H )    ; minimum

  9.         NS     ns.sq.com.   // ns指定域名服务器,只是个名称

  10. ns      A       192.168.1.53  //指定域名服务器IP地址

  11. //以下增加目标解析文件,可以是www、ftp等

  12. www     A       202.96.200.111  //A指定域名对应IP,这里表示www.sq.com

  13. ftp     A       202.96.200.112  //如果还有其他服务,依次添加映射,如ftp

(注:输入的内容中,“ns.sq.com.”后面有一个“.”,表示根域,不能漏掉,如果不加,则表示nd.sq.com域还有后缀.sq.com, named会重启失败)
sq.com.local文件内容为反向域名解析记录,修改后内容如下:
[root@itpro ~]# cat /var/named/sq.com.local

  1. $TTL 1D

  2. @       IN SOA  ns.sq.com. root (

  3.                                        0       ; serial

  4.                                        1D      ; refresh

  5.                                        1H      ; retry

  6.                                        1W      ; expire

  7.                                        3H )    ; minimum

  8.        NS      ns.sq.com.

  9. ns      A       192.168.1.53

  10. 111     PTR     www.sq.com.  //反向解析是PTR

  11. 112     PTR     ftp.sq.com.

5.重启dns服务
[root@itpro ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
(如果重启报错,请检查设置是否正确)
二、客户端配置及测试
这里使用的客户端是Linux系统,需要修改resolv.conf文件,
如果是Windows客户端直接在本地连接属性窗口里改就可以了。
1.修改resolv.conf文件
使DNS指向域名服务器(192.168.1.53)
[root@ pca ~]# cat /etc/resolv.conf
nameserver 192.168.1.53
2.使用nslookup测试
[root@ pca ~]# nslookup www.sq.com
Server:         192.168.1.53
Address:        192.168.1.53#53
Name:   www.sq.com
Address: 202.96.200.111
[root@ pca ~]# nslookup 202.96.200.111
Server:         192.168.1.53
Address:        192.168.1.53#53
111.200.96.202.in-addr.arpa      name = www.sq.com.
[root@ pca ~]# nslookup ftp.sq.com
Server:         192.168.1.53
Address:        192.168.1.53#53
Name:   ftp.sq.com
Address: 202.96.200.112
客户端能解析正常,说明DNS服务器的配置顺利完成。
三、辅助DNS服务器配置
辅助DNS服务器(Slave DNS),也可以向客户机提供域名解析服务,但是它的数据不是直接输入的,而是从其他Master或Slave DNS服务器中复制过来的。
1.安装相关软件
首先也是要安装bind及bind-chroot;然后启动,并在chkconfig中设为开机启动。
2.修改主配文件/etc/named.conf
同主DNS服务器的配置,就是将listen-on port 53、allow-query大括号中的值改为any。
3.修改辅助区域配置文件/etc/named.rfc1912.zones
在文件最末添加正向解析和反向解析域(注:本实验,正向解析、反向解析一并实现),
修改后的内容为:
[root@itpro ~]# cat /etc/named.rfc1912.zones

  1. …………省略部分输出…………

  2. zone "sq.com" IN {  //这个是正向解析区域

  3.        type slave;  //slave表示这个区被定义为辅助域名服务器

  4.        file "slaves/sq.com.zone";

  5. masters { 192.168.1.53; };  //指明主DNS,可以是多个,

  6.        allow-update { none; };

  7. };

  8. zone "1.168.192.in-addr.arpa" IN {  //这个是反向解析区域

  9.        type slave;

  10.        file "slaves/sq.com.local";

  11. masters { 192.168.1.53; };

  12.        allow-update { none; };

  13. };

4.重启DNS
[root@itsec ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
重启后,在/var/named/slaves/目录下会生成一个sq.com.zone文件和一个sq.com.local文件,里面的内容是分别从主DNS服务器上的sq.com.zone和sq.com.local中读过来的。
[root@itsec ~]# cat /var/named/slaves/sq.com.zone

  1. $ORIGIN .

  2. $TTL 86400      ; 1 day

  3. sq.com                  IN SOA  ns.sq.com.sq.com. root.sq.com. (

  4.                                0          ; serial

  5.                                86400      ; refresh (1 day)

  6.                                3600       ; retry (1 hour)

  7.                                604800     ; expire (1 week)

  8.                                10800      ; minimum (3 hours)

  9.                                )

  10.                        NS      ns.sq.com.

  11. $ORIGIN sq.com.

  12. ftp                     A       202.96.200.112

  13. ns                      A       192.168.1.53

  14. www                     A       202.96.200.111

[root@itsec ~]# cat /var/named/slaves/sq.com.local

  1. $ORIGIN .

  2. $TTL 86400      ; 1 day

  3. 1.168.192.in-addr.arpa  IN SOA  ns.sq.com. root.1.168.192.in-addr.arpa. (

  4.                                0          ; serial

  5.                                86400      ; refresh (1 day)

  6.                                3600       ; retry (1 hour)

  7.                                604800     ; expire (1 week)

  8.                                10800      ; minimum (3 hours)

  9.                                )

  10.                        NS      ns.sq.com.

  11. $ORIGIN 1.168.192.in-addr.arpa.

  12. 111                     PTR     www.sq.com.

  13. 112                     PTR     ftp.sq.com.

  14. ns                      A       192.168.1.53

至此,从DNS服务器设置完成。比主DNS服务器的设置简单多了。
四、客户端测试
1.修改客户端的resolv.conf文件
增加一条指向从DNS服务器的记录,修改后内容如下:
[root@ pca ~]# cat /etc/resolv.conf
nameserver 192.168.1.53
nameserver 192.168.1.54
2.在客户端使用nslookup命令测试
可以看到此时是通过主DNS服务器(192.168.1.53)解析域名的,
[root@pca ~]# nslookup www.sq.com
Server:         192.168.1.53
Address:        192.168.1.53#53
Name:   www.sq.com
Address: 202.96.200.111
3.在主DNS服务器上关闭dns服务
[root@itpro ~]# service named stop
Stopping named: .                                          [  OK  ]
4.再在客户端使用nslookup命令测试
可以看到此时是通过辅助DNS服务器(192.168.1.54)解析域名的,
[root@pca ~]# nslookup www.sq.com
Server:         192.168.1.54
Address:       192.168.1.54#53
Name:   www.sq.com
Address: 202.96.200.111
[root@pca ~]# nslookup 202.96.200.112
Server:         192.168.1.154
Address:        192.168.1.154#53
112.200.96.202.in-addr.arpa      name = ftp.sq.com.
5.在客户端使用dig命令可以查看到更详细的信息
[root@pca ~]# dig www.sq.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6.3 <<>> www.sq.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50191
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;www.sq.com.                    IN      A
;; ANSWER SECTION:
www.sq.com.             86400   IN      A       202.96.200.111
;; AUTHORITY SECTION:
sq.com.                 86400   IN      NS      ns.sq.com.
;; ADDITIONAL SECTION:
ns.sq.com.              86400   IN      A       192.168.1.53
;; Query time: 2 msec
;; SERVER: 192.168.1.54#53(192.168.1.54)
;; WHEN: Tue Mar 26 05:39:07 2013
;; MSG SIZE  rcvd: 77
五、主辅DNS服务器数据同步问题
主DNS服务器修改记录,辅助DNS同步不过去,或者需要很长时间。这在现实生活中,会造成各地访问的结果不同。
通过修改主DNS服务器上的配置文件,是可以做到将数据快速同步到其他辅助DNS服务器的。这里用到一个also-notify字段。
1.在主DNS服务器的主配文件/etc/named.conf的options{ }里,增加一条记录:
also-notify { 192.168.1.54; }; //这里指通知的对象是192.168.1.54辅助DNS
2.主DNS数据变更,这里以修改区域sq.com为例,
删除里面的“ftp  A  202.96.200.112”记录,同时将序列号数值加1,
[root@itpro ~]# cat /var/named/sq.com.zone

  1. $TTL 1D

  2. @       IN SOA  ns.sq.com root (

  3. 1       ; serial   //这里由0改为1

  4.                                        1D      ; refresh

  5.                                        1H      ; retry

  6.                                        1W      ; expire

  7.                                        3H )    ; minimum

  8.         NS     ns.sq.com.

  9. ns      A       192.168.1.53

  10. www     A       202.96.200.111

修改完成后,重启DNS
[root@itpro ~]# service named restart
Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]
3.在辅助DNS上查看sq.com的信息,可以看到,主DNS上该区域的信息已经同步过来了,
[root@itsec ~]# cat /var/named/slaves/sq.com.zone

  1. $ORIGIN .

  2. $TTL 86400      ; 1 day

  3. sq.com                  IN SOA  ns.sq.com.sq.com. root.sq.com. (

  4. 1         ; serial

  5.                                86400      ; refresh (1 day)

  6.                                3600       ; retry (1 hour)

  7.                                604800     ; expire (1 week)

  8.                                10800      ; minimum (3 hours)

  9.                                )

  10.                        NS      ns.sq.com.

  11. $ORIGIN sq.com.

  12. ns                      A       192.168.1.53

  13. www                     A       202.96.200.111

(注:序列号的值务必要改大,辅助DNS收到主DNS的通知后,会先检查序列号,如果主DNS发过来的信息,序列号的值小于辅助DNS中序号的值,辅助DNS是会将新信息丢弃的。)


also-notify这个字段可以在named.conf中options里声明,也可以在单个区域文件中声明。


另外,DNS转发和DNS子域,配置都很简单,加两三条数据就行了,但是,在培训课堂上跟着老师做能成功,回来后自己搭建平台做实验,却总是失败,防火墙都关了,SELINUX也disabled了,仍然是调试不成功,待求解。



本文转自Sunshyfangtian 51CTO博客,原文链接:http://blog.51cto.com/sunshyfangtian/1162916,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载