DNS 和 bind 详解
DNS
两个主机之间的通信,其实就是进程之间的通信,进程之间的通信又是基于 sockets 实现的。DNS是一种CS架构的。
C/S:
Client:发起应用请求的程序
Server:响应请求(提供服务)的程序
(LISTEN:Socket,服务器程序处于LISTEN状态,随时准备等待连接)
传输层协议: TCP, UDP, SCTP。
TCP: Transmission Control Protocol
面向连接的协议:双方通信之前需要事先建立虚连接
UDP:User Datagram Protocol
无连接的协议:双方无须通信之前需要事先建立虚连接
DNS 相关概念
1、DNS
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS 使用 TCP 和 UDP 端口53。
当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
2、FQDN
FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。
全限定域名可以从逻辑上准确地表示出主机在什么地方,也可以说全域名是主机名的一种完全表示形式。
从全限定域名中包含的信息可以看出主机在域名树中的位置。DNS解析流程:首先查找本机HOSTS表,有的直接使用表中定义,没有查找网络连接中设置的DNS 服务器由他来解析。
例如:
# bigserver # 主机名
# mycompany.com # 域名
# bigserver.mycompany.com # FQDN
3、本地名称解析配置文件:hosts
文件路径:/etc/hosts
122.10.117.2 www.magedu.com
93.46.8.89 www.google.com
4、TLD
tld:Top Level Domain(顶级域 或 一级域)
- 组织域:.com, .net, .org, .gov, .edu, .mil
- 国家域:.iq, .tw, .hk, .jp, .cn, …
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理。
5、DNS 查询类型
主机 DNS 解析:递归到自己的域服务器(或者自己指定的域服务器),然后进行迭代查询。
自己的域服务器直接找根,不会找上级域,因为上级域较大概率解析不了→(全球13个根节点服务器)。
迭代查询的过程其实就是:自己的域服务器→ 根,反馈一个结果到自己的域服务器 → 再向顶级域查询,反馈一个二级域给自己的域服务器 → 自己的域服务器再向反馈的二级域服务器进行查询,最终得到结果,把结果返回,并放入到缓存中。所以每次解析都分为两段,递归和迭代。
任何dns服务器不为你进行递归解析,你配置其为dns服务器时,是不会起作用的。
子域解析不了父域,回去找根进行迭代查询;配置转发后,可解析。
-
递归查询
递归查询是最常见的查询方式,域名服务器将代替提出请求的客户机(下级DNS服务器)进行域名查询,若域名服务器不能直接回答,则域名服务器会在域各树中的各分支的上下进行递归查询,最终将返回查询结果给客户机,在域名服务器查询期间,客户机将完全处于等待状态。 -
迭代查询
迭代查询又称重指引,当服务器使用迭代查询时能够使其他服务器返回一个最佳的查询点提示或主机地址,若此最佳的查询点中包含需要查询的主机地址,则返回主机 地址信息,若此时服务器不能够直接查询到主机地址,则是按照提示的指引依次查询,直到服务器给出的提示中包含所需要查询的主机地址为止,一般的,每次指引都会更靠近根服务器(向上),查寻到根域名服务器后,则会再次根据提示向下查找。
假设你要寻找一家你从未去过的公司,你会有2种解决方案,1是找一个人替你问路,那可能是你的助手,2是自己问路,每走过一个路口,就问一个人,这就好比递归查询和迭代查询,递归查询在这里代表你的第1种解决方案,而迭代则是第2种解决方案。
6、DNS名称解析方式
- 名称 --> IP:正向解析
正向解析的根 .
- IP --> 名称:反向解析
反向解析的根 in-addr.arpa.
注意:二者的名称空间,非为同一个空间,即非为同一棵树;因此,也不是同一个解析库。
7、域 和 主机
注册自己的域名服务器,一般都是和顶级域申请一个二级域名,然后按照自己规划进行域名规划,并把相关数据放置在自己的域服务器上。
自己指定的dns服务器地址需要在/etc/resolve.conf里进行配置。
域:magedu.com.
FQDN IP地址
www.magedu.com. 1.1.1.1
ftp.magedu.com. 2.2.2.2
bbs.magedu.com. 3.3.3.3
cloud.magedu.com. 4.4.4.4
8、DNS服务器类型
- 负责解析至少一个域的服务器:主名称服务器 和 辅助名称服务器 。
- 不负责域解析的服务器:缓存名称服务器 。
9、一次完整的DNS查询请求经过的流程
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 顶级域名DNS–>二级域名DNS…
- 自己负责解析的域:直接查询数据库并返回答案
- 不是自己负责解析域:Server Cache --> iteration(迭代)
10、解析答案
-
肯定答案
-
否定答案:不存在查询的键,因此,不存在与其查询键对应的值
-
权威答案:由直接负责的DNS服务器返回的答案
-
非权威答案:
11、主-辅DNS服务器
- 主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行
- 从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库;但只能进行读操作
从DNS服务器的“复制”操作的实施方式:
- 序列号:serial, 也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增
- 刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况
- 重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔
- 过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务
- 否定答案的缓存时长:
“通知”机制:主服务器解析库发生变化时,会主动通知从服务器。
区域传送:
- 全量传送:axfr, 传送整个数据库
- 增量传送:ixfr, 仅传送变量的数据
12、区域(zone)和域(domain)
-
基本区别
区域 zone(物理概念)(就是文件,就是解析库) 域 domain(逻辑概念) 域一般有两个方向的区域组成 # FQDN TO IP 正向解析区域 # IP TO FQDN 反向解析区域 # 但域不一定比区域大,不同等级的域和区域肯定不能直接比较
创建完自己的域以后,如果需要外界能够访问,是需要上级域进行授权(在现实中,就是进行域名注册),这样的域才是一个合法的域,这样才能融入到整个域中
-
域: 例如 magedu.com
-
区域
FQDN --> IP 正向解析库;区域 IP --> FQDN 反向解析库;区域
13、子域
-
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权
-
类似根域授权tld
.com. IN NS ns1.com. .com. IN NS ns2.com. ns1.com. IN A 2.2.2.1 ns2.com. IN A 2.2.2.2
-
magedu.com. 在.com的名称服务器上,解析库中添加资源记录
magedu.com. IN NS ns1.magedu.com. magedu.com. IN NS ns2.magedu.com. magedu.com. IN NS ns3.magedu.com. ns1.magedu.com. IN A 3.3.3.1 ns2.magedu.com. IN A 3.3.3.2 ns3.magedu.com. IN A 3.3.3.3
-
glue record:粘合记录,父域授权子域的记录
14、区域数据库文件
14.1 资源记录
资源记录:Resource Record, 简称 rr 。
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX 。
- SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条
- NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的
- A: Address, 地址记录,FQDN --> IPv4
- AAAA:地址记录, FQDN --> IPv6
- CNAME:Canonical Name,别名记录
- PTR:Pointer,IP --> FQD
- MX:Mail eXchanger,邮件交换器
- 优先级:0-99,数字越小优先级越高
14.2 资源记录的定义格式
语法格式:
name [TTL] IN RR_TYPE value
注意:
- (1) TTL可以从全局继承
- (2) @表示当前区域的名称
- (3) 相邻的两条记录其 name 相同时,后面的可省略
- (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录
- (5)同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
- (6)同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
14.2.1 SOA
- name: 当前区域的名字;例如”mageud.com.”,或者“2.3.4.in-addr.arpa.”
- value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称)
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代
(3) 主从服务协调属性的定义以及否定答案的TTL
例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. (
2017010801 ; serial
2H ; refresh
10M ; retry
1W ; expire
1D ; negative answer ttl
)
14.2.2 NS
- name: 当前区域的区域名称
- value:当前区域的某DNS服务器的名字,例如ns.magedu.com.
注意:一个区域可以有多个ns记录。
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
注意:
- (1) 相邻的两个资源记录的 name 相同时,后续的可省略
- (2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
14.2.3 MX
- name: 当前区域的区域名称
- value:当前区域某邮件服务器(smtp服务器)的主机名
注意:
- (1)MX记录可以有多个;但每个记录的value之前应该有一个数字(0-99)表示其优先级。数字越小优先级越高
- (2)对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
14.2.4 A
- name:某FQDN,例如 www.magedu.com.
- value:主机名对应主机的IP地址
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
bbs.magedu.com. IN A 1.1.1.1
14.2.5 AAAA
- name:FQDN
- value: IPv6
14.2.6 PTR
- name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.
- value:FQND
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
14.2.7 CNAME
- name:FQDN格式的别名
- value:FQDN格式的正式名字
例如:
web.magedu.com. IN CNAME www.magedu.com.
BIND
BIND 安装配置
1、BIND: Berkeley Internet Name Domain, ISC.org
dns: # 协议
bind # dns 协议的一种实现
named # bind 程序的运行的进程名
2、程序包
bind-libs # 被bind和bind-utils包中的程序共同用到的库文件
bind-utils # bind客户端程序集,例如dig, host, nslookup等
bind # 提供的dns server程序、以及几个常用的测试程序
bind-chroot # 选装,让named运行于jail模式下
3、bind 配置文件
yum install bind -y
rpm -ql bind
# etc下的是配置文件
# user sbin 下的 named 是主程序文件
# named-checkconf 是检查配置文件语法
# named-checkzone 是检查 zone 配置文件的
# var name 区域解析库文件
一个dns服务器上为了避免把localhost解析为别的地址,需要把localhost和127.0.0.1定义在一个区域里,正反向解析库文件都要存在。安装完bind程序后,在 /var/name
下就会自动生成此正反向解析库文件 named.localhost
和 named.loopback
3.1 服务脚本和名称
# /etc/rc.d/init.d/named
# /usr/lib/systemd/system/named.service
3.2 bind 主配置文件
# /etc/named.conf
或包含进来其它文件:
# /etc/named.iscdlv.key
# /etc/named.rfc1912.zones
# /etc/named.root.key
配置文件每句话都必须以分号结尾,且花括号前后都必须有空格,否则为依法错误。
3.3 bind 解析库文件
/var/named/目录下
# 一般名字为:ZONE_NAME.zone
注意事项:
-
(1) 一台DNS服务器可同时为多个区域提供解析
-
(2) 必须要有根区域解析库文件: named.ca
-
(3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库
正向:named.localhost 反向:named.loopback
3.4 rndc
rndc:remote name domain contoller
# 953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用
rndc命令:named服务控制命令
# rndc status
# rndc flush
# reload # 重载主配置文件和区域解析库文件
# reload zonename # 重载区域解析库文件
# retransfer zonename # 手动启动区域传送,而不管序列号是否增加
# notify zonename # 重新对区域传送发通知
# reconfig # 重载主配置文件
# querylog # 开启或关闭查询日志文件/var/log/message
# trace # 递增debug一个级别
# trace LEVEL # 指定使用的级别
# notrace # 将调试级别设置为 0
# flush # 清空DNS服务器的所有缓存记录
- 默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp。
3.5 启动服务
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务。
CentOS 6: service named start
CentOS 7: systemctl start named.service
3.6 配置文件格式(/etc/named.conf)
全局配置段:
options { ... }
日志配置段:
logging { ... }
区域配置段:
zone { ... }
那些由本机负责解析的区域,或转发的区域
注意:
- 每个配置语句必须以分号“;”结尾
- 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
3.6.1 缓存名称服务器的配置(/etc/named.conf)
监听能与外部主机通信的地址;
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
学习时,建议关闭dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
关闭仅允许本地查询:
//allow-query { localhost; };
3.6.2 检查配置文件语法错误
# named-checkconf [/etc/named.conf]
域名解析测试工具
1、dig 命令
安装 dig:
[root@Tang-Neo ~]# yum install bind-utils -y
语法格式:
# dig [-t RR_TYPE] name [@SERVER] [query options]
此明了用于测试 dns 系统,因此不会查询本机 hosts 文件。
dig +trace -t A www.baidu.com
# 跟踪解析过程,迭代解析
[root@Tang-Neo ~]# dig +trace -t A www.baidu.com
; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> +trace -t A www.baidu.com
;; global options: +cmd
. 2376 IN NS d.root-servers.net.
. 2376 IN NS