操做环境 Redhat 5.8虚拟机
一.DNS的由来
1. 人脑老是不如计算机的,人们对文字的记忆力要比对数字的记忆力高不少。所以一个名为 DNS 的服务,帮咱们将主机名解析为IP地址, 例如咱们输入www.baidu.com就能够访问这个网站了,而不用费力取记住IP地址
2.
早期人们用/etc/hosts 这个文件来将主机名解析为IP地址,可是当网络上的主机愈来愈多,主机名与 IP 的对应没法在全部的计算机内更 新, 另外要将主机名加入该文件内仅能向 INTERNIC 注册,若 IP 数量太多时,该文件会很大,也就不利于其余主机同步了。客户端计算机每次都 得要从新下载一次文件才能顺利联网。
3.
为了解决这个严重的问题,柏克莱大学发展出管理主机名对应 IP 的系统, 咱们称它 为BIND (Berkeley Internet Name Domain),这个系统能够轻松的进行维护的工做~太棒了!这也是目前全世界使用最普遍 的领域名系统 DNS(Domain Name System) 经过DNS ,咱们不须要知道主机的 IP ,只要知道该主机的名称,就可以轻易的连上 该主机了。
二. DNS的组织结构
1.如图

2.常见的顶级域
.com:商业机构,任何人均可以注册
.edu:教育机构
.gov:政府部门
.int:国际组织
.mil:军事部门
.net:网络组织
.org:非盈利组织,任何人均可以注册
.info:网络信息服务组织
.au: 澳大利亚
.ca : 加拿大
.cn: 中国
.tw: 中国台湾
.hk: 中国香港
.in: 印度
.jp: 日本
三. DNS的查询过程
例:
1.
client去找本地DNS,去问www.163.com的ip地址,若是本地DNS的缓存有www.163.com对应的ip地址,直接返回给client
2.若是没有缓存:
@1. 本地DNS去找根域服务器,问www.163.com的ip地址,根域服务器不知道,可是知道com的ip地址,返回给本地DNS。
@2. 本地DNS去找com域服务器,问www.163.com的ip地址;
@3. com域服务器不知道,可是知道163.com的ip地址,返回给本地DNS
@4. 本地DNS去找163.com域服务器,问www.163.com的ip地址;
@5. 63.com域服务器知道www.163.com的ip地址;返回给本地DNS
@6.本地DNS把查询到的结果返回给client,并缓存下来,供其余的
3.查询方式
client去本地DNS直接拿到想要的结果,这种查询方式递归查询。 本地DNS去找根域、com域、163.com域查询的过程是迭代查询。
四.DNS的正向解析
1.装包
[root@tx1 ~]# yum install bind bind-chroot -y //dns须要的包bind bind-chroot
2.与dns相关的内容
[root@tx1 ~]# rpm -ql bind ; rpm -ql bind-chroot
/etc/logrotate.d/named DNS日志轮滚配置文件
/etc/rc.d/init.d/named DNS启动脚本
/usr/sbin/dns-keygen
/usr/sbin/named-checkconf 检查主配置文件语法正不正确
/usr/sbin/named-checkzone 检查区域配置文件语法正不正确
/usr/share/doc/bind-9.3.6/sample
/var/named/chroot 安全措施,把DNS 服务器禁锢在这里
3.具体配置
@1
[root@tx1 ~]# cd /var/named/chroot/
// /var/named/chroot/ 这是一个伪目录,至关于一个虚拟的根,为了提升安全性
[root@tx1 chroot]# ls
dev etc var
[root@tx1 chroot]# cd etc
[root@tx1 etc]# ls
localtime rndc.key
这里没有name.conf 这个文件,咱们手动拷贝一份
[root@tx1 etc]# rpm -ql bind
[root@tx1 etc]# cp /usr/share/doc/bind-9.3.6/sample/etc/named.conf ./named.conf //不会写能够找模板
编辑named.conf这个文件,把文件里面多余的东西删除了,而后咱们来编辑
[root@tx1 etc]# vim named.conf
zone "." IN{
type hint; //表示这个区域内的高速缓存的域名服器
file "named.root";
};
因为本人在虚拟机里作实验,因此这几行没有加
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;}; //any表示监听全部客户端发来的信息
directory "/var/named"; // /--> /var/named/chroot 保存区域配置文件
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;}; //any表示容许全部客户端进行dns查询
};
IN 是internet记录
type是类型 主的类型是master,从类型是slave
file是根区域文件
zone "tx.com" IN{
type master;
file "tx.com.zone";
};
@2. 写区域配置文件
[root@tx1 ~]# cd /var/named/chroot/var/named/
[root@tx1 named]# rpm -ql bind
[root@tx1 named]# cp /usr/share/doc/bind-9.3.6/sample/var/named/localhost.zone ./tx.com.zone
//不会写能够找模板
[root@tx1 named]# cat -n tx.com.zone
//先看一下这个文件
1$TTL86400
2@IN SOA@ root (
342; serial (d. adams)
43H; refresh
515M; retry
61W; expiry
71D ); minimum
8
9 IN NS@
10 IN A127.0.0.1
11IN AAAA::1
12
第一行 :TTL是生存期,单位是秒 ,$TTL是全局定义的
第二行: @表示当前域,IN指internet ,SOA起始受权机构,@取代在/etc/named.conf中指定的域名。 SOA段中的数字,分别为:序列号、刷新、重试、过时、生存期
第三行:序列号用于Slave与Master的更新用
第四行:除了序列号外还能够用它规定多久slave进行一次主动更新
第五行:重试一旦Slave尝试链接Master失败,规定多久尝试下一次链接
第六行:过时若是Slave没法连通Master,规定多久后不在尝试链接
第七行:生存期服务器回答 ‘无此域名’ 的间隔时间。
数字的默认单位为秒。不然:W= 周、D= 日、H= 小时、M= 分钟。
第九行:NS指定域名服务器,NS后面的主机名称必须有IP对应
第十行:指定域名对应的IP
@3.下面咱们来写本身的ZONE文件
$TTL 86400
@ IN SOA ns.tx.com. //com后的点千万不要忘记.它表明一个完整的主机名 root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70 //指定DNS服务器的ip
www IN A 192.168.8.64
tx IN A 192.168.8.65
[root@tx1 etc]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
有的时候看到OK,但不必定能成功,因此还要看一下日志文件
[root@tx1 named]# tail -n 20 /var/log/messages | grep named
Feb 6 01:33:01 tx1 named[12350]: starting BIND 9.3.6-P1-RedHat-9.3.6-20.P1.el5 -u named -t /var/named/chroot
//这里可知chroot的目录与named启动的参数等数据
Feb 6 01:33:01 tx1 named[12350]: found 1 CPU, using 1 worker thread
Feb 6 01:33:01 tx1 named[12350]: loading configuration from '/etc/named.conf'
//这里能够知道配置文件是有哪里加载的
Feb 6 01:33:01 tx1 named[12350]: using default UDP/IPv4 port range: [1024, 65535]
Feb 6 01:33:01 tx1 named[12350]: listening on IPv4 interface lo, 127.0.0.1#53
Feb 6 01:33:01 tx1 named[12350]: listening on IPv4 interface eth0, 192.168.8.70#53
Feb 6 01:33:01 tx1 named[12350]: command channel listening on 127.0.0.1#953
//能够知道有哪几个接口提供DNS的相关服务
Feb 6 01:33:01 tx1 named[12350]: zone tx.com/IN: loaded serial 42
Feb 6 01:33:01 tx1 named[12350]: running
//loaded serial的数据,这里不能出错
@4.客户端测试
[root@tx2 ~]# cat /etc/resolv.conf
search uplooking.com
nameserver 192.168.8.70
[root@tx2 ~]# nslookup www.tx.com
Server:192.168.8.70
Address:192.168.8.70#53
Name:www.tx.com
Address: 192.168.8.64
五.DNS的反向解析
1.在上一个的基础上修改一下
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
};
zone "8.168.192.in-addr.arpa" IN { //DNS的反解ip要从后往前写而后加上in-addr.arpa表示反解结束
type master;
file "192.168.20.zone";
};
[root@tx1 etc]# cd ../var/named/
[root@tx1 named]# ls
data slaves tx.com.zone
[root@tx1 named]# vim 192.168.8.zone
$TTL 86400
@ IN SOA ns.tx.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70
2.客户端测试
[root@tx2 ~]# nslookup 192.168.8.65
Server:192.168.8.70
Address:192.168.8.70#53
六.DNS的主从同步
1.
条件:须要两台 server ,主(192.168.8.70)从(192.168.8.71)。另外要注意这两台机器的时间
优势:
(1)从服务器能够分担主服务器的查询请求
(2)有了从服务器以后,能够快速的响应client的请求
(3)即便主服务器出现问题,从服务器依然能够提供查询服务
原理:
(1)当主服务器作好配置以后,会通知从服务器
(2)从服务器收到通知以后,查询SOA记录查 42 序列号
(3)从服务器去和主服务器比对序列号,若是从的序列号比主的小,那么他就要去和主进行数据同步。所以,主服务器修改完配置文件以后,都要把序列号调大,建议使用日期格式
(4)从服务器向主服务器发起数据请求;主服务器收到请求以后,开始传输数据
2. 具体配置
@1. Server的配置,这里面装包就再也不提了
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
allow-transfer {192.168.8.71;};//指定本身的从服务器的ip若是想实现多个从服务器,能够在{}里填写,以;结束
};
[root@tx1 etc]# cd ../var/named/
[root@tx1 named]# vim tx.com.zone
$TTL 86400
@ IN SOA ns.tx.com. root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns.tx.com.
ns IN A 192.168.8.70
www IN A 192.168.8.64
//与以前的没有什么变化
@2.Slave的配置
[root@tx2 chroot]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named/slaves";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
zone "tx.com" IN {
type slave; //指定类型为从
file "tx.com.slave";
masters {192.168.8.70; }; //指定主服务器的ip
};
@3.启动服务
主
[root@tx1 named]# service named restart
[root@tx1 ~]# tail -0f /var/log/messages
从
[root@tx2 etc]# service named restart
[root@tx2 named]# cd slaves/
[root@tx2 slaves]# ls
tx.com.slave(由DNS服务器同步过来的)
[root@tx1 ~]# tail -0f /var/log/messages
Apr 13 16:21:58 tx1 named[3195]: client 192.168.8.71#43262: transfer of 'tx.com/IN': AXFR started
Apr 13 16:21:58 tx1 named[3195]: client 192.168.8.71#43262: transfer of 'tx.com/IN': AXFR ended //日志里面能够看到传输的信息
七.DNS的主从加密传输
dnssec-keygen
-a :后面接的 [type] 为演算方式的意思,主要有 RSAMD5, RSA, DSA, DH
与 HMAC-MD5 等。建议你可使用常见的 HMAC-MD5 来演算密码;
-b :你的密码长度为多少?一般给予 512 位的 HMAC-MD5;
-n :后面接的则是客户端可以更新的类型,主要有底下两种,建议给 HOST 便可:
ZONE:客户端能够更新任何标志及整个 ZONE;
HOST:客户端仅能够针对他的主机名来更新
[root@tx1 named]# dnssec-keygen -a hmac-md5 -b 128 -n host txkey
Ktxkey.+157+28539
[root@tx1 named]# ls
chroot Ktxkey.+157+28539.key slaves
data Ktxkey.+157+28539.private
[root@tx1 named]# cat Ktxkey.+157+28539.key
txkey. IN KEY 512 3 157 kX7RaouImmrvdTFvoFYfxg== 要kX7RaouImmrvdTFvoFYfxg== //在上一DNS主从同步上作就能够
主:
[root@tx1 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
key txkey { //在上一个基础上加上这几行
algorithm hmac-md5; //algorithm运算法则
secret "kX7RaouImmrvdTFvoFYfxg== ";
};
zone "tx.com" IN {
type master;
file "tx.com.zone";
allow-transfer {key txkey;}; //这里也改动一下
};
从:
[root@tx2 etc]# vim named.conf
options
{
listen-on port 53 {any;};
directory "/var/named/slaves";
dump-file "data/cache_dump.db";
statistics-file "data/named_stats.txt";
memstatistics-file "data/named_mem_stats.txt";
allow-query {any;};
};
key txkey {
algorithm hmac-md5;
secret "kX7RaouImmrvdTFvoFYfxg== ";
};
zone "tx.com" IN {
type slave;
file "tx.com.slave";
masters { 192.168.8.70 key txkey; };
};
从:
[root@tx2 slaves]# rm -f tx.com.slave
主
[root@tx1 named]# service named restart
[root@tx1 ~]# tail -0f /var/log/messages
从:
[root@tx2 etc]# service named restart
[root@tx2 etc]# cd ../var/named/slaves/
[root@tx2 slaves]# ls
tx.com.slave
[root@tx1 ~]# tail -0f /var/log/messages
Apr 13 17:08:12 tx1 named[29970]: client 192.168.8.71#36850: transfer of 'tx.com/IN': AXFR started: TSIG txkey
Apr 13 17:08:12 tx1 named[29970]: client 192.168.8.71#36850: transfer of 'tx.com/IN': AXFR ended