DNS服务和BIND
1. DNS服务
DNS(Domain Name Service) 应用层协议,基于C/S,服务器端口号为(53/udp向服务器查询时候用到, 主从复制时候用到53/tcp和53/udp)
1.1 DNS概述
-
DNS软件
- BIND:Bekerley Internat Name Domain
官方地址:ISC (www.isc.org),目前最新版本为9.11,centos7.5使用的为9.9版本,市场占有率高 - unbound:递归缓存DNS解析服务器,宣传为更加安全的DNS服务器,红帽各版本有集成,目前使用率没有BIND高
官方地址:http://unbound.net/
- BIND:Bekerley Internat Name Domain
-
名字解析服务的实现方法
- DNS服务:分布式服务,只负责解析,不负责连通
- 本地名称解析配置文件:/etc/hosts,优先级高于DNS,用于特定环境,例如集群。也叫分散式的名字解析服务
例如:在文件中定义 www.magedu.com对应ip为8.8.8.8
修改名字解析服务优先级,不建议修改[root@localhost ~]$vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 8.8.8.8 www.magedu.com <==定义域名和IP地址行 [root@localhost ~]$ping www.magedu.com PING www.magedu.com (8.8.8.8) 56(84) bytes of data. <==将地址翻译成8.8.8.8 64 bytes from www.magedu.com (8.8.8.8): icmp_seq=1 ttl=53 time=67.9 ms
/etc/nsswitch.conf[root@localhost ~]$vim /etc/nsswitch.conf #hosts: db files nisplus nis dns hosts: files dns myhostname <==将files 与dns换位置,files代表的就是hosts文件
- NIS服务(Network Information Service),一个集中的管理思想,此服务维护了一个数据库,存放着IP地址与名字的对应关系,用户访问NIS服务,NIS查询数据库返回相应结果
-
DNS服务器的类型
- 主DNS服务器
管理和维护所负责解析的域内解析库的服务器 - 从DNS服务器
只负责同步数据,不提供修改功能,为备用服务器
同步方法有两类- 拉同步:从服务器主动向主服务器拉取数据,拉取的触发条件为同步时间
- 推同步:主服务器将数据推送给从服务器,触发条件为解析库发生变化
- 缓存DNS服务器(转发器)
- 主DNS服务器
1.2 域名级别及寻址原理
-
以我们常见的网站格式为例,先来解释一下各部分名称
- www.magedu.com:全称域名( FQDN)
- magedu.com:域名
- www:主机名或者别名
-
而域名等级划分时,全称域名的写法为www.magedu.com.<==多了个点,倒过来排序
-
最右边的点[.]:表示根域
-
com:表示顶级域或者一级域(TLD)
- 国家顶级域名(nTLDs):中国cn、美国是us、日本是jp等
- 国际顶级域名(iTDs):括com net gov org edu mil int tech 等
-
magedu:表示二级域(SLD)
-
还可以有三级域名,例如www.bj.magedu.com,最多127级域名
-
www:表示主机名
-
1.3 DNS解析
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…
-
DNS寻址原理
- 在根域上有一个DNS服务器,它的数据库存放了下级域DNS服务的IP地址和DNS服务器的名称
- 而每个一级域名也有自己的DNS服务器,存放的是其下级域的IP地址和DNS服务器的对应关系
- 二级域也维护了各自的DNS服务器,只维护了自己的二级域名,例如magedu.com,只维护以此结尾的名称与IP地址
- 每个DNS服务器在安装时已经内置了根服务器的地址
5.客户访问网站时,首先通过hosts文件解析 - 如果hosts文件没有解析,则查本机DNS缓存,linux中默认没有缓存。在windows中可在命令栏输入ipconfig/displaydns查询,清缓存ipconfig/flushdns,
- 本机缓存没有,则将请求发送给本地DNS服务器,本地DNS服务器查询缓存中是否有目标地址,如果没有就找到根,请求目标网站的ip
- 根服务器返回一级域名地址,也就是.com域服务器
- 本地服务器再去找一级域名服务器,一级域服务器返回二级域也就是163.com的地址
- 本地服务器找到二级域服务器,得到IP地址,将地址写入缓存,并回传给客户,客户再通过http协议(底层为tcp协议),经过握手后访问网站
-
DNS查询类型:
- 递归查询
DNS域名服务器代替提出请求的客户机进行域名查询,返回最终的结果交给了客户 - 迭代查询
其他服务器返回一个最佳的查询点提示或主机地址,若此最佳的查询点中包含需要查询的主机地址,则返回主机地址信息;若此时服务器不能够直接查询到主机地址,则是按照提示的指引依次查询,直到服务器给出的提示中包含所需要查询的主机地址为止,例如根服务器返回给本地服务一级服务器地址,就是迭代查询
- 递归查询
-
解析类型:
正反向解析是两个不同的名称空间,是两棵不同的解析树- 正向解析FQDN --> IP :将名字解析为IP
- 反向解析 IP --> FQDN: 将IP解析为名字
- 反向解析用到根域下一个特殊的名为ARPA域,叫反向解析域
- 反向解析域下面有一个in-addr,再往下为IP地址
- 以172.20.0.100为例,查询路线为访问根–>arpa域–>in-addr–>172–>20–>0–>100
-
解析答案:
- 肯定答案
- 权威答案:标记为aa
- 非权威答案
- 否定答案:请求的条目不存在等原因导致无法返回结果
- 肯定答案
1.4 资源记录
-
区域解析库:
如下例中建立的数据库magedu.com.zone,负责解析magedu.com这个区域,所以称为区域解析库,里面有很多的记录组合而成,每条记录叫做资源记录(RR) -
资源记录:Resource Record, RR
区域解析库里面由很多记录组合而成,每条记录叫做资源记录 -
资源记录类型
- SOA(Start Of Authority)
起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于整个解析库的第一条记录,记录了这个域的相关信息 - A (internet Address)
将名字域IP地址做一个对应关系,FQDN --> IP IPv4地址
示例www.magedu.com 86400 IN A 101.200.188.230 生成1-254范围内的HOST记录,也就是HOST1.moli.com A 1.2.3.1 ... HOST100.moli.com A 1.2.3.100 $GENERATE 1-254 HOST$ A 1.2.3.$ 即使用户输入不加www.,也可以解析的写法 @ 86400 IN A 192.168.169.128 moli.com. IN A 192.168.169.128 效果与上相同 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址 *.moli.com. IN A 192.168.169.128
- AAAA
同A,对应的为IPv6地址www.magedu.com 86400 IN AAAA IPv6
- PTR (PoinTeR)
将IP地址反向解析为名字,IP --> FQDN - NS (Name Server)
专用于标明当前区域的DNS服务器,当前域有多少DNS服务器,名字是什么,例如备用DNS服务地址 - CNAME (Canonical Name)
别名记录,例如web-nginx01.magedu.com可以将别名设置为www.magedu.com - MX(Mail eXchanger)
邮件交换器,设定区域中担任邮件伺服器的主机,所有要送往那部机器的mail 都要经过mail exchanger 转送。 而数字则是该主机邮件传递时的优先次序,此值越低表示有越高的邮件处理优先权。 - TXT:
对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等
将来搭建加密http服务时,就要像DNS服务商申请一个DNS的TXT记录,服务商给你一个很长的字符串,贴到DNS服务器的配置中就可以了
示例:_dnsauth IN TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
- SOA(Start Of Authority)
-
资源记录定义的格式
不论哪种记录都包含五项元素- 语法:name [TTL] IN rr_type value
- 特点:
- @代表当前区域的域名,可以用来引用当前域名,例如
@ IN SOA
- 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
- 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
- @代表当前区域的域名,可以用来引用当前域名,例如
- 释义:
元素 含义 name 指示拥有资源记录的 DNS 域名,该名称与资源记录所在的控制台树节点的名称相同 TTL 缓存的时间,生命期,以秒为单位,可定义为类似变量 $TTL 86400
,那么以下各条相同时间的资源记录就可以省略IN 代表Internet,保留下来不动就可以 rr_type 资源记录类型,例如SOA,表示起始授权记录 value 记录特定数据,描述资源的信息
1.4.1 SOA记录内容
- 元素说明
- name:
当前区域的名字,例如“magedu.com.” com后的点必须写,不然系统会自动将域名再补一次,变成"magedu.com.magedu.com." - value:
有多部分组成,从第3条到第7条使用小括号括起来- 主DNS的名称
名称可以自定义,例如ns.magedu.com
- DNS服务器的管理员邮箱
因为@在资源记录中有特殊含义,这里用点来代替,例如nsadmin.magedu.com
- 序列号:
2015042201
主服务器负责修改查询,从服务器只负责同步数据,主从服务器同步是基于解析库的版本号,比对版本号得知主从服务器解析库版本是否相同,版本号为整数,此记录在主服务器上是由管理员手工指定的,主服务器解析库变化时,其序列递增,主服务器解析库发生变化时,会主动通知从服务器 - 刷新时间
从服务器从主服务器请求同步解析的时间间隔,默认以秒为单位,支持1h、1d表示,例如:2H
- 重试时间
从服务器请求同步失败时,再次尝试时间间隔,应该比同步间隔小 ,例如10m
- 过期时间
从服务器联系不到主服务器时,多久后停止服务,例如1W
- 否定答案的TTL值
不存在的记录缓存时长, 将不正确的域名缓存起来,直接返回结果给用户,不需要查询
- 主DNS的名称
- name:
- 示例
$TTL 86400 <==定义整个记录的TTL时间为86400 |magedu.com. | IN | SOA | ns.magedu.com. | nsadmin.magedu.com.| ( | name | IN |TYPE| value 1 | value 2 | 2015042201 ;serial <==value 3 2H ;refresh <==value 4 10M ;retry <==value 5 1W ;expire <==value 6 1D ) ;minimum <==value 7
1.4.2 NS记录
- 元素说明
- name: 当前区域的名字
- value: 当前区域的某DNS服务器的名字,例如ns1.magedu.com.
- 注意
- 一个区域可以有多个NS记录
- 相邻的两个资源记录的name相同时,后续的可省略
- 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
- 示例,本区域的两台主备DNS服务器
由于涉及到字符串,就必须要有对应的A记录去解析为IP,所以在A记录里要有对应NS地址的记录| name | TTL | IN | TYPE | value | |magedu.com.|86400| IN | NS | ns1.magedu.com.| magedu.com. 86400 IN NS ns2.magedu.com.
ns1.magedu.com. 86400 IN A 192.168.169.5 ns2.magedu.com. 86400 IN A 192.168.169.6
1.4.3 MX记录
一个区域内MX记录可有多个
- 各元素说明
- name: 当前区域的名字
- value: 当前区域的某邮件服务器(smtp服务器)的主机名,由2部分组成
- 服务器的优先级,由数字(0-99)表示,表示此;数字越小优先级越高
- 服务器名
- 例如
涉及到名字,需要在A记录中增加对应解析项magedu.com. 86400 IN MX 10 mail.magedu.com. 86400 IN MX 20 mail2.magedu.com. <==name相同,下面的记录可以忽略此元素
mail 86400 IN A 3.3.3.3 <==mail为简写,其后没有加[ . ],会自动补上域名
1.4.4 PTR记录
- 元素说明
- name:
IP,有特定格式,把IP地址反过来写(例如1.2.3.4,要写作4.3.2.1);
然后加特定后缀:in-addr.arpa.
所以完整写法为:4.3.2.1.in-addr.arpa. - value: FQDN
- name:
- 示例
注意:网络地址及后缀可省略;主机地址依然需要反着写4.3.2.1.in-addr.arpa. 86400 IN PTR www.magedu.com. 如1.2.3为网络地址,可简写成: 4 86400 IN PTR www.magedu.com.
1.4.5 CNAME(别名记录)
- 元素说明
- name: 别名的FQDN
- value: 真正名字的FQDN
- 例如:web-nginx01.magedu.com的别名记录,
涉及到名字,也需要在A记录中增加对应的解析记录www.magedu.com 86400 IN CNAME web-nginx01.magedu.com
web-nginx01.magedu.com 86400 IN A 101.200.188.230
2. DNS管理工具BIND
-
DNS服务器配置文件注意项
- 一台物理服务器可同时为多个区域提供解析
- 必须要有根区域文件;named.ca
- 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
-
BIND安装:centos镜像文件中资源
[root@localhost ~]$ yum install bind
-
包文件介绍
- 服务名称
/usr/lib/systemd/system/named.service - 主配置文件,/etc/named.conf
任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上`全局配置`:定义一些功能,比如指定监听端口,从服务器,转发服务类型等 options { // listen-on port 53 { 127.0.0.1; }; `日志子系统配置` logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; `区域定义`:本机能够为哪些zone进行解析,就要定义哪些zone zone "." IN { <==" . "代表根域 type hint; file "named.ca"; <==负责维护域的数据库,也就是/var/named/named.ca };
- 主程序
/usr/sbin/named - DNS子配置文件,存放解析信息,例如负责解析的域
/etc/named.rfc1912.zones - 区域解析数据库,也就是IP地址与域名的对应关系
/var/named - 配置文件类似于key验证,自编译软件时候,启用rndc命令需要用到
/etc/rndc.key
- 服务名称
-
rndc命令(remote name domain controller)
默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
提供辅助性的管理功能,端口为953/tcp- 格式
rndc COMMAND - 选项:
选项 作用 reload 重载主配置文件和区域解析库文件 reload zonename 重载区域解析库文件 retransfer zonename 手动启动区域传送,而不管序列号是否增加 notify zonename 重新对区域传送发通知 reconfig 重载主配置文件 querylog 开启或关闭查询日志文件/var/log/message trace 递增debug一个级别 trace LEVEL 指定使用的级别 notrace 将调试级别设置为 0 flush 清空DNS服务器的所有缓存记录 - 格式
-
修改DNS服务端口设置,允许其对外服务
- 启动dns服务后,绑定的为本地网卡,如果要对外服务,修改配置文件
修改内容为udp UNCONN 0 0 127.0.0.1:53 *:* tcp LISTEN 0 10 127.0.0.1:53 *:* tcp LISTEN 0 5 192.168.122.1:53 *:*
listen-on port 53
[root@localhost ~]$vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; }; <==修改这里,如果要绑在其他ip上,可以写在后面 listen-on port 53 { 127.0.0.1;172.20.50.203;192.168.169.131; }; 修改后效果,末尾的;必须写
- 重新加载服务,查看效果
[root@localhost ~]$systemctl reload named [root@localhost ~]$ss -ntul tcp LISTEN 0 10 192.168.169.131:53 *:* tcp LISTEN 0 10 172.20.50.203:53 *:* tcp LISTEN 0 10 127.0.0.1:53 *:*
- 绑定固定的IP地址,一旦Ip地址变更,可能会发生故障,所以建议写灵活,利用DNS自带的关键字localhost,在DNS中意思为本地所有的IP
[root@localhost ~]$vim /etc/named.conf listen-on port 53 { localhost; }; 修改后效果,末尾的;必须写
- 启动dns服务后,绑定的为本地网卡,如果要对外服务,修改配置文件
3. 搭建一个域的主DNS
-
在配置文件中定义区域的格式
zone "ZONE_NAME" IN { <==定义DNS服务器的管理域 type { master|slave|hint|forward}; <==此DNS服务器的类型master(主)、slave(从)、hint(root缓冲区域)、forward(代理查询) file "ZONE_NAME.zone"; <==此DNS服务器的域数据库文件,名字自定义 };
-
主配置文件语法检查:
named-checkconf -
解析库文件语法检查:
|named-checkzone| "magedu.com" |