互联网的诞生,衍生了更多的服务,每个主机可以通过IP地址上网,访问相应的服务,面对这么多IP地址,人们就想出了采用名称来访问服务的办法。这样DNS就应运而生,它能够实现IP和域名间的相互转换。下面笔者就详细介绍linux系统下的DNS。
简介:DNS是应用层协议,监听53端口,能够实现IP和域名的相互解析,其中FQDN-->IP为正向解析,IP-->FQDN为反向解析。域名是一个倒立的树,上级域能够查询到下级,而下级不知道上级域,且它只知道根。
原理:当进行域名解析时,网络中有两种查询:递归查询和迭代查询,查询到的结果返回给用户。
DNS相关术语:
- 查询类型:递归查询(recursive)当用户访问DNS服务器,此时DNS会不断询问,直至给出结果,这样会消耗大量的互联网资源。
- 例:当用户访问tech.kingshuo.com时,DNS服务器首先会去询问根.,根会指定去访问com域,查询到kingshuo.com域时,然后再去找tech.kingshuo.com,然后就给出查询结果
- 迭代查询 当用户访问DNS服务器时,此时DNS服务器会指出谁会知道相应的域
- 实际互联网中,为了很好的利用资源,会采用结合两种查询共同实现。
- DNS服务器类型:主服务器
- 辅助名称服务器
- cacheing-name服务器
- 主服务器无法负载查询时,辅助名称服务器会启用,给出相应的查询结果。缓存服务器能够缓存解析记录,下次查询时能够迅速的给出结果。
- 主机服务器
- 从服务器
- 从服务器会从主服务器上获得一份DNS名称解析的记录,这样能够加快域名的解析。
- 区域类型:
- hint 根域,也称为跟提示
- master 主服务器
- slave 从服务器
- 区域传送:axfr 完全区域传送
- ixfr 增量区域传送
- 比较主从服务器的序列号,当主的大于从的就开始区域传送,然而在传送时间间隔内主机服务器宕掉后,会启用notify机制通知从服务器。
- 例:
- #dig -t axfr kingshuo.com @192.168.0.101
- 域和区域:
- 域是逻辑概念,其中包括正向区域和反向区域
- 区域是物理概念
- 查询过程:
- 查找/etc/hosts文件-->查找本地dns缓存-->server缓存-->authoritive
- 查询结果:权威答案
- 非权威答案
- 权威答案是负责区域返回的结果,而非权威答案是缓存记录或者从服务器返回的结果
- 例:使用dig命令查询时,有aa字样的为权威答案,否则则是非权威答案
- ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
安装DNS服务器:
#yum install bind
编辑dns的配置文件:
- #vim /etc/named.conf
- options {
- directory "/var/named";<---区域存放的目录
- };
- zone "." IN {
- type hint; <----区域类型
- file "named.ca"; <----区域文件
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";<----正向区域类型文件
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local"; <---反向区域文件
- };
编辑区域文件:
正向区域文件localhost.zone
- $TTL 86400<------最大生存时间
- $ORIGIN localhost.
- @ IN SOA ns.localhost. admin.localhost. (
- 2011082201<-----序列号
- 1H<-------发送间隔时间
- 10M<-----重试时间
- 7D<------过期时间
- 1D )<----否定回答间隔时间
- IN NS ns.localhost.
- localhost IN A 127.0.0.1
反向区域文件named.local
- $TTL 86400
- @ IN SOA localhost. root.localhost. (
- 1997022700 ; Serial
- 28800 ; Refresh
- 14400 ; Retry
- 3600000 ; Expire
- 86400 ) ; Minimum
- IN NS localhost.
- 1 IN PTR localhost.
其他DNS命令:
- #dig -t NS . @a.root-server.net > /var/named/named.ca<--生成named.ca文件
- #dig +rescurs -t A www.baidu.com <---强行进行递归查询
- +norescus <---不要递归查询
- +trace -t A www.baidu.com <---追踪解析过程
- #service named configtest <---检查配置文件
- #named-checkconf <---检查配置语法错误
- #named-checkzone "localhost" /var/named/localhost.zone<---检查区域语法错误
- #service named start <----重启DNS服务
- #dig -x 192.168.0.5 <---反向解析
- #rndc-confgen > /etc/rndc.conf <---手动生成rndc
- rndc是远程配置工具 953端口
- #rndc reload 重载
- #rndc stop 停止named
- #rndc flush 清空服务器缓存
- #rndc status 查看状态
---------------------------------------------------------------------------------
案例解析: 考虑到某公司内网客户端众多,且彼此间访问经常需要用到主机名的情况下,
公司计划自建一台DNS服务器kingshuo.com,为了防止主服务宕掉后用户无法相互访问,此时还搭建一个从DNS服务器;为了内部快速解析tech.kingshuo.com,采取了子域授权;区别内部和外部DNS解析
安装DNS软件:
#yum install bind
#####################主DNS服务器的配置##########################
编辑/etc/named.conf文件:
- #vim /etc/named.conf
- acl internel {
- 192.168.0.0/24;<----内网地址
- 127.0.0.0/8;
- };
- acl externel {
- 172.16.0.0/16;<----外网地址
- };
- options {
- directory "/var/named";
- recursion no; <-----不允许递归查询
- };
- view INNET {<-----建立视图
- match-clients { internel; };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type master;
- file "kingshuo.zone.inter";
- allow-transfer { 192.168.0.102; }; <-----只允许传送给此地址,防止信息丢失
- };
- zone "0.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.zone.inter";
- allow-transfer { 192.168.0.102; };
- };
- };
- view EXNET {
- match-clients { externel; };
- recursion no; <-----不允许递归查询
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type master;
- file "kingshuo.zone.exter";
- };
- zone "0.16.172.in-addr.arpa" IN {
- type master;
- file "172.16.zone.exter";
- };
- };
编辑区域文件:
#cd /var/named
#dig -t NS . @a.root-server.net > named.ca
相应的localhost.zone,named.local如上配置即可,此处不再赘余。
vim kingshuo.zone.inter
- $TTL 86400
- $ORIGIN kingshuo.com.
- @ 600 IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- IN MX 10 mail.kingshuo.com.
- ns1 IN A 192.168.0.101
- ns2 IN A 192.168.0.102
- mail IN A 192.168.0.102
- www IN A 192.168.0.101
- admin IN A 192.168.0.101
- tech.kingshuo.com IN NS ns1.tech.kingshuo.com.<----声明子域
- ns1.tech.kingshuo.com IN A 192.168.0.102
#vim 192.168.zone.inter
- $TTL 86400
- @ IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- 101 IN PTR ns1.kingshuo.com.
- 102 IN PTR ns2.kingshuo.com.
- 102 IN PTR mail.kingshuo.com.
- 101 IN PTR www.kingshuo.com.
- 101 IN PTR admin.kingshuo.com.
#vim kingshuo.zone.exter
- $TTL 86400
- $ORIGIN kingshuo.com.
- @ 600 IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- IN MX 10 mail.kingshuo.com.
- ns1 IN A 172.16.0.101
- ns2 IN A 172.16.0.102
- mail IN A 172.16.0.100
- www IN A 172.16.0.100
#vim 172.16.zone.exter
- $TTL 86400
- @ IN SOA ns1.kingshuo.com. admin.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.kingshuo.com.
- IN NS ns2.kingshuo.com.
- 101 IN PTR ns1.kingshuo.com.
- 102 IN PTR ns2.kingshuo.com.
- 100 IN PTR mail.kingshuo.com.
- 100 IN PTR www.kingshuo.com.
###################辅助名称服务器的配置####################
编辑/etc/named.conf文件:
#vim /etc/named.conf
- options {
- directory "/var/named";
- };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "kingshuo.com" IN {
- type slave;
- file "slaves/kingshuo.zone";
- masters { 192.168.0.101; };
- allow-transfer { none; };
- };
- zone "0.168.192.in-addr.arpa" IN {
- type slave;
- file "slaves/192.168.zone";
- masters { 192.168.0.101; };
- allow-transfer { none; };
- };
- zone "tech.kingshuo.com" IN {
- type master;
- file "tech.kingshuo.zone";
- };
编辑named.ca,named.local,localhost.zone文件如上。
编辑子域:
#vim tech.kingshuo.zone
- $TTL 86400
- $ORIGIN tech.kingshuo.com.
- @ 600 IN SOA ns1.tech.kingshuo.com. admin.tech.kingshuo.com. (
- 2011081801
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.tech.kingshuo.com.
- IN NS ns2.tech.kingshuo.com.
- IN MX 10 mail.tech.kingshuo.com.
- ns1 IN A 192.168.0.102
- ns2 IN A 192.168.0.101
- mail IN A 192.168.0.102
- www IN A 192.168.0.101
配置停当,您这里就可以重启DNS服务器进行相关的测试了。