dns和bind(第18天)

DNS: Domain Name Service,协议(C/S, 53/udp, 53/tcp);应用层协议;
BIND:Bekerley Internat Name Domain, ISC (www.isc.org)

TCP: 面向连接的协议;
UDP: User Datagram Protocol,用户数据报协议,无连接协议

计算机真正通信靠的是ip地址,但是ip地址不易于记忆,所以就使用主机名称来通信,比如你访问www.google.com,这样你的计算机就可以和google的服务器通信,但是这其中必须有一步将www.google.com转化为ip地址的过程,这个过程就被称为名称解析。

本地名称解析配置文件:/etc/hosts
windows的该文件位于:%WINDOWS%/system32/drivers/etc/hosts
例如:假设文件内容如下
1.1.1.1 www.magedu.com
1.2.2.2 www.apple.com
当你访问 www.apple.com域名的时候,会定向到1.2.2.2


DNS是树状结构的,根在顶层,用 "." 来表示,这个"."在配置bind的时候不能省略
如下图所示:

Top Level Domain: tld(顶级域)  有com, edu, mil, gov, net, org, int,这些位于根之下。
顶级域有3大类,分别是组织域(如上的com,edu,gov等就属于此类),国家域(.cn, .iq, .hk, .tw)、反向域

DNS原理:
比如某个A主机访问www.magedu.com的时候,首先询问根,根对域名从后往前找,找到com顶级域,A主机访问com顶级域,com发现A主机访问的是magedu,然后A主机就去询问magedu域,magedu域发现自己的域中有提供web服务的主机,所以就查找www.magedu.com对应的ip地址返回给A主机,所以A主机访问的www.magedu.com就找到相应的ip地址,之后,A主机对该ip地址发起请求。
上面的步骤中,A主机其实并不自己去询问根,而是A主机访问运营商提供的DNS服务器ip,然后该DNS服务器ip去做接下来的工作,所以,这个运营商提供的DNS服务器ip相当于一个代理,帮你递归查找真正的DNS服务器

"." 根记录了com,net,gov等顶级域的对应ip地址。com记录了ibm,google,facebook等域的对应的ip地址,以此类推。所以每个级别的域只负责自己本域内的解析。

DNS查询类型:
递归查询:客户端发出一次查询,就查找到域名对应的ip地址
迭代查询:客户端自己要多次发出查询才找到域名对应的ip地址
具体过程如下图所示:分别表示迭代和递归





名称服务器:域内负责解析本域内的名称的主机;
例如根服务器:有13组服务器
同样的,com也有自己的名称服务器,下一级比如magedu.com中,magedu也有自己的名称服务器。

问题:上图中的ns2.magedu.com和ns1.magedu.com是magedu域内配置的2台名称解析服务器。本域内的主机st2的dns就可以配置为运营商提供的dns服务器ip,也可以配置自己的ns2名称服务器的ip。当配置为后者时,如果从st2访问www.magedu.com的时候,ns2就直接解析出www.magedu.com对应的ip地址,不需要从根开始查找。那如果st2想访问mail.ibm.com的时候,并且假设st2配置的DNS服务器ip就是ns2,那么名称解析的过程是如何的??
答:首先ns2发现mail.ibm.com并不在自己负责的本域内,所以必须对根发起请求,根发送com域的地址给ns2,ns2对com域发起请求,com域发送ibm域的地址给ns2,ns2对ibm域发起请求,ibm域内的名称解析主机发现mail.ibm.com是自己负责解析,查找数据库中对应的mail.ibm.com的ip地址,并将该ip地址发送给ns2。ns2将该ip地址发送给st2主机。这就是整个过程。


解析类型有如下两种:
Name --> IP   域名到IP地址
IP --> Name   IP地址到域名
注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;


DNS服务器的类型有如下4种:
主DNS服务器
辅助DNS服务器(又称为从DNS服务器)
缓存DNS服务器:
转发器

主DNS服务器:维护所负责解析的域内解析库服务器(就是本机内的主机的主机名称和ip地址的对应关系);解析库由管理维护;
从DNS服务器:从主DNS服务器或其它的从DNS服务器那里“复制”(区域传递)一份解析库;
序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增;
刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔;
重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;
过期时长:从服务器始终联系不到主服务器时,多久之后放弃从服务器角色,停止提供服务;
"通知"机制:主服务器向从服务器主动发送通知


DNS是有缓存的

区域传送:
全量传送:传送整个解析库
增量传送:传递解析库变化的那部分内容


Domain:
正向:FQDN --> IP
反向: IP --> FQDN
正向和反向各需要一个解析库来分别负责本地域名的正向和反向解析
正向区域
反向区域

FQDN: Full Qualified Domain Name
比如  www.magedu.com.   最后的"."不能省略


一次完整的查询请求经过的流程如下:
Client --> hosts文件 --> DNS Service
                                Local Cache(本地客户端DNS缓存) --> DNS Server (recursion 递归) --> Server Cache(服务器端DNS缓存) --> iteration(迭代) -->

一次完整的查询请求经过的文字解析如下:
首先客户端访问某个域名的时候,比如www.google.com,先查看hosts文件中是否有www.google.com的条目,如果有的话,直接将www.google.com解析为www.google.com对应的ip地址。如果没有的话,就会查看本地客户端是否有缓存条目,如果有缓存条目直接取之,如果没有本地缓存条目的话,才会向DNS服务器ip(这个DNS服务器ip也就是计算机系统上配置的首选DNS服务器和备选DNS服务器)做DNS请求。如果首选DNS服务器支持为客户端做递归查询,则客户端直接坐等结果即可。如果不是的话,DNS服务器就会查询自己的DNS缓存,如果命中的话,从缓存取出对应的条目,如果缓存没有的话,那就客户端自己做迭代查询,向根查询。


解析答案:有2种
肯定答案:
否定答案:请求的条目不存在等原因导致无法返回结果;
权威答案:比如ns1.magedu.com解析www.magedu.com的ip地址,这种形式的
非权威答案:


区域解析库:由众多RR(Resource Record资源记录)组成:
记录的类型有如下的几种:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
A    internet Address,作用,FQDN --> IP
AAAA  表示FQDN --> IPv6
PTR     表示PoinTeR,IP --> FQDN
NS: Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX: Mail eXchanger,邮件交换器

资源记录定义的格式语法如下:
语法:name [TTL] IN rr_type value
注意:
(1) TTL可从全局继承;
(2) @可用于引用当前区域的名字;
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;


SOA的格式:
name: 当前区域的名字,例如“magedu.com.”,记住"."不能省略;
value: 有多部分组成,每部分的内容如下:
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;@可用于引用当前区域的名字
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com;
(3) (主从DNS服务器的协调属性的定义以及否定的答案的统一的TTL)
例如如下的例子:
magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. (
2015042201  ;序列号
2H          ;刷新时间,2小时
10M        ;重试时间,10分钟
1W ;过期时间,1星期
1D ;否定答案的TTL值,1天
)

NS的格式:专用于标明当前区域的DNS服务器
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记录;


MX类型的格式: 邮件交换器
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名;
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
例如:
magedu.com. IN   MX  10  mx1.magedu.com.
                        IN MX  20  mx2.magedu.com.    这条记录的name省略了
注意:
(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;


A类型的格式:FQDN --> IP
name: 某主机的FQDN,例如www.magedu.com.
value: 主机名对应主机的IP地址;
例如:
www.magedu.com. IN  A 1.1.1.1
www.magedu.com. IN  1.1.1.2

mx1.magedu.com.         IN    A   1.1.1.3
mx2.magedu.com.  IN    A   1.1.1.3

注意:
*.magedu.com. IN  1.1.1.4
magedu.com. IN    A   1.1.1.4
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;

AAAA类型的格式:FQDN-->IPv6
name: FQDN
value: IPv6

PTR类型的:表示PoinTeR,IP --> FQDN
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而且有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com
简写成:
IN  PTR www.magedu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写;

CNAME类型的格式:Canonical Name,别名记录
name: 别名的FQDN
value: 正式名字的FQDN;
例如:
web.magedu.com. IN  CNAME  www.magedu.com.



子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权;
比如你要注册magedu.com,你要到com域处注册  (不可自立山头)
类似根域授权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 3.3.3.1
ns2.magedu.com. IN 3.3.3.2
ns3.magedu.com. IN 3.3.3.3
如此一来,.com就知道其子域magedu.com. 的域名服务器,就可以对询问做出回答。
glue record:粘合记录,联合上下域


域名注册:
代理商:万网, 新网;godaddy,可以让代理商负责解析域名,当然也可以自己建设域名服务器来解析。
注册完成以后,想自己用专用服务来解析?
(1) 管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址;

BIND的安装配置:
bind软件包可以提供dns服务,程序包名bind,进程名named


BING的主要程序包:
bind   主程序包
bind-libs   类库
bind-utils  工具
bind-chroot:  把bind圈进/var/named/chroot/目录里


bind相关脚本和文件:
服务脚本:/etc/rc.d/init.d/named
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
解析库文件:/var/named/ZONE_NAME.ZONE   默认是没有的,必须自己创建
注意:
(1) 一台物理服务器可同时为多个区域提供解析;
(2) 必须要有根区域文件;/var/named/named.ca(这个ca不是之前课程的ca证书,和那个没有关系),因为有时候该dns服务器需要做迭代,就要向根询问,一般rpm包里面会提供该文件。
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;这两个文件分别是/var/named/named.localhost和/var/named/named.loopback

rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;监听在953/tcp



rpm -ql bind   可以查看bing软件包及其文件:
其中/var/named/named.ca文件存储有根的名称服务器及其对应的ip地址


主配置文件:/etc/named.conf分段详解:
全局配置:options {}
日志子系统配置:logging {}
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;在配置文件里可以定义多个zone,区域是有类型的,比如主DNS就是主区域,从DNS就是从区域,一般每个区域都有一个解析库文件。
zone "ZONE_NAME" IN {}

注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上;


缓存名称服务器的配置:
监听外部地址即可;


dns dnssec机制:  数字签名,防止DNS被污染
建议测试时关闭dnssec;关闭的时候,注释掉/etc/named.conf文件中options段中的如下的内容即可:
dnssec-enable yes;
dnssec-validation yes;

/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";


主DNS名称服务器的配置:
(1) 在主配置文件中定义区域:其实就是添加zone
zone "ZONE_NAME" IN {
    type {master|slave|hint|forward}; //master,slave表示主从,hint表示根区域
    file "ZONE_NAME.zone";
};
(2) 定义区域解析库文件ZONE_NAME.zone
文件中出现的内容包括如下:
宏定义;
资源记录;
举个栗子:
     $TTL         86400
$ORIGIN   magedu.com.
@ IN SOA ns1.magedu.com. admin.magedu.com    (
2015042201
1H
5M
7D
1D )
IN NS ns1
IN NS ns2
IN MX    10 mx1
IN MX    20 mx2
ns1 IN A 172.16.100.11
ns2 IN A 172.16.100.12
mx1 IN A 172.16.100.13
mx2 IN A 172.16.100.14
www IN A 172.16.100.11
www IN A 172.16.100.12
ftp IN CNAME www

named-checkconf     检查主配置文件的语法错误
named-checkzone "magedu.com"  /var/named/magedu.com.zone  检查区域的解析库文件的语法错误

安全建议:对于ZONE_NAME.zone文件,
改变其属性为 chmod 640 /var/named./ZONE_NAME.zone
一般要通过chown :named /var/named/ZONE_NAME.zone  改变其属组为named;

rndc status可以查看dns服务器统计信息。

测试命令:dig的使用
dig  [-t type]  name  [@DNS_SERVER]  [query options]
-t表示类型,比如A,NS,MX等等
name表示要被解析的域名,比如www.magedu.com
@后面跟上DNS服务器的ip地址,表示指定让该DNS服务器去解析
dig用于测试dns系统,因此,不会查询hosts文件进行解析;

查询选项  query options:
+[no]trace:跟踪解析过程 (客户端自己去迭代)      dig -t A baidu.com +trace
+[no]recurse:进行递归解析   dig -t A baidu.com +recurse

测试反向解析:
dig -x IP @SERVER

模拟区域传送:
dig -t axfr ZONE_NAME @DNS_SERVER
例如:dig -t axfr magedu.com @172.16.100.11   全量区域传送


host命令:
host [-t type] name [SERVER]


nslookup命令:
 nslookup [-option] [name | -] [server]

交互式模式的具体用法如下:
nslookup>
server IP: 指明使用哪个DNS server进行查询;
set q=RR_TYPE: 指明查询的资源记录类型;
NAME: 要查询的名称;



反向区域和反向解析:
反向区域名称:反向区域名称的写法为网络地址反写后面跟上.in-addr.arpa.
比如网络地址为 172.16.100. --> 则写法就是 100.16.172.in-addr.arpa.

(1) 在主配置文件中定义区域
zone "ZONE_NAME" IN {      //ZONE_NAME 表示反向区域名称
type {master|slave|forward};
file "网络地址.zone"
};

(2) 区域解析库文件
注意:不需要MX和A,以及AAAA记录;以PTR记录为主和NS记录;
示例:
$TTL          86400
$ORIGIN   100.16.172.in-addr.arpa.
@ IN SOA ns1.magedu.com. admin.magedu.com.   (
2015042201
1H
5M
7D
1D )
IN NS ns1.magedu.com.  //反向也需要和正向相同的NS记录
      IN NS ns2.magedu.com.  //反向也需要和正向相同的NS记录
11 IN PTR ns1.magedu.com.  //11表示11.100.16.172.in-addr.arpa.
11 IN PTR www.magedu.com.
12 IN PTR mx1.magedu.com.
12 IN PTR www.magedu.com.
13 IN PTR mx2.magedu.com.


主从复制:
1、从服务器应该为一台独立的名称服务器;
2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器的;
3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
4、主服务器得允许从服务器作区域传送;
5、主从服务器时间应该同步,可通过ntp进行;
6、bind程序的版本应该保持一致;否则,应该从高,主低;

定义从服务器的区域的方法:在主配置文件中加入区域
zone "ZONE_NAME" IN {
      type slave;
      masters { MASTER_IP; };  //主服务器是谁
      file "slaves/ZONE_NAME.zone";
};

rndc reload 重新加载配置文件,使其生效

配置完成之后,tail /var/log/message查看日志信息判断是否有自动同步。

rndc:
bind运行起来之后,除了会监听53端口之外,还会监听953端口
rndc客户端连接 --> rndc (953/tcp)服务器端<-->dns(53/tcp)

rndc COMMAND
COMMAND有如下几种:
reload: 重载主配置文件和区域解析库文件
reload zone: 重载区域解析库文件
retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;
notify zone: 重新对区域传送发通知;
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志;
trace: 递增debug级别;
trace LEVEL: 指定使用的级别;

博客作业:dns基本工作原理,及正反向解析主从同步

























评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用