DNS工作原理
DNS 查询的过程
DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。
1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
DNS数据库的记录:ZONE、正解、反解
ZONE:DNS服务器内记录信息的文件我们成为数据库,而在数据库里针对每个要解析的域就称为一个区域zone。不管是正解还是反解,每个域的记录就是一个zone.
正解:从主机名查询到IP的流程
正解文件的ZONE主要记录了主机名查询到的IP,通常有以下几个标志
SOA:开始验证Start of Authority 的缩写
NS: 名称服务器 name server的缩写,后面记录的数据是DNS服务器
A: 地址address的缩写,后面记录的是IP的对应
反解:从IP反向解析到主机名的流程
反解的zone主要记录ip对应的主机名。标志有 SOA NS 和PTR
PTR:指向PoniTeR的缩写,记录的数据就是反解到主机名
Master/Slave
Master:里面的所有主机名相关信息都要手动去修改和配置
Slave:同步master的数据,master和slave必须互相搭配
软件安装
准备两台centOS6.5的linux机器
Ip 10.10.10.58 和 10.10.10.59
10.10.10.58为主服务器
10.10.10.59为从服务器
分别安装 bind 和 bind-chroot
命令:yum install bind bind-chroot –y 安装bind-chroot的原因是早期的BIND默认将程序启动在var/named当中,但是该程序可以在根目录下的其他目录到处转移,因此若BIND的程序有问题时,则该程序会造成整个系统的危害,为了避免这个问题,我们将某个目录制定为BIND 程序的根目录,由于已经是根目录,所以BIND便不离开该目录,若该程序被攻击了,影响的是该特定目录。CentOS6.x默认将BIND锁定在/var/named/chroot目录中。 由于安装了bind-chroot,将/etc/下 named相关文件都拷贝到 /var/named/chroot/etc cp –a /etc/name/var/named/chroot/etc 由于安装了bind-chroo,还要把/var/named下的部分文件拷贝到/var/named/chroot/var/named 下 cd /var/named 然后 cp –a data/ dynamic/ slaves/ named.* chroot/var/named/
配置文件
注意事项
排查故障时,可以通过日志来定位问题,日志位置 /var/log/messages
编辑/var/named/chroot/etc路径下的 named.conf这个文件,这个是dns的主配置文件
Options dns全局选项,会影响整个dns的配置。每行后面用分号来结束
正向解析
需求:实现正向解析
在主服务器 10.10.10.58上named.conf添加如下配置:
listen-on port 53 { any; };
allow-query { any; };
ZONE “ rhce.cc” IN {
Type master;
File “rhce.cc.zone”;
};
然后再 /var/named/chroot/var/named下创建rhce.cc.zone这个文件
$TTL 1D
@ IN SOA server.rhce.cc. root@rhce.cc(
201111 //Serial供Slave DNS判断是否从Master DNS获取新数据
1D //(每隔1天就要发送一次请求和主dns来同步)
1H //(当从服务器向主服务器发送请求,如果主服务器不回复,每隔1小时重新连接一次)
1W // (多次连接,一周后还是不成功,就不会再去连接了)
3H //(缓存时间)
)
@ IN NS server.rhce.cc.
Server.rhce.cc. IN A 10.10.10.58
www.rhce.cc. IN A 10.10.10.30
ftp.rhce.cc. IN A 10.10.10.31
保存配置后退出 注意rhce.cc.zone这个文件的所有组要改成 named,否则启动不成功.到这里,服务器就已经配置完成了。
开启防火墙53端口 Iptables -I INPUT 1 –p tcp –dport 53 –j ACCEPT Iptables -I INPUT 1 –p udp –dport 53 –j ACCEPT Service iptables save
然后再把dns 设置为自己 文件 /etc/resolv.conf ,添加语句 namesever 127.0.0.1.
重启dns服务 service named restart
验证 host –l rhce.cc 。查看到域里的服务器对应的ip.
在 windows 里的cmd 进行验证 输入 nslookup 。然后 server 192.168.40.128 在输入 www.rhce.cc看看是否会输出我们再rhce.cc.zone里填写的ip 192.168.40.51.即是否和host -l得出的结果一致,一致则dns正向解析服务成功。
反向解析
需求:实现反向解析
/var/named/chroot/etc下配置 named.conf
Zone “10.10.10.in-addr.arpa” IN {
type master;
file “rhce.cc.arpa”
};
然后再 /var/named/chroot/var/named下创建rhce.cc.arpa这个文件 其中这个文件不用完成手动创建,可以通过拷贝模板来修改,如 该路径下 cp -p named.localhost rhce.cc.arpa.(刚才那个rhce.cc.zone这个文件也是一样可以拷贝修改) 当然,也可以直接用写好的正向解析文件 rhce.cc.zone 作为模板来修改更直接 cp -p rhce.cc.zone rhce.cc.arpa
@ IN SOA server.rhce.cc. root(
201111
1D
1H
1W
3H
)
@ IN NS server.rhce.cc.
58 IN PTR server.rhce.cc.
30 IN PTR www.rhce.cc.
31 IN PTR ftp.rhce.cc.
重启dns服务 service named restart
验证:host 10.10.10.30查看是否有输出结果对应www.rhce.cc
同时也可用 tcpdump –i eth0 dst 53来抓dns相关包验证
反向解析完成。
Master/Slave 架构
需求:实现从服务器拷贝主服务器的zone file文件
辅助10.10.10.59服务器上Named.conf配置
Zone “rhce.cc” IN {
Type slave;
File “slaves/aa.zone”;
Masters { 10.10.10.58; };
};
重启服务器后生效
为了防止任何一台服务器都可以从主服务器获得配置,在主服务器的配置文件上添加 All-transfer { 10.10.10.59; }; //允许拷贝信息的机器ip 重启服务器后生效
机密安全性
为了防止有其他机器冒充辅助服务器的ip来获取配置,在主从服务器上通过添加秘钥来保证安全性 Dnssec-keygen -a HMAC-MD5 –b 128 –n HOST xx 生成一个key.
在主服务器10.10.10.58上添加如下的配置 Allow-transfer { key xx; };//(这里的xx可以随意命名,只要接下来配置一样即可)
Server 10.10.10.59 {
Keys { tt; };
};
Key xx {
Algorithm hmac-md5;
Secret “//生成的加密信息”;
};
在辅助服务器10.10.10.59上添加如下的信息:
Server 10.10.10.58 {
Keys { tt; };
};
Key xx {
Algorithm hmac-md5;
Secret “//生成的加密信息”;
};
Zone “rhce.cc” IN {
Type slave;
File “slaves/xx.zone”;
Masters { 10.10.10.58; };
};
Zone “10.10.10.in-addr.arpa” IN {
Type slave;
File “slaves/xx.zone.arpa”;
Masters { 10.10.10.58; };
};
重启服务器即可生效. 注意,当服务器的时间不同步的时候,会导致复制不成功,需要同步服务器时间,命令:ntpdate time.nist.gov.
验证:在辅助的服务器上,/var/named/chroot/var/named/slaves文件夹下如果有生成xx.zone和xx.zone.arpa两个配置文件,则配置成功。
视图功能
不同的机器查询同一台dns服务器的时候,获得不同的解析ip,如内网访问解析出私有地址,外网访问,解析出公有地址。
修改10.10.10.58的named.conf上配置,通过acl定义主机,并通过view来match相关的视图。 配置如下:
Acl aa { 10.10.10.59; };
Acl bb { 10.10.10.2; };
View “xx”{
Match-clients { aa; };
Zone “.” IN {
Type hint;
File “name.ca”;
};
Zone “rhce.cc” IN {
Type master;
File “rhce.cc.zone”;
};
};
View “xx”{
Match-clients { bb; };
Zone “.” IN {
Type hint;
File “name.ca”;
};
Zone “rhce.cc” IN {
Type master;
File “rhce.cc.zone1”;
};
};
重启服务器生效。 测试:rhce.cc.zone和 rhce.cc.zone1上的www.rhce.cc对应的ip不同在 10.10.10.59 和 10.10.10.2上通过host www.rhce.cc.查看是否解析出zone和zone1上不同的ip。
子域授权
在10.10.10.58服务器上的rhce.cc.zone文件上 添加子域的关系
aa.rhce.c IN NS test.aa.rhce.cc
test.aa.rhce.cc IN A 10.10.10.59
在10.10.10.59子域服务器上的配置文件named.conf上添加
Farwards { 10.10.10.58; };\\ (主服务器上的机器)
重启服务器后可生效。
验证:在子域服务器上解析主服务器的文件的配置的主机。
如 host www.rhce.cc。如果可以得到主服务器的文件的配置上的ip即可。