DNS服务
DNS:Domain Name Service 是应用层协议
基于C/S(客户端/服务端来实现),共有2个端口分别是 53/udp以及 53/tcp
BIND:Bekerley Internat Name Domain(目前互联网市场上最火爆的DNS软件)
ISC (www.isc.org)
平时上网在浏览器里输入 www.magedu.com ,这中格式叫做FQDN,加上协议一同构成域名,而DNS的主要作用是将域名解析为IP地址。这样才能访问这个网站的服务器.
DNS名称解析配置文件linux的位于/etc/hosts, WINDOW的位于/system32/drivers/etc/hosts
其格式为:
122.10.117.2 www.magedu.com
93.46.8.89 www.google.com
配置好后,在浏览器输入配置好的域名之后,直接将地址转化为指定IP,不再经过DNS。这种情况可以避免DNS服务器出问题后,导致网址无法访问(比如有时候QQ能上,但是网页打不开,原因就在于此,因为QQ是直接访问IP,不经过DNS)
如果想平时使用DNS,当DNS出错时候再读取host当中配置的IP。可以编辑/etc/nsswitch.conf中的内容,当其中的files 和 dns位置掉过来即可.
本地配置的/etc/hosts文件,多用于企业内部集群当中.
每台机器上都配置/etc/hosts文件,叫做分散式解析域名(每一台主机上都有IP与域名的对应表),30—50台计算机规模
所有主机的IP及域名,放在一台主机上,叫做NS(集中式解析域名)(其他主机解析域名时,都通过这台主机上的hosts表来进行) 300-500台计算机规模
分散式和集中式都无法解决全球互联网的域名解析问题,所以出现了DNS域名,综合了集中式和分散式的特点.
DNS域名的结构:分为
根域
一级域名: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)系统的管理、以及根服务器系统的管理
FQDN命名规则,分为2部分,www.magedu.com 中,www是第一部分,其后是第二部分.第一部分叫做主机名或别名. magedu.com是第二部分,叫做域名. 其实第二 部分尾部是有个.的。这个.就相当于根域,而com则是根域下面的子域,同理,magedu.com中的magedu也是com中的子域,具体结构如下图:
网上邻居的名字解析方式,是基于广播来实现的。所以只能在局域网(企业内部网)来使用。
完整的根域及子域效果图
####################################################################
简述将域名www.yangyang.com.cn转换为IP的过程
将输入的域名从右向左解析,首先由本地的DNS访问根域,然后依次匹配匹配对应的国家域cn,组织域com,从子域中不停向下层层展开,直至出现匹配的IP地址。此外,本地DNS还会将访问过的地址缓存起来,提高本地其他用户的访问速度.PS:域名转换为IP是DNS来负责,IP最终转换为网卡的MAC地址则是ARP协议来负责。
####################################################################
在每个域中,都有自己单独的DNS服务器,但是根域的服务器只有13个,因为网络的数据报文格式.限定了只能绑定13个.
DNS查询类型:
递归查询(第一台DNS服务器去根域哪一层一层查找,直至找到或报错)
迭代查询(第一台DNS服务器去根域哪查找,虽然没直接给出ip,但推荐了可能有ip的的位置,也就是子域的DNS地址)
名称服务器:域内负责解析本域内的名称的主机
解析类型:
FQDN --> IP 正向解析(名字到IP)
IP --> FQDN 反向解析(IP到名字,比如邮件服务,需要反向解析+正向分析一块,来判断服务器是否是合法的邮件服务器)
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树
DNS解析之 一次完整的查询请求经过的流程:
# Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS--> 二级域名DNS…
# 客户机—--先去找hosts文件中有无匹配的-----再去看DNS的缓存中有无匹配(只有windows的客户机有缓存,linux中没有缓存,使用linux去测试DNS的ping服务,ping通的地址会不断变化)—然后去服务器(递归)-----服务器缓存---服务器(迭代)----根DNS---顶级域名(.com结尾之类的)----二级域名DNS
解析答案:DNS没有一个检查结果的行为,所以返回的答案可能存在如下情况:
肯定答案:windows会保存肯定答案,linux不会保存
否定答案:请求的条目不存在等原因导致无法返回结果 或者是禁止上网的时候,故意返回一个错误答案,比如国内上不了facebook,google等网站.
权威答案:给出的地址是本身就拥有的。
非权威答案:当给出的IP地址不同是本身拥有,是问别的DNS服务器才得到的,会提示非权威答案。
要想实现DNS企业内部服务,需要安装DNS的服务端bind
BIND的安装配置:
程序名:named,unbound
程序包:yum list all bind*
服务器 bind 如果要将主机设置为转发器,必须安装服务器
相关库 bind-libs
数据库 /var/named 记录IP与域名对应的 数据解析库
客户端 bind-utils 一般网络服务都自带,不用特意安装
bind-chroot: /var/named/chroot/
安装后,检查下selinux是否关闭 /etc/selinux/config 将SELINUX后的值改为disabled即可.然后查看下防火墙里面有无策略 # iptables –vnL(有的话会显示很多信息,没有则很少)如果防火墙提示iptables v1.4.21: unknown option "-vnl" 可能是centos7默认了使用firewalld防火墙的缘故,按下面步骤来解决:
1、停止并屏蔽firewalld服务
停止 systemctl stop firewalld
屏蔽 systemctl mask firewalld
2 安装iptables-service软件包
# yum install iptables-services
3、在引导时启用iptables服务
# systemctl enable iptables
4、启动iptables服务
# systemctl start iptables
5、保存防火墙规则
# service iptables save
DNS服务器的端口号有两个:分别是 53/udp以及 53/tcp,安装完bind后启动下改服务即可查看:
很明显,作为一个对外提供服务的DNS服务器,其端口不能绑定在回环地址上,所以,编辑 vim /etc/named.conf文件
如上图所示,这样将配置文件修改完毕.其他配置信息如下图:
DNS选项,除了解析数据库外,其余无关紧要DNS服务配置三大项之一
日志文件,DNS服务配置三大项之二
区域文件, DNS服务配置三大项之三.区域文件可以存在多个,每个文件用来对应不同的区域.比如 file1 对应着 magedu.com的域,而file2 对应着 wang.com的域.这样DNS服务器在对外提供服务时,凡是遇到访问magedu.com的需求一律从file1当中寻找,凡是遇到访问wang.com的需求一律从file2当中寻找.
配置好后,使配置文件生效
# rndc reload 或者 systemctl reload named
这样设置好后的DNS服务器,属于缓存DNS服务器(转发器),其结构图如下:
由此图可以看出,转发器只是帮主机,去跟域上查询索要访问的域名,在安装bind软件的时候,根域的IP地址就写入到了文件中(/var/named/named.ca)
DNS服务器的类型:
1 主DNS服务器:管理和维护所负责解析的域内解析库的服务器
2 从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
3 缓存DNS服务器(转发器)
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔: 从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
“通知”机制:主服务器解析库发生变化时,会主动通知从服务器
####################################################################
搭建DNS转发器:
1 选择一台主机当DNS转发器,安装bind
2 将其配置文件/etc/named.conf,修改其中的两项为:
3 将客户机的DNS服务器,指向做转发器的主机IP地址。
4 编辑/etc/resolv.conf文件,只保留转发器器的的主机IP地址,其余删除
5 完成(想上外网的话,只要客户机上有能连通外网的网卡,那么就可以通过这个DNS转发器来实现)
####################################################################
使用dig命令可以检测,为访问的域名提供解析服务的,是那个DNS服务器.
若想指定用哪个DNS服务器来测试 ,可以用@+要测试的DNS服务器地址
# dig www.baidu.com @192.168.227.7
nslookup ,host,dig 指定用那个DNS服务器来解析指定的域名.如下图:
Windows也支持这个命令.而host和dig只能在linux上使用.
# host + 域名+指定DNS的IP地址
# host www.baidu.com 192.168.227.7(使用227.7来解析百度的IP地址)
# dig+域名+@指定DNS的IP地址.
# dig www.baidu.com @192.168.227.7(使用227.7来解析百度的IP地址)
####################################################################
查看权威答案的IP地址(即是那一台DNS服务器来解析要访问的域名)
使用dig -t 可以查看指定的域名,是由那台DNS服务器来维护的.
ANSWER SECTION那一项就是说明是由哪些DNS服务器维护的
可以看出是dns9和dns10来进行维护,那么用dig查看下IP地址
# dig dns10.hichina.com 得到很多IP地址
用得到的IP地址去解析magedu.com,就会提示是权威答案了
# dig magedu.com @106.11.141.126
因为这个IP它本身就负责这magedu.com域名的解析服务.
####################################################################
####################################################################
实现配置正向解析的主DNS服务器(名字—IP为正向)
分析: 要想实现解析不同的域,需要配置数据库文件.比如 文件1专门解析.com结尾的,文件2解析.gov结尾的...,配置文件默认在 /etc/named.conf中
1 ×××配置文件,准备补充域的信息
2 打开/etc/named.rfc1912.zones文件,在当中添加如下内容:
至此,区域信息建立起来了.接下来建立区域信息表
3 建立IP与域名的对应文件(存放在/var/named)
将/var/named/named.localhost复制一份当做模板文件来修改。PS:
直接# cp /var/named/named.localhost /var/named/magedu.com.cone
# 这样是错误的,因为named文件夹下的所属人不是root用户,而是named.
# cp –a /var/named/named.localhost /var/named/magedu.com.cone
复制过来的名字,必须与区域信息中设定的名字一致
4打开资源解析库 /var/named/magedu.com.cone文件的内容,如下图:
将其修改为下图:
修改完毕后,使用如下命令来检查配置文件,和zone文件有无错误
检查配置文件的命令 : # named-checkconf 如果有错误会给出提示:
检查zone资源解析库的命令 named-checkconf +要检查的域名 +库文件的路径
# named-checkzone magedu.com /var/named/magedu.com.cone
# magedu.com是要检查的域名,magedu.com.cone是刚配置的解析库的名字。
必须写上绝对路径,否则报错。
注意再查看下客户端的DNS配置
# cat /etc/ resolv.conf ,确保里面只有DNS服务器的IP
5 配置成功了,重启服务 # systemctl restart named后,
来做下实验 .执行 # dig www.magedu.com
按照资源解析库的配置,应该出来1.1.1.1或1.1.1.2两个地址的一个
####################################################################
配置区域解析库
区域解析库由众多RR(即资源记录)组成:
记录类型分为:A, AAAA, PTR, SOA, NS, CNAME, MX
最重要的三条记录类型: A SOA NS 这三个必须存在
SOA: 起始授权记录;一个区域解析库有且仅能有一个SOA记录, 必须位于解析库的第一条记录
A: IP4地址,用于FQDN --> IP4
AAAA: IP6地址, FQDN --> IPv6
PTR: 反向解析 ,IP --> FQDN
NS: 专用于标明当前区域的DNS服务器
CNAME: 别名记录
MX: 邮件交换器
资源记录定义的格式:(每一种类型的格式都是这5条)
语法:name [TTL] IN rr_type value
1 Name 资源解析库的名字,与区域信息中,设定的名字必须一致。
2 TTL可从全局继承,这一项是设置它的缓存时间,默认以秒为范围,假设设置为一天的话,那么就是86400(这个是默认值)可以省略不写.
3 IN internet记录,多个IN记录重复的时候,从第二个开始IN可以不写.
4 rr_type 资源类型的分类,包括了A, AAAA, PTR, SOA, NS, CNAME, MX
这几种.
5 value (各种各样的)值,根据类型的不同,值的数量也不同。
举例:资源类型A/AAAA的格式:
域名 ttl IN RR(A/AAAA) IP4(6)地址(地址就相当于A/AAAA值)
1 域名:不用全写,比如www.baidu.com 只写baidu即可,www是主机或别名,不是域名,而.com因为这个资源解析库就是为.com来准备的,所以会自动补上.com.(PS,如果一定要写.com的话,那么应写为baidu .com. 没有最后面的.的话,会认为后面还有,系统会继续追加 结果变为了 baidu.com.com.)
2 TTL不写即为默认值,也就是86400秒(一天)
3 IN 为网络信息,多个IN时候,从第二个开始,就可以忽略不写
4 RR(A/AAAA) 设置类型为A/AAAA
5 IP4(6)的地址
PS:
@可用于引用当前区域的名字,所以填写SOA值的时候,邮箱信息中的@只能写为. 比如邮箱 mage@magedu.com 只能写为 mage.magedu.com
同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应(实现负载均衡),如下图
同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
RR类型当中,最重要的是 SOA和NS记录.
对一个区域来说,SOA记录必须要有,必须先放在文件的第一行,第二行写NS记录,接下来才是A记录.
SOA记录了当前域的一些必要信息, 比如当前域的名字为magedu.com,包括谁是magedu.com域的管理员,管理员的邮箱,提供magedu.com域的服务器(至少一个,可多个,如存在多个,需要指明那个是主服务器 master,那些是从服务器 slave)
主从服务器之间,更新数据的方式有两种: push(推)和pull(拉).
push是主服务器通知从属服务器更新数据,通过版本号来实现.设版本号为1,当数据库里的内容发生改变时,需要手动将版本号加1,这样从属服务器就会通过对比数据库的版本号来确定,是否需要更新数据库.(更新数据库后,不修改版本号,从属服务器不会更新数据库)
pull是从属服务器按时间,主动问询主服务器,实现更新数据库的方式.
比如间隔多长时间同步一次,如果同步失败了,间隔多久再试一次.以及多久没同步的时候.来清理一次从服务器上的过期信息.
此外,当一直被询问错误的域名时候,会将否定答案缓存在对方的客户端上,如果再访问就直接用客户端的缓存会来回复客户机,不再经过服务器.这些否定答案的缓存时间,即不存在的,否定答案的缓存时长
SOA记录示例:
magedu.com.(名字) 86400(TTL) IN(网络信息) SOA ns.magedu.com.(类型), nsadmin.magedu.com. (邮箱) value(值),包括下面的(序列号, 刷新时间, 重试时间, 过期时间, 否定答案的TTL值)
2015042201 ;序列号------也就是版本号
2H ;刷新时间-----------从服务器去主动询问主服务器数据库的时间间隔
10M ;重试时间-----------如果主动询问失败,间隔多久再尝试
1W ;过期时间-----------如果从服务器迟迟不能和主服务器进行同步更新,那么多久从服务器上的数据库信息过期。
1D ;否定答案的TTL值---否定答案的缓存时长.
资源记录定义的格式:(每一种类型的格式都是这5条)
语法:name [TTL] IN rr_type value
SOA例子:
magedu.com 86400 IN SOA 管理员邮箱 master dns (1 7D 1h 2w 1d)
名字为 magedu.com
TTL为 86400 (可省略)
IN 网络信息(第一个必须写,多余的可以省略)
rr_type 为SOA
value值为 管理员邮箱 master dns (1 7D 1h 2w 1d)
NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.
注意:一个区域可以有多个NS记录例如:
magedu.com. IN NS ns1.magedu.com.
magedu.com. IN NS ns2.magedu.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录,
例子:NS name server(里面有几个服务器,那个是主,那个是从)
Magedu.com 86400 IN NS 谁提供了mage域的服务器,如 DNS1.DNS2...
如果有多个服务器,还要按照A记录的形式,将具体的IP地址书写出来,如:
DNS1 magedu.com 86400 IN A IP地址(1.1.1.1)
DNS2 A IP地址(1.1.1.2)
MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0- 99),表示此服务器的优先级;数字越小优先级越高
一个记录的5个信息:name,ttl,IN,type,值,分别为
@代表本域 ttl不指明为默认值(1天) IN从上面继承 type为MX
其中的值为 优先级(10,20),具体负责的服务器名称
A记录
name: 某主机的FQDN,例如www.magedu.com.
value: 主机名对应主机的IP4地址
例如:
www.magedu.com. IN A 1.1.1.1 常规写法
mx1.magedu.com. IN A3.3.3.3 在magedu.com域内,有一个mx1的主机.
$GENERATE 1-254 HOST$ A 1.2.3.$,一种书写格式
代表了从 GENERATE 1主机,IP地址为 1.2.3.1开始
到GENERATE 254主机,IP地址为 1.2.3.254结束,共计255台电脑的名字及IP
创建名为web_nginx01—0100的主机,IP地址为1.1.1.1—1.1.1.100的资源解析库
# $GENERATE 1-100 web-nginx0$ A 1.1.1.$
*.magedu.com. IN A 5.5.5.5 所有在magedu.com域内的主机名字
magedu.com. IN A 6.6.6.6 省略www,需要加入新行 @ A 6.6.6.6 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
其它记录############################################################
AAAA:
name: 某主机的FQDN, 例如www.magedu.com.
value: 主机名对应主机的IP4地址
PTR:反向解析的写法(从IP解析为域名)
name: IP,有特定格式,把IP地址反过来写,比如1.2.3.4,要写作4.3.2.1;
而且有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com. 如1.2.3.为网络地址,可简写成:4 IN PTR www.magedu.com.
PS:网络地址及后缀可省略;但是主机地址依然需要反着写
从域名解析为IP叫正向解析,反向解析就是从IP解析为域名,
反向解析是从IP开始的,那么先确定好网段(不可能全部网段都解析)
反向解析示意图(和根域比较类似)
####################################################################
实现反向解析:
编辑/etc/named.rfc1912.zones文件,在倒数第二行里加入如下内容:
然后再/var/named目录里编辑,192.158.227.zone文件
# vim /var/named/192.168.227.zone,添加如下内容:
重置服务 # rndc reload ,注意权限问题:
验证下结果:
# dig -x 192.168.227.100
# dig –x 192.168.227.7
####################################################################
别名记录
CNAME:
name: 别名的FQDN
value: 真正名字的FQDN
例如:
www.magedu.com. IN CNAME websrv.magedu.com.
# 这里的www就是websrv的别名。
小技巧:
1 *代表所有的域名,也叫泛域名解析。
通常是商业网站用这种方式来提高访问量,输错的域名由此服务器解析为商业网站想要的内容。比如 输入 wwww.jd.com的时候,还会是跳转到京东的页面上,但是无具体内容,只有京东的广告~。
2 访问互联网时,很多人会懒的敲www,直接输入域名,为了保证域名能解析成功,需要在DNS的配置文件/var/named/magedu.com.zone中,加入一行
@ A 本域的DNS地址,如下图:
禁止DNS服务器,在解析不了自己库里的IP后,跑到根域上去寻找IP的方法:
编辑配置文件:/etc/named.conf
避免自动补域名,将search改为localdomain即可
修改前,ping www.wang自动补为 www.wang.magedu.com
修改后,在ping www.wang
不再补域名了,且因为关闭了递归查询,因为资源解析库里并没有www.wang的地址,故直接报错.
允许动态更新(远程就可以更新数据库 /var/named/magedu.com.zone),而不用每次都要跑到服务端手动跟新.
进行如下操作:
1 在配置文件/etc/named.rfc1912.zones中, 找到指定的zone语句块,
将Allow-update { none; };更改为Allow-update { any; }
2 chmod 770 /var/named
3 nsupdate------------------ 使用这个命令可以更新
server 127.0.0.1-------- 指定更新的服务器
zone magedu.com ---------指定要更新的域
update add ftp.magedu.com 88888 IN A 8.8.8.8
添加一条记录(名字为 ftp.magedu.com,TTL为88888,IN.A记录,IP4地址为8.8.8.8)
Send---------------------发送至服务器.
也可以删除指定的记录
nsupdate------------------ 使用这个命令可以更新
server 127.0.0.1-------- 指定更新的服务器
zone magedu.com ---------指定要更新的域
update delete www.magedu.com A----删除www.magedu.com 的A记录.
删除一条记录(名字为 ftp.magedu.com,TTL为88888,IN.A记录,IP4地址为8.8.8.8)
Send---------------------发送至服务器.
使用此命令添加的A记录,会单独生成一个magedu.com.zone.jnl文件.
不能使用cat等文本文件打开.使用named-journalprint +jnl文件名才能查看.
使用这条命令添加的记录,数据库序列号会自动变更,无需再手动更改了.