DNS(Domain Name Server,域名系统)是互联网上做为域名和IP地址相互映射的一个分布式数据库,可以使用户方便的访问互联网,而不用去费力的记忆IP字符串。经过域名,最终能够获得该域名对应的IP地址的过程叫作域名解析。DNS协议运行在UDP洗衣上,使用的是53号端口。
html
DNS解析是目前互联网大多数应用的实际的寻址方式;域名技术的不断发展,和基于域名技术出现的新技术和新思路极大的丰富了互联网的应用;域名如今起着互联网的一种相似于身份标记的做用,具备惟一性,所以互联网的全球化发展也使得域名也成为一种重要的资源linux
NS服务器在互联网上承担的如此重要的任务,所以其高可用性也成为了重点。在一个区域的资源记录经过手动或自动方式更新到单个主名称服务器(主DNS)上,主DNS服务器能够是一个或者多个区域的权威名称服务器。
冗余的DNS服务器作为同一区域中主服务器的备份服务器,防止主服务器没法访问或者宕机。辅DNS服务器会按期与主DNS服务器通信,进而保证它的区域信息文件保持最新。若是不是最新的信息,辅助DNS服务器就会从主DNS服务器上获取最新的区域数据文件副本。这种将区域文件复制到多台名称服务器的过程称为区域复制。web
因为本次试验要模拟整个DNS的解析流程,所以须要的8台虚拟机,在其中5台机器上安装bind程序提供域名解析服务,2台虚拟机安装httpd(web服务)提供网页访问服务,剩下的一台虚拟机模拟客户端进行DNS查询。
注意:
1.实验前要关闭selinux,防火墙而且清空防火墙规则;
2.因为机器数量较多最好保持时间同步,以避免致使实验没法正常运行;
3.自建文件包注意权限问题,以防出现没法解析。数据库
因为仅仅是做为模拟,所以这里仅在douma.com的域名服务器作了主从备份,这里仅仅提供正向解析,想了解反向解析的构建的话能够参考以前的文章https://blog.51cto.com/11010461/2105703vim
环境清理
在全部主机上运行后端
setenforce 0 iptables -F iptables -X
搭建基础服务
在准备作dns解析的服务器上安装bind。缓存
yum install bind -y
在web服务器上配置httpd提供web服务服务器
#安装httpd 135和136两台主机 yum install httpd -y #构建相应页面 #192.168.99.135 echo this is web1.douma.com ! > /var/www/html/index.html #192.168.99.136 echo this is web2.douma.com ! > /var/www/html/index.html
启动httpd 而且验证是否可以提供服务架构
systemctl start httpd #使用curl命令访问httpd curl + ip
douma.com主服务器192.168.99.133
编辑主服务器的配置文件负载均衡
vim /etc/named.conf
对主配置文件作以下修改
编辑域文件,建立对douma.com域的解析
vim /etc/named.rfc1912.zones
添加以下字段
zone "douma.com" IN { type master; file "douma.com.zone"; };
建立douma.com.zone文件
cd /var/named/ vim douma.com.zone
编辑添入信息
$TTL 1D @ IN SOA dns1.douma.com. admin.douma.com.( 2018060205 ;序列号 1D ;刷新时间 2H ;重试时间 3D ;过时时间 1H) ;否认答案的TTL值 NS dns1 NS dns2 dns1 IN A 192.168.99.133 dns2 IN A 192.168.99.134 @ IN A 192.168.99.135 @ IN A 192.168.99.136 www IN A 192.168.99.135 www IN A 192.168.99.136 * IN CNAME www
修改文件权限
chown :named douma.com.zone chmod 640 douma.com.zone
启动bind服务而且验证是否能够解析
systemctl start named systemctl status named #dig命令在bind-utils包中,若是安装bind时候未绑定安装能够后续手动安装 dig www.douma.com @192.168.99.133
正常解析
配置从服务器
从服务器192.168.99.134
编辑bind主配置文件
vim /etc/named.conf
编辑域配置文件添加从服务器配置
vim /etc/named.rfc1912.zones
添加以下字段
zone "douma.com" IN { type slave; masters {192.168.99.133;}; file "slaves/douma.com.zone"; };
这里不用手动建立douma.com.zone,在服务启动后会自动去主服务进行同步
启动服务
systemctl start named
在从服务器上验证是否可以解析
dig www.douma.com @192.168.99.134
com地址是192.168.99.132
编辑配置文件
vim /etc/named.conf
编辑named.rfc1912.zones添加解析信息
vim /etc/named.rfc1912.zones #添加如下信息 zone "com" { type master; file "com.zone"; };
建立com.zone
cd /var/named/ vim com.zone
添加对应解析信息
$TTL 1D @ IN SOA dns.com. admin.com. ( 2018010201 1D 2H 3D 3H) NS dns1 douma NS dns2 douma NS dns3 dns1 A 192.168.99.132 dns2 A 192.168.99.133 dns3 A 192.168.99.134
# 修改权限 chown :named com.zone chmod 640 com.zone
启动服务而且验证是否能够查询
systemctl start named dig www.douma.com @192.168.99.132
根服务器的IP地址192.168.99.131
编辑/etc/named.conf
vim /etc/named.conf
因为的模拟根服务器,所以在它之上不能有其余的dns服务器,要注释掉配置文件最后的根域
建立根域定义
vim /etc/named.rfc1912.zones
添加根域信息
zone "." { type master; file "root.zone"; };
建立域文件
cd /var/named/ vim root.zone
编辑根解析库
$TTL 1D @ IN SOA dns1. admin. ( 20180601 1D 2H 3D 1H) NS dns1 com NS dns2 dns1 A 192.168.99.131 dns2 A 192.168.99.132
修改文件权限
chown :named root.zone chmod 640 root.zone
启动服务并作验证
systemctl start named dig www.douma.com @192.168.99.131
ISP地址192.168.99.130
编辑/etc/named.conf文件
vim /etc/named.conf
因为是本身搭建的模拟DNS运行的系统,所以须要修改named.ca文件,将根服务器指向本身构建的根,同时因为仅仅是ISP的服务器,无需定义域,仅仅负责查询便可。
编辑named.ca文件
vim /var/named/ vim named.ca
启动服务并进行验证
systemctl start named dig www.douma.com @192.168.99.130
客户端仅须要将DNS指向ISP服务器便可
vim /etc/resolv.conf #添加dns信息 nameserver 192.168.99.130
验证是否能够解析
dig www.douma.com @192.168.99.130
使用curl命令请求web端
curl www.douma.com
dns的解析是简单的轮询
虽然DNS的轮询也是一种负载均衡的方式,成本极低,可是其缺点一样明显,DNS做为简单轮询没法理解后端服务器的承载能力;轮询过程仅仅负责将请求转交,一旦转交的目标主机故障仍会转交,没法容错;要保证数据最新就要设置较小的刷新时间,但会形成额外的DNS流量开销;一旦某台服务器宕机,修改DNS设置后,仍需一段时间才能生效。
DNS轮询受到各方的影响比较严重,并不能算一种很好的负载均衡技术
https://web.stanford.edu/~riepel/lbnamed/
在 named.conf 中能够设置 bind 的 round-robin 的给出结果的顺序:
options {
rrset-order { order random; };
};
rrset-order 支持三个参数:fixed, random, cyclic 。fix 会将多个A记录按配置文件的顺序固定给出;random 会随机给出;cyclic 会循环给出。