一、DNS概念简述
DNS:Domain Name Service 域名解析服务,工作在应用层,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS监听在TCP和UDP端口53。
FQDN:全称域名,如 www.example.com
- www是主机名
- example.com是域名
实现名称到IP解析的有三种方式:
- 分散式解决方案:/etc/hosts,不易管理
- 集中式解决方案:NIC,如果主机太多,对单一服务的压力太大
- 分布式解决方案:DNS,解决了上俩个方式的不足
权威的DNS服务器:记录主机名到IP的DNS服务器叫做权威的DNS服务器
主从DNS服务器:主服务器记录发生变化,会同步到从服务器,(主从复制),实现容错机制
- 序列号:解析库版本号,主服务器解析库变化时,其序列递增
- 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
- 过期时长:从服务器联系不到主服务器时,多久后停止服务
DNS的查询类型:
- 递归查询:服务器从根开始去找一级一级的找到目标主机,直到找到,负责到底
- 迭代查询:根服务器给了主机所在的域的IP,并没有直接给出结果
DNS的解析类型:正反向解析是两个不同的名称空间,是两棵不同的解析树
- 正向解析:FQDN --> IP
- 反向解析:IP —> FQDN 如邮件服务器需要用到反向解析技术
DNS服务器的类型:
- 主服务器:管理和维护所负责解析的域内解析库的服务器
- 从服务器:从主服务器或从服务器“复制”(区域传输)解析库副本 缓存服务器
DNS的工作原理
- 客户端向离它最近的DNS服务器发起了查询请求,一般是由运营商提供
- 如果代理DNS服务器有记录则直接可以返回给客户端;如果没有记录则去根DNS服务器请求,根DNS并不会存储所以的主机名对应IP的记录,它只会记录它的子域的IP,例如.com等后缀的域,代理DNS服务器会拿到.com域的DNS服务器IP
- 然后再将请求发往.com.域的DNS服务器,如果还是没有找到主机,则再往它的下一级找,直到找到具体的主机,把IP返回给客户端,同时代理DNS服务器也会缓存一份到本地
一次完整的查询请求经过的流程:Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS
DNS域名
- 根域:目前有13个根集群服务器,美国10台,日本1台,荷兰1台,瑞典1台
- 一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa组织域、国家域(.cn, .ca, .hk, .tw)、反向域 等
- 二级域名
- 三级域名
- 最多127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理
DNS服务管理工具
dig:只用于测试dns系统,不会查询hosts文件进行解析
- x IP :测试反向解析
- -t axfr ZONE_NAME @SERVER :模拟区域传送
- -t NS . @http://a.root-servers.net :查询所有的根DNS服务器
host
- -t:指定查询记录类型
- host www.dongfei.tech 192.168.0.7 :向192.168.0.7查询www.dongfei.tech这个域名
rndc
- reload: 重载主配置文件和区域解析库文件
- reload zonename: 重载区域解析库文件
- retransfer zonename: 手动启动区域传送,而不管序列号是否增加
- notify zonename: 重新对区域传送发通知
- reconfig: 重载主配置文件
- querylog: 开启或关闭查询日志文件/var/log/message
- trace: 递增debug一个级别
- trace LEVEL: 指定使用的级别
- notrace:将调试级别设置为 0
- flush:清空DNS服务器的所有缓存记录
- named-checkconf:检查配置文件的语法
named-checkzone “http://dongfei.com” /var/named/dongfei.com.zone :查询区域数据库文件的语法
【文章福利】小编推荐自己的linuxC/C++语言交流群:【1106675687】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!~直通车
二、DNS服务
DNS的实现:bind(Bekerley Internat Name Domain ) ,由 ISC (http://www.isc.org) 维护,本章所有配置实例的bind版本为 :bind-9.9.4-61.el7.x86_64
- 软件包名:bind
- 服务名:named
- 提供的服务:DNS域名解析
- 主配置文件:/etc/named.conf
options { #全局选项
listen-on port 53 { 127.0.0.1; }; //默认监听本机的53号端口,如果没有其他需求则注释掉
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; }; //授权为指定的主机解析,默认只为本机解析,需要注释掉
recursion yes|no; //递归查询,默认开启
dnssec-enable yes; //sec功能,与安全加密传输相关的选项,如果要做转发,需要关闭此选项
dnssec-validation yes; //同上一条,需要关闭
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
allow-transfer { none; }:允许区域传送的主机;白名单,默认开启,建议关闭
};
logging { //日志子系统配置
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { //根区域定义,如果自己要做根服务器的话需要注释掉
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones"; //区域定义信息放在此文件
include "/etc/named.root.key";
DNS解析数据库文件存放位置:/var/named/
区域定义:/etc/named.rfc1912.zones
zone "test.com" IN { //internation 记录
type {master|slave|hint|forward}; //类型,主服务器
file "test.com.zone"; //区域数据库文件
};
区域文件模板:/etc/named.rfc1912.zones
# cat /var/named/named.localhost
$TTL 1D #默认的TTL值
@ IN SOA @ rname.invalid. ( #SOA记录
0 ; serial #序列号
1D ; refresh #主从复制的时间间隔
1H ; retry #如果主从复制失败重试时间
1W ; expire #失效时间
3H ) ; minimum #否定答案的TTL值
NS @ #名字服务器记录
A 127.0.0.1 #正向解析记录
AAAA ::1 #IPv6的正向解析记录
区域解析数据库文件:
资源记录:Resource Record 简称 RR
语法格式:name [TTL] IN rr_type value
- name:当前区域的名字,列如 www.example.com.,注意:最后的 “.”
一定要加,如果不加则会把你的域名当成区域名字,再在后边加上你的默认域名。 “@”:表示当前域名的名字 - TTL:例如$TTL 1D的意思是默认的TTL值为1天
TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
- IN:关键字
记录类型
- A :正向解析,名字到IP
主机名(简称只写主机名,如www) A ip地址
@ A 192.168.0.12 //不需要输入www,直接输入域名则可访问此网站
* A 192.168.0.12 //泛域名解析,只要请求的是这个域,但是没有匹配的主机,则应答此条记录
$GENERATE 1-254 websvr$ A 192.168.0.$ //循环,表示websvr1 A 192.168.0.1 到 websvr254 A 192.168.0.254的254条记录
- AAAA:正向解析,名字到IPV6
- PTR:反向解析
12 PTR websrv.dongfei.com.
14 PTR web2srv.dongfei.com.
100 PTR mailsrv.dongfei.com.
NS:名字服务器记录,记录谁是这个域的DNS服务器,包括主服务器和从服务器
NS dns //表示192.168.0.1这台主机是这个域的dns服务器
dns A 192.168.0.1
- CNAME:别名记录
websrv A 192.168.0.10
websrv A 192.168.0.11
websrv A 192.168.0.12
www CNAME websrv //访问www.xxxx.com的时候则代表访问192.168.0.10-12,DNS会做轮调应答,实现负载均衡的功能
- MX:邮件记录
@ MX 10 mailsrv1
@ MX 20 mailsrv2
mailsrv1 A 192.168.0.100
mailsrv2 A 192.168.0.200
- SOA:起始授权记录,记录域中的主DNS服务器,一个区域解析库中只能有且仅能有一个SOA记录,必须位于解析库的第一条记录
SOA记录的格式:域名称 IN SOA 主DNS主机名 域管理员邮箱 (序列号 主从同步的时间间隔 同步失败的尝试时间间隔 联系不上主DNS多长时间后失效 域名无法找到,在多长时间内不会再去查询)
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
实例1:配置DNS主服务器的正向解析
1)安装bind
# yum install bind
# systemctl start named
2)修改主配置文件,将下边俩条注释掉
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; }; //监听本机的所有地址
// allow-query { localhost; }; //允许给所有客户端解析
3)修改区域数据文件
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN { //internation 记录
type master; //类型,主服务器
file "dongfei.com.zone"; //区域数据库文件,指向/var/named/dongfei.com.zone
};
4)新建区域解析数据库文件,/var/named/dongfei.com.zone
# vim /var/named/dongfei.com.zone
$TTL 1D //代表全局的TTL值
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H ) //SOA记录,按格式写
NS dns1 //NS记录,域中有几个DNS服务器都要写出来
dns1 A 192.168.0.7 //NDS服务器的A记录,0.7是本机的IP
www A 192.168.0.6 //一条正向解析记录,这里的0.6是web服务器
# chgrp named /var/named/dongfei.com.zone //切记,修改文件的权限和所属组,保证named进程有此文件的可读属性
# chmod 640 /var/named/dongfei.com.zone
# ll /var/named/dongfei.com.zone
-rw-r-----. 1 root named 120 Jun 1 19:39 /var/named/dongfei.com.zone
5)测试
# named-checkconf //检查主配置文件
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone //检查
# rndc reload //重载配置文件
# dig www.dongfei.com @192.168.0.7 //在客户端上使用dig命令测试,如果返回有以下值则说明成功
;; ANSWER SECTION:
www.dongfei.com. 86400 IN A 192.168.0.6
实例2:配置DNS主服务器的反向解析
1)在/etc/name.rfc1912.zone中加入
zone "0.168.192.in-addr.arpa" IN { //地址需要反着写,与正向解析不同,是另一颗树
type master;
file "192.168.0.zone";
};
2)创建区域数据文件
# vim /var/named/192.168.0.zone
$TTL 1D
@ IN SOA dns.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
NS dns.dongfei.com.
dns.dongfei.com A 192.168.0.7
100 PTR mail.dongfei.com.
# chgrp named /var/named/192.168.0.zone
# chmod 640 /var/named/192.168.0.zone
# rndc reload
3)重载配置文件,测试
# vim /etc/resolv.conf
nameserver 192.168.0.7 //在客户端将DNS服务器指向我们配置的DNS服务器
# dig -x 192.168.0.100 //测试,如果出现以下信息则表示成功
;; ANSWER SECTION:
100.0.168.192.in-addr.arpa. 86400 IN PTR mail.dongfei.com.
实例3:DNS服务的动态更新
1)打开允许指定主机更新数据库
zone "dongfei.com" IN {
type master;
file "dongfei.com.zone";
allow-update { 192.168.0.6; }; //允许192.168.0.6远程更新数据库
};
2)放开数据库文件夹和文件的权限
# chmod 770 /var/named/
# ll -d /var/named/
drwxrwx---. 5 root named 173 Jun 1 20:55 /var/named/
# rndc reload
3)在客户端测试,上传一条更新记录
# nsupdate
> server 192.168.0.7
> zone dongfei.com
> update add ftp.dongfei.com 86400 IN A 192.168.0.101
> send
> quit
# dig ftp.dongfei.com @192.168.0.7 // 出现以下信息表示成功
;; ANSWER SECTION:
ftp.dongfei.com. 86400 IN A 192.168.0.101
这时我们再回来看DNS服务器的/var/named/文件夹下出现了一个 dongfei.com.zone.jnl
的文件,这个文件是更新数据库的日志文件,它不会立即同步到区域数据中库文件中,而是会先存放到日志文件中,过一会儿再向数据库文件中同步。
#named-journalprint /var/named/dongfei.com.zone.jnl 查看日志文件
三、DNS的主从复制
DNS服务一般需要一台主,俩台从,如果主DNS服务器出现故障后可以向从DNS服务器请求解析;客户端需要将主DNS设置为主DNS服务器,将从DNS服务器设置为备DNS服务器
实例3:配置主从DNS服务
192.168.0.7 为主DNS服务器
192.168.0.11 为从DNS服务器
192.168.0.6 为客户端
1)主服务器配置
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer { 192.168.0.11; }; //只允许从DNS服务器同步区域数据库
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
type master;
file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 86400 ; 1 day
@ IN SOA dns1.dongfei.com. admin.dongfei.com. (
2 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns1
NS dns2 //将从DNS服务器的NS记录添加到此
dns1 A 192.168.0.7
dns2 A 192.168.0.11 //将从DNS服务器的A记录添加到此
ftp A 192.168.0.101
www A 192.168.0.6
@ MX 10 mail
mail A 192.168.0.100
2)配置从DNS服务器
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer { none; }; //为了数据安全,不允许任何主机从从DNS服务器上拉取区域数据
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
type slave; //类型为从服务器
masters { 192.168.0.7; }; //主DNS服务器的IP
file "slaves/dongfei.com.zone.slave"; //数据库文件保存到 /var/named/slaves/ 文件夹下,名字叫dongfei.com.zone.slave
};
# systemctl restart named //重启服务
# ls /var/named/slaves/ //可以看到数据库文件则证明已经同步成功
dongfei.com.zone.slave
3)在客户端测试
# vim /etc/resolv.conf //修改DNS配置文件
; generated by /sbin/dhclient-script
nameserver 192.168.0.7
nameserver 192.168.0.11
# dig www.dongfei.com
;; ANSWER SECTION:
www.dongfei.com. 86400 IN A 192.168.0.6
;; SERVER: 192.168.0.7#53(192.168.0.7)
主服务器可以正常解析,接下来我们将主机模拟故障,比如把网络断掉
# dig www.dongfei.com //再次在客户端测试,发现现在已经是从服务响应我们的解析请求了
;; ANSWER SECTION:
www.dongfei.com. 86400 IN A 192.168.0.6
;; SERVER: 192.168.0.11#53(192.168.0.11) //192.168.0.11是从服务器地址
dig -t axfr magedu.com @192.168.0.7 手动抓取区域记录
注意:
- 用户查询是走的UDP的53端口
- 主从复制的时候需要放开tcp和udp 的53号端口
- 需要的防火墙开放tcp和udp的53号端口
四、DNS子域委派
在互联网中我们的单个DNS服务无法去存储所有主机的域名到IP的记录,比如根域,它只是将来至查询.com 的请求委派给.com域的DNS服务器,来自.org的查询交给.org域的DNS服务器。具体怎么实现配置,那我们来一起研究吧
实例4:配置子域委派的实现
环境:
父:192.168.0.7,dongfei.com
子:192.168.0.11,bj.dongfei.com
1)配置父域
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
dnssec-enable no;
dnssec-validation no;
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
type master;
file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 86400 ; 1 day
@ IN SOA dns1.dongfei.com. admin.dongfei.com. (
2 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns1
bj NS dns2.dongfei.com. //将bj域的请求委派给dns2来处理
dns1 A 192.168.0.7
dns2 A 192.168.0.11
# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# rndc reload
2)配置子域
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
# vim /etc/named.rfc1912.zones
zone "bj.dongfei.com" IN {
type master;
file "bj.dongfei.com.zone";
};
# vim /var/named/bj.dongfei.com.zone
$TTL 1D
@ IN SOA dns1.bj.dongfei.com. admin.bj.dongfei.com. ( 1 1D 1H 1W 3H )
NS dns1
dns1 A 192.168.0.11
www A 192.168.0.6
# chgrp named /var/named/bj.dongfei.com.zone
# chmod 640 /var/named/bj.dongfei.com.zone
# rndc reload
3)在客户端测试
# dig www.bj.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.bj.dongfei.com. 86385 IN A 192.168.0.6
五、DNS转发
- 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
- 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行;关闭dnssec功能(dnssec-enable no; dnssec-validation no; )
转发器类型:
- first模式:优先先转发到目标DNS服务器,如果区域不存在,再转发到根上去查询
- onyl模式:只转发到目标DNS服务器,如果目标主机没有此查询的信息则转发失败
实例5:配置DNS转发(全局转发)
192.168.0.11 为转发DNS服务器
192.168.0.7 为目标DNS服务器
1)配置转发DNS服务器
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
recursion yes; //开启递归查询
dnssec-enable no;
dnssec-validation no;
forward only; //only模式
forwarders { 192.168.0.7; }; //目标DNS服务器IP
};
# rndc reload //重载配置文件
2)配置目标DNS服务器
# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-transfer { 192.168.0.11; };
recursion no; //关闭递归查询
dnssec-enable no;
dnssec-validation no;
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
type master;
file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 86400 ; 1 day
@ IN SOA dns1.dongfei.com. admin.dongfei.com. (
2 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns1
dns1 A 192.168.0.7
webs A 192.168.0.6
webs A 192.168.0.5
www CNAME webs
@ MX 10 mail
mail A 192.168.0.100
ftp A 192.168.0.101
# rndc reload
3)在客户端测试
# dig www.dongfei.com @192.168.0.11
;; ANSWER SECTION:
www.dongfei.com. 86369 IN CNAME webs.dongfei.com.
webs.dongfei.com. 86369 IN A 192.168.0.6
webs.dongfei.com. 86369 IN A 192.168.0.5
;; SERVER: 192.168.0.11#53(192.168.0.11) //真正的域名解析信息在192.168.0.7上,这里由0.11代为去查询
如果对单个域进行转发则把配置写到区域配置文件中即可
#vim /etc/named.rfc1912.zones zone “dongfei.com” { type forward; forward only; forwarders { 192.168.0.7; }; };
六、智能DNS
在互联网上各个地区的网络站点分布到各个地区,这时就需要按地区为当地地区的客户解析到当地的站点服务器,比如在北京和在上海打开同一个网站显示的信息是不同的;这就需要用到智能DNS解析的技术。
电商站点或者视频站点,这些站点需要快速响应客户的请求,不可能将服务器搭建到一个地区,而是需要分布到各个省市,在每个地方有缓存服务器,这就是CDN: Content Delivery Network内容分发网络的工作,一般由单独的CDN公司搭建机房服务于各大电商视频等站点。
接下来,我们一起研究一下如何实现智能DNS解析吧
ACL规则
acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;只能先定义,后使用,因此一般定义在配置文件中,处于options的前面
格式:
acl acl_name {
ip;
net/prelen;
……
};
bind有四个内置的acl:
- none: 没有一个主机
- any: 任意主机
- localhost: 本机
- localnet: 本机的IP同掩码运算后得到的网络地址
访问控制的指令:
- allow-query {}: 允许查询的主机;白名单
- allow-transfer {}:允许区域传送的主机;白名单
- allow-recursion {}: 允许递归的主机,建议全局使用
- allow-update {}: 允许更新区域数据库中的内容
view 视图
view:视图:实现智能DNS
- 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
- 每个view用来匹配一组客户端
- 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
注意:
- (1) 一旦启用了view,所有的zone都只能定义在view中
- (2) 仅在允许递归请求的客户端所在view中定义根区域
- (3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
实例6:ACL和view实现智能DNS
在一台主机上有俩张网卡,配置俩个网段来模拟来自不同地区的客户 192.168.0.7/24 172.20.111.236/16
1)添加ACL和视图
# vim /etc/named.conf
acl bjnet { //注意,acl要写在options前边,而且要注意acl的匹配顺序关系,至上而下
192.168.0.0/24;
};
acl shnet {
172.20.0.0/16;
};
acl othernet {
any;
};
options {
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
};
view bjview {
match-clients {bjnet;};
include "/etc/named.rfc1912.zones.beijing";
};
view shview {
match-clients {shnet;};
include "/etc/named.rfc1912.zones.shanghai";
};
view otherview {
match-clients {othernet;};
include "/etc/named.rfc1912.zones";
};
include "/etc/named.root.key";
注意:要将默认配置文件中的根区域配置放到/etc/named.rfc1912.zones文件中
2)创建各地区区域配置文件
# vim /etc/named.rfc1912.zones.beijing
zone "dongfei.com" {
type master;
file "dongfei.com.zones.beijing";
};
# vim /etc/named.rfc1912.zones.shanghai
zone "dongfei.com" {
type master;
file "dongfei.com.zones.shanghai";
};
3)配置解析数据库文件
# vim /var/named/dongfei.com.zones.beijing
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
NS dns1
dns1 A 192.168.0.7
www A 192.168.0.1
# vim /var/named/dongfei.com.zones.shanghai
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
NS dns1
dns1 A 172.20.111.236
www A 172.20.111.1
4)在客户端测试
# dig www.dongfei.com @192.168.0.7
;; ANSWER SECTION:
www.dongfei.com. 86400 IN A 192.168.0.1
;; SERVER: 192.168.0.7#53(192.168.0.7)
# dig www.dongfei.com @172.20.111.236
;; ANSWER SECTION:
www.dongfei.com. 86400 IN A 172.20.111.1
;; SERVER: 172.20.111.236#53(172.20.111.236)
从上边的测试结果,从不同IP段查询同一个域名得到的结果却不一样,从而可以实现按地区来智能解析
七、模拟搭建互联网名称解析服务架构
1)192.168.0.1 : web
# echo -e web1.dongfei.com\n\<h1\>hello web1\</h1\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.1
# web1.dongfei.comn<h1>hello web1</h1>
2)192.168.0.2 : web2
# echo -e web2.dongfei.com\n\<h2\>hello web1\</h1\> > /var/www/html/index.html
# service httpd start
# curl 192.168.0.2
web2.dongfei.comn<h2>hello web2</h1>
3)192.168.0.3 :dns1,配置dongfei.com域的主DNS服务器
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; //注释掉
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; }; //注释掉
allow-transfer { 192.168.0.4; }; //只允许192.168.0.4的主机,也就是从DNS来拉取区域解析数据库
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" IN {
type master;
file "dongfei.com.zone";
};
# vim /var/named/dongfei.com.zone
$TTL 1D
@ IN SOA dns1.dongfei.com. admin.dongfei.com. ( 1 1D 1H 1W 3H )
NS dns1
NS dns2
dns1 A 192.168.0.3
dns2 A 192.168.0.4
webs A 192.168.0.1
webs A 192.168.0.2
www CNAME webs
# chgrp named /var/named/dongfei.com.zone
# chmod 640 /var/named/dongfei.com.zone
# named-checkconf
# named-checkzone "dongfei.com" /var/named/dongfei.com.zone
# service named start
# dig www.dongfei.com @192.168.0.3
;; ANSWER SECTION:
www.dongfei.com. 86400 IN CNAME webs.dongfei.com.
webs.dongfei.com. 86400 IN A 192.168.0.1
webs.dongfei.com. 86400 IN A 192.168.0.2
4)192.168.0.4 :dns2,配置dongfei.com域的从DNS服务器
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; }; //注释掉
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; }; //注释掉
allow-transfer { none; }; //不对任何主机做区域传送
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "dongfei.com" {
type slave; //类型为从服务器
masters { 192.168.0.3; }; //指向谁是我的主服务器
file "slaves/dongfei.com.zone.slave"; //解析数据库存放位置
};
# named-checkconf
# service named start
# ls -l /var/named/slaves/ //查看一下有没有数据库文件,有则说明同步成功
-rw-r--r--. 1 named named 417 May 19 22:09 dongfei.com.zone.slave
5)192.168.0.5 :com. 配置子域委派
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "com" IN {
type master;
file "com.zone";
};
# vim /var/named/com.zone
@ IN SOA dns1.com. admin.com. ( 1 1D 1H 1W 3H )
NS dns1
dongfei NS dns2.com. //子域委派给192.168.0.3和192.168.0.4
dns1 A 192.168.0.5
dns2 A 192.168.0.3
dns2 A 192.168.0.4
# chgrp named /var/named/com.zone
# chmod 640 /var/named/com.zone
# named-checkconf
# service named start
# dig www.dongfei.com @192.168.0.5
www.dongfei.com. 86387 IN CNAME webs.dongfei.com.
webs.dongfei.com. 86387 IN A 192.168.0.1
webs.dongfei.com. 86387 IN A 192.168.0.2
;; AUTHORITY SECTION:
dongfei.com. 86400 IN NS dns2.com.
;; ADDITIONAL SECTION:
dns2.com. 86400 IN A 192.168.0.4
dns2.com. 86400 IN A 192.168.0.3
;; SERVER: 192.168.0.5#53(192.168.0.5)
6)192.168.0.6 :根域配置
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
# vim /etc/named.rfc1912.zones
zone "." {
type master;
file "root.zone";
};
# vim /var/named/root.zone
$TTL 1D
@ IN SOA dns1. admin. ( 1 1D 2H 3D 1H )
NS dns1
com NS dns2
dns1 A 192.168.0.6
dns2 A 192.168.0.5
# chgrp named /var/named/root.zone
# chmod 640 /var/named/root.zone
# service named start
# dig www.dongfei.com @127.0.0.1
;; ANSWER SECTION:
www.dongfei.com. 86177 IN CNAME webs.dongfei.com.
webs.dongfei.com. 86177 IN A 192.168.0.1
webs.dongfei.com. 86177 IN A 192.168.0.2
7)192.168.0.7 :缓存DNS服务器配置
# vim /etc/named.conf
options {
// listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// allow-query { localhost; };
recursion yes;
dnssec-enable no;
dnssec-validation no;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
zone "." IN {
type hint;
file "named.ca";
};
# vim /var/named/named.ca
. 3600000 NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 192.168.0.6 //将根服务器指向我们自己搭建的根DNS服务器
# service named start
8)192.168.0.8 :在客户端测试
# vim /etc/resolv.conf
nameserver 192.168.0.7 //将自己的DNS服务器指向缓存服务器
# dig www.dongfei.com //出现以下信息则说明成功
;; ANSWER SECTION:
www.dongfei.com. 86319 IN CNAME webs.dongfei.com.
webs.dongfei.com. 86319 IN A 192.168.0.1
webs.dongfei.com. 86319 IN A 192.168.0.2
;; SERVER: 192.168.0.7#53(192.168.0.7)
到此为止,我们可以访问以下www.dongfei.com,看看是否可以正常解析
[root@client ~]# curl www.dongfei.com
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com
web1.dongfei.comn<h1>hello web1</h1>
[root@client ~]# curl www.dongfei.com
web2.dongfei.comn<h2>hello web2</h1>
[root@client ~]# curl www.dongfei.com
web1.dongfei.comn<h1>hello web1</h1>
从测试结果看来,不仅可以正常解析,还实现了DNS负载均衡的功能。