DNS 服务器基础
DNS 服务器基础
一、DNS简介
DNS(Domain Name System,域名系统)是因特网的一项服务;
DNS 是将域名和IP地址相互映射的一个分布式数据库;
DNS 是一种应用层协议,使用UDP和TCP的53端口;
1、DNS域命名空间
DNS域命名空间是一种层次结构,一般可分为根域、*域、二级域、子域以及主机名;
1)根域
使用“.”表示,位于域命名空间层次结构的最高层;
目前分布于全世界的根服务器只有13台,全部由Internet网络信息中心(InterNIC)管理,在根域服务器中只保存了其下层的*域的DNS服务器名称和IP地址对应关系;
2)*域(TLD,Top Level Domain)
*域位于根域下层,可以分为两类:组织域(.com,.net,.org,.gov,.edu,.mil等)和国家域(.iq,.tw,.hk,.jp,.cn等);
3)二级域
二级域位于*域下层,是指为了在Internet上使用而注册到个人或企事业单位的域名;
4)子域
子域是根据具体情况从二级域中按部门或地理位置创建;
5)主机名
位于DNS域命名空间的最低层,主要指计算机的主机名;
注意:FQDN(Full Qualified Domain Name,完全合格域名)包括域名和主机名;
2、DNS名称解析方式
1)正向解析:由域名查找IP地址;
2)反向解析:由IP地址查找域名;
注意:二者的命名空间不在同一个空间,不是同一棵树,因此也不是同一个解析库;
3、DNS查询
1)递归查询
当DNS服务器接收到查询请求时,不论成功或失败,都会做出对应的响应(发生在DNS客户端与DNS服务器之间);
2)迭代查询
DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应;如果服务器无法解析,它可能返回一个指针;指针指向下级域名的DNS服务器,继续该过程,直到找到拥有所查询名字的DNS服务器,或知道出错、超时为止(发生在DNS服务器之间);
4、一次完整的DNS查询过程
Client----->hosts文件----->DNS Local Cache----->DNS Server (recursion,递归)----->
- 若为自己负责解析的域:直接查询数据库并返回答案;
- 若不是自己负责解析的域:Server Cache----->iteration(迭代)
5、解析答案
- 肯定答案
- 否定答案:不存在查询的键,因此,不存在与之对应的值;
- 权威答案:由直接负责的DNS服务器返回的答案;
- 非权威答案
二、DNS服务器的类型
负责解析至少一个域:
- 主DNS服务器
- 辅助DNS服务器
不负责域解析:
- 缓存DNS服务器
1)主-辅DNS服务器
- 主DNS服务器:维护所负责解析的域数据库的那台服务器,读写操作均可进行;
- 辅助DNS服务器:从主DNS服务器或其他的从DNS服务器那里“复制”一份解析库,但只能进行读操作;
2)“复制”操作的实现方式
- ***:serial,也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增;
- 刷新时间间隔:refresh,从服务器每次到主服务器检查***更新状况;
- 重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
- 过期时长:expire,从服务器始终联系不到主服务时,多久之后放弃从主服务器同步数据,并停止提供服务;
- 否定答案的缓存时长:negative answer ttl;
注意:主服务器数据库发生变化时,主服务器会“通知”从服务器随时更新数据;
3)区域传送
- 全量传送:axfr,传送整个数据库;
- 增量传送:ixfr,仅传送变化的数据;
注意:区域(zone)和域(domain)的区别:
区域为物理概念,域为逻辑概念;
如bruce.com域包括正向解析库(FQDN--->IP)和反向解析(IP--->FQDN),每个解析库即为一个解析区域;
三、BIND 简介
BIND(Berkeley Internet Name Domain)是由伯克利大学研发的,是当前互联网上最长使用的DNS服务器软件,现在由ISC(Internet Systems Consortium)负责开发与维护;
1、bind 程序包
- bind:提供dns server程序以及几个常用的测试程序;
- bind-utils:bind客户端程序集,例如dig,host,nslookup等;
- bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
- bind-chroot:选装,让named运行于jail模式下;
注意:
- dns:协议;
- bind:dns协议的一种软件实现 ;
- named:bind程序运行的进程名;
bind 程序安装完成后,默认即可作为缓存名称服务器使用;
2、bind 配置文件
1)bind 的主配置文件 /etc/named.conf
主配置文件格式:
- 全局配置段 options {...}
- 日志配置段 logging {...}
- 区域配置段 zone {...}:配置那些由本机负责解析的区域或转发的区域;
注意:每个配置语句必须以分号结尾;
2)bind 的区域解析库文件
bind 的解析库文件在 /var/named/ 目录下,一般文件名 ZONE_NAME.zone
注意:
a. 一台DNS服务器可以同时为多个区域提供解析;
b. 必须要有根区域解析库文件 named.ca;
c. 还应该有localhost和127.0.0.1两个区域解析库文件,正向的为named.localhost,反向的为named.loopback;
3)资源记录(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--->FQDN;
- MX:Mail eXchanger,邮件交换器;有优先级,为0~99,数字越小优先级越高;
资源记录的定义格式:
name [TTL] IN RR_TYPE value
a. SOA
name:当前区域名称,例如“bruce.com.”或“2.3.4.in-addr.arpa.”;
value:有多部分组成:
- 当前区域的区域名称,也可以使用主DNS服务器名称;
- 当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用.代替;
- 主从服务协调属性的定义以及否定答案的TTL;
示例:
1 bruce.com. 86400 IN SOA bruce.com. admin.bruce.com.( 2 2017010801 ;seial 3 2H ;refresh 4 10M ;retry 5 1W ;expire 6 1D ;negative answer ttl 7 )
b. NS
name:当前区域的区域名称;
value:当前区域的某DNS服务器的名称,如ns.bruce.com.;
示例:
1 bruce.com. 86400 IN NS ns1.bruce.com. 2 bruce.com. 86400 IN NS ns2.bruce.com.
注意:一个区域可以有多个ns记录;
c. MX
name:当前区域的区域名称;
value:当前区域某邮件交换器的主机名;
示例:
1 bruce.com. IN MX 10 mx1.bruce.com. 2 bruce.com. IN MX 20 mx2.bruce.com.
注意:MX记录可以有多个,但每个记录的value之前应该有一个数字表示其优先级;
d. A
name:某FQDN,如www.bruce.com.;
value:某IPv4地址;
示例:
1 www.bruce.com. IN A 1.1.1.1 2 www.bruce.com. IN A 1.1.1.2 3 bbs.bruce.com. IN A 1.1.1.1
e. AAAA
name:FQDN;
value:IPv6;
f. PTR
name:IP地址,有特定格式,即IP地址反过来写,而且需加特定后缀;如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQDN;
示例:
1 4.3.2.1.in-addr.arpa. IN PTR www.bruce.com.
g. CNAME
name:FQDN格式的别名;
value:FQDN格式的正式名称;
示例:
1 web.bruce.com. IN CNAME www.bruce.com.
注意:
- TTL可以从全局继承;
- @表示当前区域的名称;
- 相邻的两条记录其name相同时,后面的可以省略;
- 对于正向区域来说,各MX、NX等类型记录的value为FQDN,此FQDN应该有一个A记录;
四、DNS 工具
1、DNS 排错工具
1)rndc
rndc工作在TCP的953端口,默认监听于127.0.0.1地址,因此仅允许本地使用;
1 rndc status 2 rndc flush 3 rndc reload
2)named-checkconf
1 named-checkconf [/etc/named.conf]
3)named-checkzone
1 named-checkzone [ZONE_NAME] [ZONE_FILE]
2、DNS 测试工具
1)dig
注意:dig用于测试DNS系统,因此不会查询hosts文件;
1 dig [query options] [-t RR_TYPE] name [@SERVER] 2 query options: 3 +[no]trace:跟踪解析过程; 4 +[no]recurse:进行递归解析; 5 6 dig -x IP 7 反向解析测试 8 9 dig -t axfr DOMAIN [@server] 10 模拟完全区域传送
2)host
1 host [-t RR_TYPE] name [server]
3)nslookup
1 nslookup [options] [name] [server] 2 3 交互模式 4 nslookup> 5 server IP:以指定IP为DNS服务器进行查询; 6 set q=RR_TYPE:要查询的资源记录类型; 7 name:要查询的名称;