频道栏目
首页 > 资讯 > 其他 > 正文

博主干货:DNS原理及实战配置指南

16-10-11        来源:[db:作者]  
收藏   我要投稿

DNS原理及实战配置指南

目录

DNS简介

DNS域名结构介绍

顶级域名

DNS工作原理

工作模式和端口

资源记录

安装bind(详细)

实战:配置一个正反向解析

实战:配置DNS转发

实战:配置DNS主从

实战:子域授权

实战:配置智能DNS

根域架构拓扑图

DNS域名解析服务配置与管理详解

DNS简介

DNS服务可以为用户提供域名和IP地址之间的自动转换,通过DNS用户只需要输入机器的域名即可访问相关的服务,无需使用那些难以记忆的IP地址

DNS域名结构介绍

DNS域名又称DNS命名空间,它是以层次树状结构进行管理的,其顶层是根域,根域在整个DNS命名空间是唯一的,而根域下可以分为多个子域,每个子域又可以有多个子域

 

wKiom1fyOEPDtxs7AAF3u543gys436.png

 

一个完整的域名是由顶级域以及各子域的名称所组成,各部分之间用圆点,“.”来分割,其中最后一个点是顶级域,最后一个“.”左边部分称为二级域名,二级域左边称为三级域名,以此类推

www.sina.com.cn

cn是一级域名,com是二级域名,sina是三级域名

顶级域名

域名代表含义域名代表含义

.com表示商业机构.cn中国

.net表示网络服务机构.hk中国香港

.org表示非营利性组织.tw中国台湾

.gov表示政府机构.us美国

.edu表示教育机构.jp日本

.mil表示军事机构

DNS工作原理

随着计算机网络的快速发展,网络中的计算机数量也是随之快速增长,以前依靠hosts文件来实现主机名和IP地址之间的通信已经无法满足现状,DNS的出现提供了一个完整的解决方案

DNS服务采用C/S方式,域名和IP地址的维护工作全部在DNS服务端进行,用户无需再在本地手动维护hosts文件下面是通过DNS解析域名的工作过程

1、当需要DNS解析的时候,系统会向本地DNS服务器发出DNS解析请求,由本地DNS服务器进行域名和IP地址的解析工作2、本地DNS服务器收到用户请求后,则会在自身的DNS数据库中进行查找匹配域名和IP对应的记录,如果找到则把结果返回给客户端,如果查不到,则把请求转发给根DNS服务器3、根DNS服务器查到域名对应的顶级域,再由顶级域查找二级域,由二级域查找三级域,以此类推,直到找打需要解析的域名和IP地址,并把结果返回给本地DNS服务器4、最终由本地DNS服务器把结果返回给客户端5、如果经过查找依然无法查找到,则有本地DNS服务器返回给客户端解析错误信息

案例:访问www.QQ.com的dns解析过程

 

wKioL1fyOJHwU3MrAACPfbdhIu8744.png

 

1、客户端需要解析www.qq.com,客户端向本地DNS服务器发送解析请求2、本地DNS发现无法解析,转发给根域服务器,3、根域服务器根据请求域名对应的顶级的com,返回com的服务器地址,4、本地DNS服务器向com域dns服务器发出解析请求5、com域服务器返回qq.com域服务器的地址6、以此类推,本地DNS服务器向qq.com域dns服务器发出解析请求,直到在qq.com域dns服务器上面找到www.qq.com所对应的IP地址7、qq.com把查找到的域名对应IP地址信息返回给本地DNS服务器8、最终再由本地DNS服务器把结果返回给客户端计算机

工作模式和端口

端口:TCP/53,UDP/53 //用户客户端查询,递归查询 TCP/953,UDP/953 //DNS主从同步工作模式:C/S模式

资源记录

1、SOA:起始授权记录,Start of Authority Record 每个区的开始处都包含,SOA定义了域的全局参数,进行整个域的管理,一个区有且仅有一个SOA记录2、NS:Name Server 域名服务记录 指定该域名由那个DNS服务器来解析,每个区在区根处至少包含一条NS记录3、A:address记录,吧FQDN映射到IP地址,因为有此记录,所以DNS服务器能够解析FQDN域名对应的IP地址4、PTR:反A记录,指针PRT记录把IP映射到FQDN,用于反向查询,通过IP地址,找到域名5、CNAME:别名记录,记录创建特定FQDN的别名,用户可以使用CNAME记录来隐藏网络用户的实现细节6、MX:邮件交换记录,为DNS指定邮件交换服务器

DNS服务器的安装

Bind是一款开放的源代码DNS服务器软件,是目前使用最广泛的DNS服务器软件

[root@localhost~]#yuminstall-ybindbind-utils

用脚本在每台服务器上面安装Bind软件,并且初始化主配置文件

#!/bin/bash##安装Bind服务if [ ! -e /etc/init.d/named ];then rpm -e --nodeps bind-utils &>/dev/null rpm -e --nodeps bind-libs &>/dev/null rpm -e --nodeps bind &>/dev/null rpm -e --nodeps bind-chroot &>/dev/null yum -y install bind bind-utils &>/dev/null && echo "Bind已安装成功,请稍等,初始化Bind主配置文件。。。"else echo ------------------------------------------------- echo "此台服务器Bind已安装,请退出........."sleep 1fi##初始化Bind配置文件cd /etc/sed -i -e 's/localhost;/any;/g' -e '/port/s/127.0.0.1/any/g' named.confecho -------------------------------------------------sleep 2echo "初始化Bind配置文件已完成........."

关键文件

/etc/named.conf #bind主配置文件/etc/named.rfc1912.zones #定义zone的文件/etc/rc.d/init.d/named #bind脚本文件/etc/rndc.conf #rndc配置文件/usr/sbin/named-checkconf #检测/etc/named.conf文件语法/usr/sbin/named-checkzone #检测zone和对应zone文件的语法/usr/sbin/rndc #远程dns管理工具/usr/sbin/rndc-confgen #生成rndc密钥/var/named/named.ca #根解析库/var/named/named.localhost #本地主机解析库/var/named/slaves #从文件夹

named.conf配置文件

bind的主要配置文件包括named.conf和相应的区域文件,bind中各种配置都是更改这个文件来完成的,修改完成后重启生效

named.conf是bind的主要配置文件,里面存储了大量的bind自身的设置信息,bind启动时候会去检测该文件,读取文件的内容,如果文件不存在,或者里面语法错误,会导致启动失败

named.conf配置文件是有配置语句和注释组成,每条配置语句以分好“;”作为结束符,多条配置语句组成一个语句块;注释使用两个//作为注释符

named.conf配置文件所支持的所有配置语句

acl 定义一个主机匹配列表,用户访问控制权限controls 定义rndc工具与bind服务进程的通信include 把其他文件的内容包含进来key 定义加密秘钥logging 定义系统日志信息lwres 把named配置为轻量级解析器masters 定义主域列表options 设置全局选项server 定义服务器属性trusted-keys定义信任的dnssec秘钥view 定义视图zone 定义区域

实战:配置一个正反向解析

1、核心配置文件的修改

[root@localhost ~]# vim /etc/named.conf

options { listen-on port 53 { any; }; //修改成any 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 { any; }; //修改成any,谁都可以查询 recursion yes;

2、正向解析配置zone文件指定

[root@localhost ~]# vim /etc/named.rfc1912.zones// 添加正向,反向解析zone指定zone "qq.com" IN { //域名 type master; //type类型,master(主) file "qq.com.zone"; //区域文件保存位置.zone文件位置,用实例来说明买个字段的意思 allow-update { none; }; //是否允许动态更新(DNS和DHCP结合是使用)};zone "252.1.10.in-addr.arpa" IN { type master; file "252.1.10.rev"; allow-update { none; };};

3、建立zone文件记录文件

[root@localhost named]# cat qq.com.zone $TTL 600@ IN SOA qq.com. root.qq.com. (//@代表区域名,这里就是代表xuegod.cn,可以改写为xuegod.cn//IN Internet Name//SOA 权威结构,后面的dns.就是其实授权记录,有且仅有一条SOA//主机名,DNS名称//代表DNS管理员的邮箱地址,有什么问题通知谁,@用.代替@有其他含义 20160321; //序列号,手工改,同步用 1H; //1天更新,多长时间请求更新 5M; //一天联系上,过5个小时再试 1W; //1周时间过期,一直联系不上时 10M ) //最短的有效期,10小时,不需要更新 IN NS qq.com. //最好和上面同步,如果要写完整,可以写qq.com.后面的.一定要带上 IN A 127.0.0.1 //主机头,这里填写主机头,注意要对我们上面的NS记录做一条主机记录 IN MX 10 mail1mail1 IN A 10.1.252.96www IN A 10.1.252.96cname IN CNAME www* IN A 10.1.252.96[root@localhost named]# cat 252.1.10.rev $ttl 1D@ IN SOA qq.com. root.qq.com. ( 20160321; 1H; 5M; 1W; 10M ) IN NS qq.com.96 IN PTR www.qq.com. //PTR指针,反向解析记录

4、重启DNS服务

[root@localhost named]# service named restartStopping named: [ OK ]Starting named: [ OK ]

5、在客户端设置DNS服务器后测试

[root@localhost named]# nslookup > www.qq.comServer: 10.1.252.97Address: 10.1.252.97#53Name: www.qq.comAddress: 10.1.252.96> 10.1.252.96Server: 10.1.252.97Address: 10.1.252.97#5396.252.1.10.in-addr.arpa name = www.qq.com.>

实战:配置DNS转发

 

wKioL1fyOYOiei13AABeuQv1WEg635.png

 

(1)当本地DNS服务器(也是转发器)收到查询时,它会尝试使用它主持和缓存的主要和辅助区域解析该查询;(2)如果不能使用本地数据解析查询,此时它作为客户端,会将查询转发给外网DNS服务器;(3)本地DNS(转发器)收到客户端的请求后会等待一段很短的时间,等待来自外网DNS的应答;(4)对于外网DNS来说,它接收到的查询请求是递归查询,此时,它自己需要向外层层迭代找到最终答案返回给转发器(此时转发器作为DNS客户端)(5)转发器将外网DNS返回的查询结果送到客户端(非权威答案),完成解析过程。

注:转发的前提——接收转发请求的服务器(这里是外网DNS)必须能够为请求者(这里是本地DNS,也是转发器)做递归查询;

转发的类型:

(1)无条件转发:转发所有针对非本机负责解析的区域的请求;在主配置文件/etc/named.conf的全局选项中添加如下内容:

options { forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 };

(2)条件转发:仅转发对特定区域的请求(即转发域);在区域置文件/etc/named.rfc1912.zone中定义转发域:

zone "区域名称" IN { type forward; #区域的类型为转发 forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询};

实例:配置转发服务器

我们按照上图当用户访问oa.qq.com,crm.qq.com在本地进行查询,当需要解析www.qq.com就转发的外网

[root@localhost ]# yum install -y bind bind-utils[root@localhost ]# vim /etc/named.confoptions { listen-on port 53 { any; }; #修改 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 { any; }; #修改 recursion yes; idnssec-enable no; //改成no不检查来源头部 dnssec-validation no; dnssec-lookaside auto; forward first; #only,仅仅转发,first,先查找再转发,实验效果,仅仅转发 forwarders { 192.168.211.128; };……

 

wKioL1fyOknynmTkAAHzGKTjf1E535.jpg

 

实战:配置DNS主从

 

wKiom1fyOniTHoqSAACKozdvPDA223.png

 

上面我们已经讲过,一个域内的DNS服务器一般都需要两个,我们这里就进行主从配置和区域传送

从服务器配置文件

[root@localhost ]# vim /etc/named.confoptions { listen-on port 53 { any; }; #修改监控地址 listen-on-v6 port 53 { any; }; #修改监控地址 ● ● ● ● ● ● allow-query { any; }; #允许所有来查询 recursion yes; ● ● ● ● ● ● #dnssec-enable no; //改成no不检查来源头部 #dnssec-validation no; #dnssec-lookaside auto; ● ● ● ● ● ●

时间同步主从都做

[root@localhost ~]# ntpdate 0.rhel.pool.ntp.org[root@localhost ~]# ntpdate 0.rhel.pool.ntp.org

主配置

root@localhost ~]# vim /etc/named.rfc1912.zones//主配置文件区域参数zone "taobao.com" IN { type master; file "taobao.com.zone"; allow-update { none; }; notify yes; also-notify{ 192.168.211.136; };};

从配置

[root@localhost ~]# vim /etc/named.rfc1912.zones//从配置文件区域参数zone "taobao.com" IN { type slave; file "slaves/taobao.com.zone"; masters { 192.168.211.128; };};

 

wKioL1fyOsCRiu5wAABbdi3fH4s876.png

 

重启服务,查看目录下的文件

[root@localhost named]# ll /var/named/slaves/total 4-rw-r--r-- 1 named named 377 Oct 2 11:42 taobao.com.zone

实战:子域授权

二级域是我们的三级域就可以随意定义,联系公司各个部门,都应该有自己的服务器,因为公司上万人让一台DNS服务器去解析压力会很大,分成部门每个部门一台子域DNS解析服务器,就轻松很多,过程就是在父DNS服务器中定义区域解析条目

例:.<–根域.com <–顶级域(一级域)taobao.com <–二级域<–子域ops.taobao.com <–主机名<–子域<–子域

正向解析区域授权子域的方法

父域配置

在父主机上面的区域配置文件里面添加NS记录

[root@localhost ~]# vim /var/named/taobao.com.zone$TTL 1D@ IN SOA ns1.taobao.com. ops.taobao.com. ( 20161015; 1H; 5M; 3D; 12H; ) IN NS ns1Ns1 IN A 127.0.0.1oa IN A 192.168.211.136//添如下内容 IN NS ops //添加一条NS记录将ops.taobao.com. 域授权ops管理ops IN A 192.168.211.136 //对应上条的NS记录A记录

子域配置(授权域)

在从服务器添加ops的子域区域

[root@localhost named]# vim /etc/named.rfc1912.zones//添加ops.taobao.com区域zone "ops.taobao.com" IN { type master; file "ops.taobao.com.zone";};

添加区域的zone

[root@localhost named]# cat /var/named/ops.taobao.com.zone $TTL 1D@ IN SOA ns1.ops.taobao.com. ops.taobao.com. ( 2016102; 1H; 5M; 3D; 12H; ) IN NS ns1.ops.taobao.com.Ns1 IN A 127.0.0.1mail IN A 192.168.244.55zabbix IN A 192.168.244.66it IN A 192.168.244.66

测试

[root@localhost named]# host -t A zabbix.ops.taobao.com 192.168.211.128Using domain server:Name: 192.168.211.128Address: 192.168.211.128#53Aliases: zabbix.ops.taobao.com has address 192.168.244.66[root@localhost named]# host -t A it.ops.taobao.com 192.168.211.128Using domain server:Name: 192.168.211.128Address: 192.168.211.128#53Aliases: it.ops.taobao.com has address 192.168.244.66[root@localhost named]# host -t A oa.taobao.com 192.168.211.128Using domain server:Name: 192.168.211.128Address: 192.168.211.128#53Aliases: oa.taobao.com has address 192.168.211.136

实战:配置智能DNS

bind的视图功能,又称脑裂(split-brain):根据客户端来源的不同,将同一个名称解析至不同的值。例如,一个企业有两台web主机,对应于一个FQDN,一台位于电信机房,一台位于联通机房,为了用户访问的便利,我们欲将电信用户的域名查询请求解析为电信那台主机的ip地址,将联通用户的请求解析为另一台主机的地址,bind的视图功能就可实现这种需求。

1、一旦启动了view, 所有的zone都只能在view中定义2、仅有必要在匹配到允许递归请求的客户所在view定义根区域3、客户端请求到达, 是自上而下检查每个view所服务器的客户端列表

核心配置文件

[root@localhost named]# cat /etc/named.conf acl local { 127/8; }; #最前面添加acl network { 192.168.211/24; };#zone "." IN { #这一段要注销,写到我们的include的zone文件中# type hint;# file "named.ca";#};view local { #对于上面定义的acl进行区定义,名字可以不一样 match-clients { local; }; #正式定义,名字要和acl中的相同 recursion yes; include "/etc/named.local"; #这里定义我们的配置文件的另外块儿};view network { match-clients { network; }; recursion yes; include "/etc/named.network";};// include "/etc/named.rfc1912.zones"; #上面按已经包含了,那么我们就把这行include去掉// include "/etc/named.root.key"; #检测头部的注释

include文件创建

[root@localhost etc]# ll named.local named.network -rw-r--r-- 1 root root 162 Oct 2 12:20 named.local-rw-r--r-- 1 root root 164 Oct 2 12:20 named.network

配置本地网络的include

[root@localhost etc]# cat named.local zone "." IN { type hint; file "named.ca";};zone "qq.com" IN { type master; file "qq.com.local"; allow-update { none; };};

配置外网网络的include

[root@localhost etc]# cat named.network zone "." IN { type hint; file "named.ca";};zone "qq.com" IN { type master; file "qq.com.network"; allow-update { none; };};

Zone记录文件创建

[root@localhost etc]# cd /var/named/[root@localhost named]# cat qq.com.local //内网的$TTL 1D@ IN SOA ns1.qq.com. admin.qq.com. ( 2016102; 1H; 5M; 3D; 12H; ) IN NS ns1ns1 IN A 127.0.0.1www IN A 192.168.211.111

[root@localhost named]# cat qq.com.network //外网的$TTL 1D@ IN SOA ns1.qq.com. admin.qq.com. ( 2016102; 1H; 5M; 3D; 12H; ) IN NS ns1ns1 IN A 127.0.0.1www IN A 192.168.211.222

重启bind服务

[root@localhost named]# service named restartStopping named: [ OK ]Starting named: [ OK ]

测试

[root@localhost named]# host www.qq.com 127.0.0.1Using domain server:Name: 127.0.0.1Address: 127.0.0.1#53Aliases: www.qq.com has address 192.168.211.111[root@localhost named]# host www.qq.com 192.168.211.136Using domain server:Name: 192.168.211.136Address: 192.168.211.136#53Aliases: www.qq.com has address 192.168.211.222

大型根域架构

可结合上面单独构建DNS根域架构,下面是我画的一个根域架构图,大家可参考,以后有时间我会写一篇这个拓扑的博客。

上面的实验是在两台机器完成的,大家尽量从头看,因为我都是从上面往下慢慢写的,所有某些实战案例的环境也是延续上面的实验后的环境。

 

wKioL1fyPDrgnTzLAAJ4wAsnoYI617.jpg
相关TAG标签
上一篇:jQuery.cropper中文API详解
下一篇:java--会话管理(CookieSession)_2
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站