付出,终有回报!
分类: 系统运维
2015-08-16 11:34:34
实验环境:
172.25.254.50 主,master
172.25.254.51 pay.taobao.com 从,slave
172.25.254.53 test.taobao.com 测试机
系统环境:RHEL6.5
所有主机的防火墙和Selinux关闭
软件版本:bind-9.8.2-0.17.rc1.el6_4.6.x86_64
一、 DNS基础知识
1 、DNS是什么
举个例子吧,我们都知道百度WEB服务器的主机名是,但却很难记住与主机名相对应的IP,DNS服务器正是为我们提供着这样的服务。如果没有DNS服务器,我们是很难通过主机名访问到百度的服务器的。形象的说,DNS服务器的功能,就有点像我们手机中电话簿的功能。早期,DNS的功能是由/etc/hosts文件实现的,后来随着信息量的增大,DNS才出现。
2、DNS 的主机名对应 IP 的查询流程
如图所示,DNS 利用类似树状目录的架构,将主机名的管理分配在不同层级的 DNS 服务器当中,分层管理。当请求时,查询流程会按如下方式进行,. --> .tw --> .edu.tw --> .ksu.edu.tw,从根出发逐级向下查找。
3、DNS 的正、反解查询命令
在此,主要介绍dig的使用
dig domain information groper),很灵活的域名解析工具
典型的用法:dig @server name type
server:将要被查询的主机名或IP地址
name:资源记录名称的查找
type:指定查询的类型,如:A,MX,ANY等
dig 输出的部分内容:
标题指出关于查询和答案的信息 , 其中包括响应状态和设置的任何特殊标记 ( aa 表示权威答案 , 等等 ),从响应状态可以对DNS的错误进行简单的排查:
NOERROR : 查询成功
NXDOMAIN : DNS 服务器提示不存在这样的名称
SERVFAIL : DNS 服务器停机或 DNSSEC 响应验证失败
REFUSED : DNS 服务器拒绝回答 ( 也许是出于访问控制原因 )
– QUESTION : 提出实际的 DNS 查询
– ANSWER : 响应 ( 如果有 )
– AUTHORITY : 负责域 / 区域的名称服务器
– ADDITIONAL : 提供的其他信息 , 通常是关于名称服务器
– 底部的注释指出发送查询的递归名称服务器以及获得响应所花费的时间
二、DNS基础配置
1、安装DNS软件包、启动服务
BIND 是最广泛使用的开源名称服务器,在 RHEL 中 , 通过 bind 软件包提供,系统的安装包中也包含有。
[root@www ~]# yum install -y bind bind-utils
[root@www ~]# rpm -qa bind
bind-9.8.2-0.17.rc1.el6_4.6.x86_64
DNS相关的常用配置文件
/var/named 目录包含名称服务器所使用的其他数据文件,如zone file
/etc/named.conf DNS主配置文件
/etc/named.rfc1912.zones include在/etc/named.conf文件中,用于定义正反解的域名,及zone file文件的名称、所在
/etc/resolv.conf 指定DNS服务器
[root@www ~]# vim /etc/named.conf
在配置文件做如下修改,默认,BIND只对本地回环接口开放了53端口,即只有本机可以对DNS服务进行查询。
listen-on port 53 { any; }; 使本地IP也监听53端口
allow-query { any; }; 本地和别人都可查询
dnssec-validation no; 不进行认证检测
[root@www ~]# /etc/init.d/named start
Generating /etc/rndc.key: [ OK ]
Starting named: [ OK ]
在第一次启动DNS服务时,会生成一个用于认证的MD5加密文件,而之后启动服务就不会再次生成此文件。由于对字符加密需要的实间较长,在命令行中输入大量无规律的字符,可以缩短服务启动的时间。产生的文件内容如下:
[root@www ~]# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "OKZPXGNj8vQ+V3GMqXOlfA==";
};
由于在命令行输入的字符不同,产生的secret自然不同,这就不必多究。
查看服务端口:
实验中为了方便起见,直接将防火墙关闭;若防火墙开启,就需要做相应的设定 。
2、DNS高速缓存
DNS缓存:DNS缓存服务器,自身没有主机名与IP正反解的配置文件,因此,无论谁去查询数据,它都会将请求转发至上层的DNS服务器。由于DNS缓存服务器记录了很多查询信息,当其他主机向DNS缓存服务器请求有记录的信息时,速度会相当快。
在查询任何DNS服务器之前,DNS始终会检查缓存,如果找到与查询相匹配的记录,DNS就会使用该记录而不查询服务器,这会使查询速度变快,并减少了网络流量。
[root@www ~]# vim /etc/named.conf
在options模块中加入如下配置:
forwarders { 172.25.254.250; };
注意:在forwarders模块中,可以加入多个上层DNS服务器,每个服务器的IP必须以;结尾。
重启服务后测试:
本机服务器是无法连通互联网的。但它所指定的上层DNS服务器172.25.254.250是可以连通的,
[root@test ~]# yum install -y bind-utils
[root@test ~]# vim /etc/resolv.conf
nameserver 172.25.254.50
指定172.25.254.50为test.taobao.com主机的DNS服务器,当访问时,会去172.25.254.50上查询相关记录,而172.25.254.50只是一台缓存DNS服务器,当test.taobao.com请求的数据在172.25.254.50有记录时,那么会在很短的时间内被返回;而当test.taobao.com请求的数据的数据在172.25.254.50上没有记录时,172.25.254.50就会向它的上层DNS服务器172.25.254.250请求,而后,将请求的数据在本地缓存的同时,也返回给test.taobao.com。
3、正向解析
在搭建自己的DNS服务器之前,如果不需要设置缓存。就去掉之前在/etc/named.conf中添加的forwarders { 172.25.254.250; };
正解:从主机名查询到与主机名相对应的IP地址。
(1)A记录,查询IP
[root@www ~]# vim /etc/named.rfc1912.zones
如下编辑配置文件:
其中,“taobao.com”:是要进行解析的域名
type:指定DNS服务器的类型
file:指定A记录文件,默认指/var/named/taobao.com.zone
allow-update:指定允许对DNS记录进行更新的主机
[root@www ~]# cd /var/named/
[root@www named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@www named]# cp -p named.localhost taobao.com.zone
注意:编写A记录文件时,一定要注意文件的权限,否则就会读取失败。
[root@www named]# ls -l taobao.com.zone
-rw-r----- 1 root named 170 Aug 14 19:01 taobao.com.zone
[root@www named]# vim taobao.com.zone
$TTL 1D
@ IN SOA (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS
www A 172.25.254.50
TTL:time to live 的缩写,意思就是当这笔记录被其他 DNS 服务器查
询到后,这个记录会保持在对方 DNS 服务器的快取中,保持多少秒钟的意思。
@:代表zone,在此指代taobao.com这个域
IN:关键词 IN 是固定的
:指定在taobao.com域中作为Master DNS 服务器的主机名
root.:管理员的信息
0 ; serial :序号代表的是这个数据库档案的新旧,当修订了数据库内容时,将这个数值放大,为了方便用户记忆,通常序号都会使用日期格式来记忆
1D ; refresh :slave的更新频率
1H ; retry :更新失败后,重新更新的时间
1W ; expire : 重复更新,失败多久后不再更新
3H ) ; minimum :如果这个数据库 zone file 中,每笔 RR 记录都没有写到 TTL 快取时间的话,那么就以这个 SOA 的设定值为主
NS :查询管理领域名 (zone) 的服务器主机名。NS后面一定是主机名称,向后面的这台主机要求zone的查询,而NS后面接的主机名称必须有IP的对应
注意: . 为顶级域名 , 若A记录文件中的域名不以 . 结束,那么系统会自动补齐@所代表的内容,如此就会导致服务无法正常启动
测试:
(2)CNAME,设置别名
CNAME的配置如下:
即访问和m.taobao.com时,数据到达同一台服务器上。
[root@www named]# /etc/init.d/named restart
测试:
(3)MX记录,邮件服务器主机名
MX 是 Mail eXchanger的意思,通常整个域会设定一个 MX ,代表所有寄给这个领域的 email 应该要送到后头的 email server 主机名上头。
MX的配置如下(给出了两种配置MX的方法):
[root@www named]# /etc/init.d/named restart
测试:
4、DNS数据分流
当不同的用户访问同一个主机名时,实际上,数据请求到达了不同的服务器。
具体配置如下:
[root@www named]# vim /etc/named.conf
编辑主配置文件,使本地用户和172.25.254.53上的用户访问不同的服务器。本地用户通过DNS服务读取/etc/named.rfc1912.zones下的文件内容,172.25.254.53上的用户通过DNS服务读取/etc/named.rfc_other.zones下的文件内容。其中match-clients选项的设置尤为重要,其后可以是网段、特定的IP、本机等。
[root@www named]# cp -p /etc/named.rfc1912.zones
/etc/named.rfc_other.zones
[root@www named]# vim /etc/named.rfc_other.zones
zone "taobao.com" IN {
type master;
file "taobao.com.other";
allow-update { none; };
};
在此文件中,只修改file的名称,其他不做任何修改。且,此文件的所有人为named用户,否则无法被访问。
[root@www named]# vim taobao.com.other
$TTL 1D
@ IN SOA (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS
www A 192.168.1.50
m CNAME
mail1 MX 1 192.168.1.52.
mail2 MX 1 email.taobao.com.
email A 192.168.1.200
在taobao.com.other文件中,只有IP与taobao.com.zone不同。
测试:
从结果可以看出,本机和172.25.254.53同时访问,但是访问到的IP却是不同的。
使用DNS数据分流,可以很容易的实现企业内外网的分离。如此,既可以实现服务器的负载分担,也能在一定程度上保证内部网络的安全。
5、DNS反向解析
反向解析:从IP找到主机名,重要标志是PTR
由于之前做了DNS分流,在此实验中反向解析只针对本地用户有效
[root@www named]# vim /etc/named.rfc1912.zones
zone "254.25.172.in-addr.arpa" IN {
type master;
file "taobao.com.ptr-local";
allow-update { none; };
};
注意:zone的名称,必须将IP反转过来写,并且结尾加上.in-addr.arpa
[root@www named]# vim taobao.com.ptr-local
$TTL 1D
@ IN SOA root.taobao.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS
www A 172.25.254.50
53 PTR test.taobao.com.
52 PTR slave.taobao.com.
注意:文件的所有者为named用户。zone文件中除了PTR,还要有DNS服务器必备的SOA和NS。PTR之后的主机名要加上. 。
在本机进行测试:
三、Master/Slave DNS
Master/Slave主要用来解决不同DNS服务器上数据同步的问题。
Master:在DNS数据库中,包含所有主机名相关的信息。 当需要对数据库更新时,设置完成后必须重启服务,才能完成更新。为了保证服务的高可用性,通常都会有多台服务器同时工作。如果所有的DNS服务器都是Master类型,数据库更新时的工作量就会很大,此时,就有了Slave的出现。
Slave:Slave必须与Master相互搭配工作,在Master/Slave架构中,只要修改Master上的配置文件,重新启动DNS服务后,其他的Slave也会被自动更新。
注意:由于之前做了DNS内外网分离,为了不影响此模块的测试,将 /etc/named.conf文件的local、other模块恢复为之前的设置,或者将local模块中的match-clients设置为any。
具体实现如下:
1、Master
[root@www named]# vim /etc/named.rfc1912.zones
zone "taobao.com" IN {
type master;
file "taobao.com.zone";
allow-update { none; };
allow-transfer {172.25.254.51;};
also-notify {172.25.254.51;};
};
allow-transfer,指定此主机(slave)可以从服务器上接收区域信息的传输
Also-notify, 当主DNS刷新或加载区域时,主动向此地址发送通知信息,若没有此项设置,slave DNS必须重启named服务才能接受到主DNS的变化
[root@www named]# vim taobao.com.zone
$TTL 1D
@ IN SOA (
2015071503 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS
www A 172.25.254.50
m CNAME
mail1 MX 1 172.25.254.52.
mail2 MX 1 email.taobao.com.
email A 172.25.254.200
只修改以上配置的阴影部分,serial,是路由器中的串行接口,每次更换域名服务器的时候都要更改其serial 值为更大一点,这样才可以顺利与DNS服务器数据进行同步。为了方便识别,此序号通常由日期和修改次数构成。
[root@www named]# /etc/init.d/named restart
2、Slave
同Master端一样,安装bind 、bind-utils软件包,设置/etc/named.conf监听本地端口。
[root@pay ~]# vim /etc/named.rfc1912.zones
zone "taobao.com" IN {
type slave;
masters {172.25.254.50;};
file "slaves/taobao.com.zone";
allow-update { none; };
};
设置域的类型为slave,主DNS为172.25.254.50,主DNS同步的文件存放在/var/named/slaves/red.com.zone
[root@pay ~]# cat /etc/resolv.conf
nameserver 172.25.254.51
[root@pay ~]# /etc/init.d/named restart
3、测试
在slave上测试
[root@pay ~]# cd /var/named/slaves/
[root@pay slaves]# ls
taobao.com.zone
从测试结果可知,slave上虽然没有域的相关信息,但它从主DNS上同步过来了,并将同步过来的数据存放在了/var/named/slaves/下。
主DNS端,在taobao.com.zone中添加一条A记录
test A 172.25.254.55
并将serial序号的值增大,重启服务,在slave端测试:
四、远程更新DNS
1、 无密钥更新
(1) 本地机的配置
[root@www named]# vim /etc/named.rfc1912.zones
zone "taobao.com" IN {
type master;
file "taobao.com.zone";
allow-update { 172.25.254.53; };
allow-transfer {172.25.254.51;};
also-notify {172.25.254.51;};
};
允许更新的配置很简单,只需要打开本地机的allow-update选项即可,在此,设置只允许172.25.254.53主机对DNS服务器进行更新。
[root@www named]# chmod 775 /var/named/
远程机对DNS更新时,会在本机的/var/named产生taobao.com.zone.jnl文件,因而,必须使此目录对其他人有写的权限。
[root@www named]# /etc/init.d/named restart
注意:如果DNS服务器的selinux不是disabled状态,那么远程机更新会失败,根据日志的提示设置setsebool -P named_write_master_zones 1。
(2)远程机的设置
nsupdate 是一个动态DNS更新工具。可以向DNS服务器提交更新记录的请求,它可以从区域文件中添加或删除资源记录,而不需要手动进行编辑区域文件。
输入格式:
nsupdate可以从终端或文件中读取命令,每个命令一行,一个空行或一个”send”命令,则会将先前输入的命令发送到DNS服务器上.
命令格式:
server servername [ port ]
发送请求到servername服务器的port端口,如果不指定servername,nsupdate将把请求发送给当前去的主DNS服务器。
在远程端对域的信息更新,添加一条A记录
如果远程机更新信息发送失败,要及时查看服务机的日志信息。发送失败可能是文件权限问题,selinux的影响等等
(3)测试
从上图结果可知,虽然在主DNS端可以dig到相应信息,但zone文件中并没有更新的信息。
必须重启DNS主机的服务,远程机的更新才能被写入zone文件中,真正生效。
2、使用key更新远程DNS
应该还记得,在第一次启动DNS服务时,产生了一个key文件, /etc/rndc.key,这个文件默认也包含在/etc/named.conf中。
[root@www named]# cat /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "OKZPXGNj8vQ+V3GMqXOlfA==";
};
使用key更新远程DNS,正是要手动产生一个与 /etc/rndc.key类似的加密文件,具体实现如下:
(1) 本机设置
dnssec-keygen,为Security DNS产生key的工具,由bind软件包提供。
用法:dnssec-keygen [参数选项] key的名称
-a 指定加密算法,与/etc/rndc.key一样,使用HMAC-MD5加密
-n 指定key所属的类型
-b 钥匙的比特位数,数值范围由加密算法决定,HMAC-MD5: [1~512]
查看生成的私钥,并拷贝下图阴影部分的字符
[root@www named]# cp -p /etc/rndc.key /etc/taobao.com.key
[root@www named]# vim /etc/taobao.com.key
key "taobao.key" {
algorithm hmac-md5;
secret "fd07zJEJGIAgbDsD0V4XUg==";
};
注意:在这个key文件中,一定要注意key的名称要与使用dnssec-keygen产生的名称一致,加密字符是从Ktaobao.key.+157+44272.private中复制而来的。
将key文件包含到主配置文件之中
[root@www named]# vim /etc/named.conf
include "/etc/taobaocom.key";
注意:配置文件按顺序读取,要将此句放到logging模块之前
[root@www named]# vim /etc/named.rfc1912.zones
zone "taobao.com" IN {
type master;
file "taobao.com.zone";
allow-update { key taobao.key; };
allow-transfer {172.25.254.51;};
also-notify {172.25.254.51;};
};
指定只有拥有taobao.key的主机才可以对DNS主机进行更新。
[root@www named]# /etc/init.d/named restart
[root@www named]# scp Ktaobao.key.+157+44272.* 172.25.254.53:/mnt
(2)远程及进行测试
DNS主机将生成的key传输到此远程机,测试如下:
-k 指定用key进行远程更新,后接主DNS产生的私钥
如果更新失败,则查看/etc/taobao.com.key的权限是否正确,key的名称是否一致等,若还是失败则查看主DNS端的日志进行排错。
在主DNS端重启服务后,查看zone文件。发现远程的更新已经写入文件了。