目录
DNS概述
DNS的搭建:
实战
实战1:搭建一台DNS服务器,解析test.cn
扩展1:配置一台DNS转发服务器
扩展2:通过DNS解析做负载均衡
实战2:搭建DNS主从服务器
实战3:DNS主从密认证
DNS测试工具
DNS Domain Name System 域名系统
1、结构:
DNS是一个分布式数据库,采用层级的逻辑结构,如同一块棵倒置的树,称为域名空间,其中树的深度不能超过127层,每个节点最多可存储63个字符。DNS中树的每个节点代表一个域,通过这些节点对域名空间进行划分,成为一个层级结构。
根域——顶级域——二级域---.....
.(root) com/cn.. baidu.com....
全球有13个根服务器
顶级域:有三种类型
组织域:3个字符,如com为商业机构组织(营利)、net网络、edu教育、org非盈利机构、gov政府、int国际、mil军事
地址域:2个字符代表国家或地区代号,cn中国、kr为韩国、us为美国
反向域:是一个特殊域,名字为in-addr.arpa,用于将IP地址解析到域名,即反向解析。(域名解析为IP地址叫正向解析)
域名:
域名空间中每个域的名字,如.baidu.com,就叫域名。通常由一个完全合格域名(FQDN)来标识,它能完全表示出从节点到DNS树根 . 的完整路径,如www.baidu.com.通常将最后的根省略。从节点到根采用反向书写,将每个节点用“.”分割。
子域:
baidu为com域的子域,表示为baidu.com。www为baidu域的子域,表示为www.baidu.com
区zone:
资源记录,服务器回答自己区中主机的查询,每个区都有自己的授权服务器。
2、主服务器和从服务器:
一方面做为主服务器的备份冗余,防止主服务器崩溃,另一方面,当区的从服务器启动时,会与主服务器连接一次,用于检查更新区中的数据。每个区必须有主服务器,和至少一台辅助服务器。
主从同步的原理:主每次修改配置文件都需要修改一下序列号(区域配置文件中的serial),从会监听主的tcp 53端口,根据refresh的值(刷新时间),去探测主配置文件的序列号,若发现主的序列号有变化,则将配置文件同步到本地。
3、DNS查询方式:
递归查询:
一次性沟通完。服务器收到一个域名解析请求后,必须回复一个准确的查询结果。
迭代查询:
服务器并不直接回复结果,而是告诉客户机另一台DNS服务器的地址,客户机再向这台服务器发送请求,依次循环,直到查询到结果为止。
从客户端到本地DNS服务器的就属于递归查询,DNS服务器之间就是迭代查询
4、DNS资源记录:
Start of Authority Record,起始授权记录,在每个区的起始处定义。定义了域的全局参数,进行整个域的管理,一个区域文件只能允许存在唯一的SOA记录
用来指定由哪个DNS服务器进行解析。
就是域名解析到IP地址的记录(IPV4)
从IP地址解析到域名的记录,即反向解析
别名记录,可以用CNAME记录来隐藏真实的域名。
6、MX资源记录
邮件交换记录,指定邮件交换服务器。
7、AAAA资源记录
IPV6解析
参照区域配置文件/var/named/name.localhost理解
5、端口:
tcp/53 udp/53 #用于客户端查询
tcp/953 udp/953 #用于DNS主从同步,BIND9
1、安装相应程序包
cd /run/media/root/CentOS\ 7\ x86_64/Packages/
rpm -ivh bind-9.9.4-29.el7.x86_64.rpm #主程序包
rpm -ivh bind-chroot-9.9.4-29.el7.x86_64.rpm #bind-chroot
rpm -ivh bind-utils-9.9.4-29.el7.x86_64.rpm #使用工具
BIND,伯克利因特网名称域系统,目前应用最广泛的DNS服务软件
bind-chroot :是bind的一个功能,它使bind运行时的根目录不是真正的/(根),只是系统的一个子目录,仅有这个子目录的权限,是为了提高安全性。
2、配置文件
/etc/named.conf 是bind的核心配置文件,但不包含区域的数据
/var/named/named.localhost 区域配置文件,(这是一个参考文件)
注意:由于使用了chroot功能,所以会有一个代替了根目录的子目录,所以也可以在那里配置
区域配置文件中时间内容的解释:
0 ; serial #更新序列号,辅助服务器每更新配置文件,需要将该值加1。也可作为是否要更新的依据,如果比这个值小,就更新,若相等,表示没有新的内容,就不更新
1D ; refresh #刷新地址数据库文件的时间,默认1day
1H ; retry #更新失败后,重试所等待的时间,1小时
1W ; expire #到期时间,超过该时间,仍然无法更新,则不再尝试,一周
3H ) ; minimum #无效地址解析记录的缓存时间 3小时
3、启动服务
sysytemctl start named
netstat -anpl |grep named #查看是否启动成功
配置一个正向解析区域,授权DNS服务器管理test.cn区域,并把该区域的区域文件命名为test.cn.zone
cp /etc/named.conf /etc/named.conf.bak
vim /etcc/named.conf
options { #全局选项
listen-on port 53 {any; }; #any,监听任意主机
listen-on-v6 port 53 { any; }; #ipv6也改为any
allow-query { any; }; #允许所有人查询
recursion yes; #递归查询,本地的服务器为yes,公网的则为no,即迭代查询
};
zone "test.cn" IN { #区域配置,定义要解析的域名
type master; #定义主从
file "test.cn.zone"; #定义区域配置文件
};
2、修改区域配置文件
cd /var/named
cp -p named.localhost test.cn.zone #拷贝一份区域配置文件,-p:保留原文件权限
vim test.cn.zone
$TTL 1D #设置有效的解析记录的默认缓存时间,1天
test.cn. IN SOA dns.test.cn. root.test.cn. ( #指定域、起始授权记录SOA,就是这个域的管理者、邮箱地址
......
test.cn. NS dns.test.cn. #添加NS记录
dns.test.cn. A 192.168.142.162 #添加A记录,确切的解析内容
www.test.cn. A 192.168.142.162
xue.test.cn. CNAME www.test.cn. #添加CNAME记录别名
test.cn. MX 10 mail.test.cn. #邮件,10是优先级,越小越高
mail.test.cn. A 192.168.142.162
3、重启服务
4、测试
将本机的DNS服务器改为192.168.142.161,即本机为DNS服务器
vim /sysconfig/network-scripts/icffg-eno16777736
DNS=192.168.142.161
PEERDNS=no #不允许dhcp获取的dns覆盖本地dns,如果是手动配的ip,就不用改。
ping www.test.cn
可以看到将www.test.cn解析为了192.168.142.162
也可以将另外一台机器的DNS改为192.168.142.161,ping www.test.cn
vim /etc/named.conf
option中添加
forward only; #定义只转发。first:先查找本地,再转发
forworders {8.8.8.8}; #指定将请求转发到哪台服务器上
vim /var/named/test.cn.zone
test.cn. NS dns.test.cn. #添加NS记录
dns.test.cn. A 192.168.142.162 #添加A记录,确切的解析内容
www.test.cn. 1 A 192.168.142.162 #1表示此纪录在客户端上保留1秒
www.test.cn. 1 A 192.168.142.161
www.test.cn. 1 A 192.168.142.1
xue.test.cn. CNAME www.test.cn.
1、主服务器上修改主配置文件
vim /etc/named.conf
zone "test.cn" IN {
type master;
file "test.cn.zone";
allow-transfer {192.168.142.0/24; }; #允许哪个网段的从(辅助)服务器管理test.cn这个域,不写的话默认所有。
};
2、从服务器上安装DNS
rpm -ivh bind-9.9.4-29.el7.x86_64.rpm
rpm -ivh bind-chroot-9.9.4-29.el7.x86_64.rpm
rpm -ivh bind-utils-9.9.4-29.el7.x86_64.rpm
3、配置从服务器
vim /etc/named.conf
options {
listen-on port 53 {any; }; #any,监听任意主机
listen-on-v6 port 53 { any; }; #ipv6也改为any
allow-query { any; }; #允许所有人查询
};
zone "test.cn" IN { #区域配置,定义要解析的域名
type slave; #定义主从
file "slaves/test.cn.zone.file"; #定义区域配置文件,重启服务后,会在/var/named/slaves下自动创建一个名为test.cn.zone.file的文件。
masters {192.168.142.161; }; #指定主服务器
};
4、测试
重启文件,看到上述自动生成的目录则表示成功。
如果打开后是乱码,那是因为主从上的文件类型不一致,主服务器的域文件类型是text,从服务器的文件类型是data。
在从服务器的/etc/named.conf中添加,masterfile-format text ; ,重启服务即可。
1、主从服务器的时间要同步,可用ntp
vim /etc/ntp.conf #找一个ntp服务器
ntpdate 0.centos.pool.ntp.org iburst
2、主dns服务器上生成密钥
cd /etc
dnssec-keygen -a hmac-md5 -b 128 -n HOST 123 #-a指定算法,-b指定密钥长度,-n指定主机类型(HOST|ZONE等) 123为密钥名字
dnssec-keygen --help
3、修改主服务器的主配置文件
vim /etcc/named.conf
key aaakey { #定义密钥名称
algorithm hmac-md5; #算法
secret “bPGEurxVSY1acKMVpE0Sjw==”; #将生成的密钥复制过来
}
zone "test.cn" IN {
type master;
file "test.cn.zone";
allow-transfer {key aaakey; }; #引用aaakey
4、配置从服务器:
vim /etcc/named.conf
key aaakey {
algorithm hmac-md5;
secret “bPGEurxVSY1acKMVpE0Sjw==”;
};
zone "test.cn" IN { #区域配置,定义要解析的域名
type slave; #定义主从
file "slaves/test.cn.zone.file";
masters {192.168.142.161 key aaakey; }; #指定主服务器
};
5、重启主从服务
查看/var/named/slaves有没有名为test.cn.zone.file的文件。(注意:重启前删除之前生成的这个文件)
1、nslookup
2、dig命令(比nslookup强大一点)
dig @8.8.8.8 www.test.cn #可指定DNS服务器
如有错误,敬请指正~~