DNS 基本工作原理,及正反向解析和主从同步
本帖最后由 yun 于 2019-9-20 18:54 编辑DNS 基本工作原理,及正反向解析和主从同步:今天给大家介绍一下DNS的基本工作原理以及正反向解析和主从同步的应用;DNS是域名系统(Domain Name System),它是由解析器和域名服务器组成的. 域名服务器是指保存有该网络中所以主机的域名和对应的IP地址,并具有将域名转换为IP地址功能的服务器.域名必须有IP地址,而IP地址不一定有域名。域名系统太用类似目录树的等级结构, 最上层是根域,一般以 . 开头,根域下面是顶级域,顶级域包含com(商业机构)、edu(教育机构)、gov(政府机构)、net(网络机构)以及国家代码如:.cn .hk 和 .uk ; . cn 是中国专用的顶级域名。顶级域下面是次级域如: ibm.com、microsoft.com 和google.com 以此类推. 当你在网页上输入网址打开网页的时候,其实是通过域名解析服务找到了对应的IP地址,这样才能上网的。DNS 的是工作在 tcp/53 和 udp/53 号端口的应用层协议;DNS的查询类型:递归查询:发送一次请求,就能得到答案。迭代查询:需要发送多次查询请求才能得到答案.DNS 服务的类型:主DNS服务器、辅助DNS服务器、缓存DNS服务器以及转发器。主DNS服务器:维护所负责解析的域内解析库服务器,解析库由管理员维护。从DNS服务器:从主DNS服务器或其它从DNS服务器那里“复制”(区域传递)一 份解析库.区域传送又有完全传送(及传送整个解析库)和增量传送(传递解析库变化的那部分内容). 一、下面介绍一下在Linux 下DNS实现的方法:BIND( Bekerley Internat Name Domain)是Linux下一种开源的DNS 协议的实现,它是互联网上最广泛使用的一种DNS服务器。
BIND的安装配置:DNS服务: 程序包名bind ,程序名 named。
最主要有这样几个包: bind.x86_64:主程序包 bind-libs: 库文件 bind-utils: 工具包
bind-chroot:安全套件,测试环境中最好不要安装;
服务脚本:/etc/rc.d/init.d/named主配置文件:/etc/named.conf , /etc/named.rfc1912.zone , /etc/rndc.key解析库文件:/var/named/zone_name.zone 负责保存本地的区域数据;注:(1) 一台物理服务器可同时为多个区域提供解析;(2) 必须要有根区域文件(3) 应该有两个(或更多)实现localhost和本地回环地址的解析库;下面开始搭建一个DNS服务器:
1)安装 bind 软件包:
https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbFqhGni8AAAeL49Bo34161.jpg2) 进入/var/named/目录下 查看named.ca文件 里面保存着全球13个根服务器的信息;https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVauDxtyXMAAA7R5hfsnQ980.jpg
3) 把/etc/named.conf 主配置文件备份一下,以防止意外情况发生;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVbFrgtSZ3AABNoRr_U94291.jpg
https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbF2wluwrAALWMAEciXI130.jpg最好先把本地主机的IP加入到监听的端口中;注意方便实验解析到该地址;https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVauPyPe9fAAAkaLwwLBg482.jpg
4) 配置主DNS服务器:进入/etc/named.rfc1912.zones 文件中,在最下面添加一行信息:https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbF3S4Sg2AAAuNIpKFzg201.jpg
zone : 定义区域名;type: 指定区域的类型;类型有:master、slave、hint、forward.File: 定义区域解析库文件; 5) 添加 区域解析库文件;
https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVauSz2mOvAABkzs1fJPc711.jpg
这是在blue.com.zone 编辑的内容:https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVbF7iG-MQAAD7nDWUGVk045.jpg
区域库文件的简要说明:TTL:缓存资源记录(RR)的秒数;可从全局继承$ORIGIN :可用于引用当前区域的名字;如:INNSns1.blue.com.等同于: INNSns1@ 符号: 等于@ORIGIN区域库文件:由众多的RR组成资源记录:Resource Record , RRFQDN: full Qualified Domain Name 完全合格域名 如www.google.com记录类型:SOA:Start of authority ,起始授权记录;一个区域解析库有且仅能有一个SOA记录,还必须出现为解析库的第一条记录;name: 当前区域的名字,例如“blue.com.”;value: 有多部分组成(a) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;(b) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换;例如linux.blue.com;(c) (主从服务协调属性的定义以及否定的答案的统一的TTL)2015042201;序列号2H;刷新时间5M;重试时间7D;过期时间1D;否定答案的TTL值H:小时 M:分钟 W:周 D:天NS:Name Server,专用于标明当前区域的DNS服务器name:当前区域的名字value:当前区域的某dns服务器的名字,例如 ns.blue.com. ;如:blue.com.INNSns1.blue.com.blue.com.INNSns2.blue.com.后面的点(.)一定要加上;a) 相邻的两个资源记录的name相同时,后续的可省略;b) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;MX:Mail eXchange , 邮件交换器name:当前区域的名字value:当前区域的某邮件服务器的主机名a) 一个区域内,MX记录可以有多个;但每个记录的value之前应该有一个数字,数字(0-99)是优先级;值越低优先级越高;b) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该有后续的A记录;如:blue.com.INMX 10mx1.magedu.com.INMX 20mx2.magedu.com.A:Internet Address,作用,FQDN 解析为IP地址name:某主机的FQDN,例 www.blue.com.Value:主机名对应主机的IP地址;如:www.blue.com.INA1.1.1.1www.blue.com.INA1.1.1.2mx1.blue.com.INA1.1.1.3mx2.blue.com.INA1.1.1.4注:*INA172.16.249.226 是通过泛域名解析至某特定地址的;blue.com INA172.16.249.226不加www 也是一样可访问到特定站点;
AAAA:FQDN –-> IPv6PTR: pointer 指针, IP-à FQDN 从IP找到主机名name:IP 有特定格式把IP地址反过来写;226.249.16.172 ; 而有特定的后缀in-addr-arpa. 完整写法是:226.249.16.172.in-addr.arpa.如:226.249.16.172.in-addr.arpa.INPTRwww.blue.com.简写:226INPTRwww.blue.com.注:网址及后缀可省略;主机地址必须要反着写;CNAME: Canonical Name,别名记录Name:别名的FQDNValue:正式名字的FQDN;如:web.blue.com.INCNAMEwww.blue.com.
资源记录定义的格式:语法: name IN rr_type value 缓存时长 关键字资源记录类型最重要的值 6) 自检配置文件是否有问题:https://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVauTD7k6oAAB7IyNPo0U766.jpg
7) 修改/var/named/blue.com.zone 的权限和属组;https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbF-wKFVXAABv5D1ze-0094.jpg
8) 启动服务即可;https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVauXzFUJsAABBdVBM7vM984.jpg
9) 使用dig –t A www.blue.com @172.16.249.226 就可以查看解析到的A记录了;这样一个正向解析的DNS服务就搭建好了;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbF_SvA4gAAGULQ3grhA494.jpg
下面来增加一个反向解析域:1) 在主DNS名称服务器中:/etc/named.rfc1912.zones 文件中添加一个主的反向区域:https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVauXTfY_gAAAyoOBN5xY818.jpghttps://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVbGDis0nOAAByiyNd2Cg440.jpg
2) 在/var/named/ 目录下定义一个反向区域解析文件:(反向解析库中不需要MX和A、AAAA记录;主要以PTR为主);最好与正向解析域一一对应.https://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVauaB1oW-AABDMKgY74A885.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbGGTfEmeAADBABbI5W0898.jpg
注: 这里的主机名( ns1.blue.com ) 一定要写上全名;如果不写上就会自动补上$ORIGIN的内容,变成 ns1.249.16.172.in-addr.arpa. 所以一定要写全了.
3) 配置属组,以及权限;https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVauehdq4eAABWKM94YUw042.jpg
4) 重新启动服务:service named restart 并用# dig -x 172.16.249.226 @172.16.249.226 查看反向解析域名;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbGGwCC10AAHvuYAhthM715.jpg
使用:host -p ptr 172.16.249.226 172.16.249.226 解析172.16.249.226 的PTR。https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVaufhdrIXAADUhQGGA0c699.jpg
检查配置 : https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbGKAi7oeAAGLXWG_AH8183.jpg
查看:全量区域传送,会得到对方所有的资源记录信息:(这个命令很危险,不要让任何人能够查看这些信息)。正向信息:
https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVbGOjWLAmAALiTqTYypM040.jpg
反向信息:https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbGPDFJ9KAAKvDfiQ-J0148.jpg
这样一个反向解析域名就完成了。
二、搭建一个主从的DNS服务器:ns2 服务器 IP是:172.16.249.227 与主服务器一样,先按照bind这个软件包:
https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVaunCH2FlAAAeWcakdu4758.jpg
然后配置成缓存服务器:1)修改 # vim /etc/named.rfc1912.zones ; 配置从服务器;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbGTC_buUAAA8CesJGd0084.jpghttps://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbGTBtz8TAABM7PBpWHc967.jpg
2) 重新启动 172.16.249.12 的dns 服务:https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVauqgdnc4AABVwOAI85U260.jpg
3) 查看日志文件: # tail /var/log/messages 主服务器上的数据将会传递到从服务器;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVbGWgFI8MAAKnkpR0FCo913.jpg
在主服务器中添加一条信息:然后把序列号加以,这条刚刚更新的信息就会传递给其他所有服务器了; 不用重启服务,只需要用 # rndc reload 重新载入区域解析文件就可以了;编辑主服务器上的: # cd /var/named/# vim blue.com.zone # rndc reloadhttps://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVauyiolEDAAD485lfdCg843.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVbGfjSjgoAAOyWhT6VNM397.jpg
当所有配置都配置好,完成更新通知后,从服务器上会多出一个文件; 但是,任何时候都不要去编辑从服务器上的文件;要编辑也只能编辑主配置文件.切记。。。
https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVau6h-llkAACsWubg6tc663.jpghttps://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVbGmQRQU5AAFE5QQG0F8762.jpg
主服务器必须有一条记录指向从服务器的地址;如:ns2INA172.16.249.227 只有指向了从服务器的地址,从服务器才会收到更新通知信息;主服务器只要发生更改会通知所有DNS服务器。这样一个正向区域的从服务器已经配置好了, 当同步的时间,最好保持主服务器和从服务器上的时间点一致;这样才不会出现问题;反向区域的从服务:(与正向区域的从服务相同;)
1) 主服务器反向区域必须有一条记录指向从服务器的地址(要不然无法同步信息):
https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVau_R6yPZAACWcs_ZCdM810.jpg
注释:这是第二次试验的反向解析主服务器上的文件; /var/named/172.16.8.zone 文件
https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVcACBzVFtAAC_uGWs7vA126.jpg
2)修改 # vim /etc/named.rfd1912.zones 文件,增加一条反向区域从服务器的信息(在172.16.249.227中增加);https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVbtCAtLsDAAAswC8kIDE307.jpghttps://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVcEvjwl4rAADd-0dW4wA067.jpg
注释:这是第二次试验的/etc/named.rfc1912.zones 文件https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVbtLhbtJzAAConBoOXRc456.jpg
3)验证是否有语法错误:named-checkconf 然后重新载入区域文件;最后查看日志,发现已经同步了反向区域的信息了;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVcE3Q0QuRAAB9OR99Jcc334.jpg
4)进入/var/named/slaves 目录下会增加 反向区域文件. 在日志中也显示,反向区域文件以及传送过来;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVcE_BH-NsAARWhH_6QEU755.jpg
这样一个反向区域的从服务器也搭建好了,是不是也很简单!在反向区域文件中,最好也要指明从服务的地址,要不然会联系不到从服务器;
三、下面来说说子域授权: 实现分布式的主要前提; 子域与父域可以不在同一个网络内,只需要能够相互联系到对方就可以;但是子域必须被主域授权才可以.1) 先把主服务器搭建起来,配置成缓存服务器;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVciWTbVPRAAAeaV4J1OI608.jpghttps://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVcK3BjiUxAAE6td-5Mok818.jpg
启动bind服务:https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVcijR5PsLAADI2PeoTrM218.jpghttps://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVcK7jNI6lAAAqRRYawNA710.jpg
进入到 /etc/named.rfc1912.zones 增加主区域文件;查看是否创建成功;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVcinT2QjnAAE9TPlASYg671.jpg
定义区域解析库文件:https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVcK_RyFSGAABDuE5LBcE802.jpghttps://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVcirScFrOAACQEOeyZrg650.jpghttps://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVcLDiz_VoAACIfv2xlAg086.jpg
配置权限:https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVciuw9JqyAABr9D8Azj4537.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVcizDHs_FAAMJ-cTsgEk343.jpghttps://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVcLTwzrQ3AAHwubA6zn0342.jpg
此时父域服务器已经搭建完毕了;1) 此时该添加子域了, 在 /var/named/blue.com.zone 区域中添加这些内容:https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVcjCgtKHrAADwyaZOlCM237.jpg
1) 再来配置子域,与配置父域的过程一致; 最后在/etc/named.rfc1912.zones 下面添加子域;https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVcLejDBkKAAA-R62_TxY320.jpghttps://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVcjWzu3pZAAHtnpd34VE730.jpg
添加子域的区域解析文件: /var/named/ops.blue.com.zone ;https://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVcLyjUofwAACX7k_xc4w645.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVcjnSRJYCAAM8lTqqTZ0650.jpghttps://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVcMCif6NIAAJNtnplHAw593.jpg
通过父域服务器是可以解析到子域服务器:https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVcjziS9eAAAJMMVXIYp4330.jpg
子域通过自己是不能解析到父域的:(这能解析是因为从互联网解析到的地址;不是我们内部的私有地址解析到的;请注意)https://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVcMjh3CF-AAHiU4AFMyw481.jpg
如果想让子域解析到父域的服务器地址:那就得打开区域转发的功能: 在/etc/named.rfc1912.zones 添加转发功能:https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVckSxYQzVAAAm7iYNb0I543.jpghttps://s3.51cto.com/wyfs02/M01/6C/E7/wKiom1VVcMrCB0WjAABxIStRvFo902.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVckiyxAtWAAHvXP5ym5k477.jpg
父域打开全局转发的方法:进入父域的 /etc/named.conf 中添加:就可以了;https://s3.51cto.com/wyfs02/M02/6C/E7/wKiom1VVcM_BIUIWAAFVveJiVyQ198.jpg
此时子域就可以访问外网了:https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVckzR91I1AAKM7k3b6sI568.jpghttps://s3.51cto.com/wyfs02/M00/6C/E7/wKiom1VVcNOAbNIjAAGQM-bY8jw469.jpg
区域转发的优先级是 高于 全局转发的优先级的;四、最后来一个bind view 的功能;视图:1) 一个bind服务器可定义多个view,每个view中可定义一个或多个zone;2) 每个view用来匹配一组客户端;3) 每个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;
定义方法:view VIEW_NAME {match-clients { };};
注意:1) 一旦启用了view,所有的zone都只能定义在view中;2) 仅有必要在匹配到允许递归请求的客户端所在view中定义根区域;3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表; 示例: 需要两个网络在不同一个网段;但是外网是可以ping通服务器地址; 环境如下: 外网地址:https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVclCRNDZGAAITxZWMTYc013.jpghttps://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVclHCQm7wAAFEEVTmqNo724.jpg
服务器地址:https://s3.51cto.com/wyfs02/M02/6C/E8/wKiom1VVcNeiF4fcAAJfKPi5XKE901.jpg
把 /etc/named.conf 的区域 ,移到 /etc/named.rfc1912.zones 中去;/etc/named.conf 中的区域 : https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVclLBhgy9AABNrMD521M690.jpg
已经移动到了 /etc/named.rfc1912.zones 文件中了;
https://s3.51cto.com/wyfs02/M00/6C/E8/wKiom1VVcNmzcFwYAAIiX4VoiQ0502.jpg
在 /etc/named.conf 中定义一个ACL 访问控制列表; 定义成本地网络客户端;https://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVclSgCN13AAGFlLxlkg4333.jpg
然后在 /etc/named.rfc1912.zones 中定义 view .https://s3.51cto.com/wyfs02/M01/6C/E8/wKiom1VVcNrima_TAACNFMarMMA196.jpg
上面是没有反花括号的,我们是要把中间所有的区域都定义到此处; 所有到结尾处定义反括号,就是把所有区域都包含进来;
https://s3.51cto.com/wyfs02/M01/6C/E8/wKiom1VVcuyDv-niAAAd_yfcxkA377.jpg
验证一下,看下是否有语法错误:https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVdGjwEv7SAABl8dYOI88610.jpg
从本机解析,自己的DNS. 是可以解析出来的.https://s3.51cto.com/wyfs02/M02/6C/E8/wKiom1VVcvDzfJc3AAJ6REUdJX4050.jpg
定义外部客户端请求解析的; 区域文件; blue.com.external ;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVdHDgle5fAAD0shaZF-0242.jpg
增加 /var/named/blue.com.external 文件:https://s3.51cto.com/wyfs02/M00/6C/E8/wKiom1VVcviz3aGgAAB1hReiQmI572.jpghttps://s3.51cto.com/wyfs02/M01/6C/E2/wKioL1VVdHfTSoZkAAD0shaZF-0919.jpg
重新启动named 服务:
https://s3.51cto.com/wyfs02/M01/6C/E8/wKiom1VVcv-i06b2AADyoTzaUto268.jpg
172.16.8.100 这个服务器 自己解析自己:https://s3.51cto.com/wyfs02/M02/6C/E2/wKioL1VVdHyxHsw9AAFyP2yH2Nc364.jpghttps://s3.51cto.com/wyfs02/M02/6C/E8/wKiom1VVcwTy-VweAAJtUXtv6ls177.jpg
这里看到的你会觉得我是同一个网段,因为配置其他网段无法ping 同这个服务器,所以改成了172.16.8.101 但是我把 ACL 访问控制列表改了;https://s3.51cto.com/wyfs02/M00/6C/E2/wKioL1VVdIDDvY-9AAEy26JEUSI660.jpg
之后我用172.16.8.101 去解析 www.blue.com :结果如下: 结果解析的是1.1.1.1 这个就是我想要的答案;https://s3.51cto.com/wyfs02/M00/6C/E8/wKiom1VVcwqBIN32AAJryP8w4NM206.jpg
所以这就是两个VIEW 他们分别匹配不同的客户端,而且分别为每个ZONE提供两个不同的解析库文件;而且同一个解析库解析到的IP地址不一样;所以来自不同的客户端请求时,他们匹配到不同的VIEW时,这VIEW内的ZONE 将提供解析,这些ZONE提供了不同的解析库文件;而不同的解析库文件同一个域名,提供了不同的解析地址,所以解析的结果就不一样了。这就是DNS的VIEW的实现方法。
转载自:https://blog.51cto.com/sailove/1651563
页:
[1]