DNS服务器——如何解析公司域名

DNS and Bind


·Sockets:

         C/S

                 Client:发起应用请求的程序

                 Server:响应请求(提供服务)的程序

                     LISTEN:Socket

        

         传输层协议:TCP ,UDP ,SCTP

                 TCP:Transmission Control Protocol

                     面向连接的协议:双方通信之前需要事先建立虚连接

                 UDP:User Datagram Protocol

                     无连接的服务:双方无须通信之前建立虚连接

DNS:Domain Name Service ,应用层协议


·C/S

         53/udp ,53/tcp

         udp53号端口是用来查询,tcp53号端口是用来主从复制的

·www.magedu.com :FQDN ( Full Qualified Domain Name )

·tld :Top Level Domain

         组织域:.com ,.net ,.org ,.gov ,.edu ,.mil ,.int

         国家域:.iq ,.tw ,.hk ,.jp ,.cn

·DNS查询类型:

         递归查询:

             DNS服务器与DNS服务器之间

         迭代查询:

             主机到DNS服务器之间

·DNS名称解析方式:

         名称 –> IP:正向解析

         IP –> 名称:反向解析

        

         注意:二者的名称空间,非为同一个空间,即非为同一颗树;因此,也不是同一个解析库

·域:magedu.com

         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

·DNS服务器类型:

         负责解析至少一个域

                 主名称服务器

                 辅助名称服务器

         不负责域解析:

             缓存名称服务器

·一次完整的查询请求经过的流程:

         Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –>  Server Cache –> iteration(迭代) –> 根 –> 顶级域名DNS –> 二级域名DNS …..

                 自己负责解析的域:直接查询数据库并返回答案

                 不是自己负责解析的域:Server Cache –> iteration (迭代)

         解析答案:

                 肯定答案:

                 否定答案:不存在查询的键,因此,不存在与其查询键对应的值

                

                 权威答案: 由直接负责的DNS服务器返回的答案

                 非权威答案:

·主-辅DNS服务器:

         主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行

         从DNS服务器:从主DNS服务器那里或其他的从DNS服务器那里“复制”一份解析库;但只能进行读操作;

                 “复制”操作的实施方式:

                         序列号:serial,也即是数据库的版本号;主服务器数据库内容发生变化时,其版本号递增

                         刷新时间间隔:refresh,从服务器每多久到主服务器查询序列号更新状况

                         重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔

                         过期时间:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务

                         否定答案的缓存时长:返回答案错误时,此错误答案在本地DNS缓存的时间

                

                 主服务器“通知”从服务器随时更新数据

                

                 区域传送:

                         全量传送:axfr,传送整个数据库

                         增量传送:lxfr,仅传送变化的<新增的>数据

·区域(zone)和域(domain):

         magedu.com域

                 FQDN –> IP

                     正向解析库

                 IP –> FQDN

                     反向解析库

        

         注意:区域并不一定就比域要小

·区域数据库文件:

         资源记录: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

·SOA:

         name:当前区域的区域名称;例如“magedu.com.”,或者“2.3.4.in-addr.arpa.”

         value:由多部分组成

                 (1)当前区域的区域名称(也可以使用主DNS服务器名称)

                 (2)当前区域管理员的邮箱地址;但地址红不能使用@符号,一般使用点来替代

                 (3)(主从服务器协调属性的定义以及否定答案的TTL)

        

         例如:

                gm.com. 86400 IN SOA gm.com admin.gm.com (

                                 2017010801 ;serial

                                 2H   ;refresh

                                 10M   ;retry

                                 1W   ;erpire

                                 1D ;negative answer ttl

                 )

·NS:

         name:当前区域的区域名称

         value:当前区域的某DNS服务器名称,例如:ns.magedu.com.

              注意:一个区域可以有多个ns记录

        

         例如:

                gm.com. 86400 IN NS ns1.gm.com.

                gm.com. 86400 IN NS ns2.gm.com.

·MX:

         name:当前区域的区域名称

         value:当前区域某邮件交换器的主机名

             注意:MX记录可以有多个,但是每个记录的value之前应该有一个数字表示其优先级

        

         例如:

                gm.com. IN MX 10 mx1.gm.com.

                gm.com. IN MX 20 mx2.gm.com.

·A:

         name:某FQDN,例如:www.magedu.com.

         value:某IPv4地址

        

         例如:

                 www.gm.com. IN A 1.1.1.1

                 www.gm.com. IN A 1.1.1.2

                 bbs.gm.com. IN A 1.1.1.1

·AAAA:

         name:FQDN

         value:IPv6

·PTR:

         name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如:1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.

         value:FQDN

        

         例如:

             4.3.2.1.in-appr.arpa. IN PTR www.magedu.com.

·CNAME:

         name:FQDN格式的别名

         value:FQDN格式的正式名字

        

         例如:

             web.gm.com. IN CNAME www.gm.com.

·注意:

(1)TTL可以从全局继承

(2)@表示当前区域的名称

(3)相邻的两条记录其name相同时,后面的可省略

(4)MS,NS等类型的记录的value为一个FQDN,此FQDN应该有一个对应的A记录

BIND的安装配置:


·BIND:Berkeley Internet Name Domain,ISC.org

         dns:协议

         bind:dns协议的一种实现

         named:bind程序的运行的进程名

·程序包:

         bind-libs:被bind和bind-utils包总的程序共同用到的库文件

         bind-utils:bind客户端程序集,例如:dig,host,nslookup等命令

        

         bind:提供了dns server程序、以及几个常用的测试程序

         bind-chroot:选装,让named运行于jail模式下

bind:


·主配置文件:/etc/named.conf

        或包含进来其他文件

                /etc/named.iscdlv.key

                /etc/named.rfc1912.zones

                /etc/named.root.key

                                        

                可以使用include包含进其他文件

·解析库文件:

         /var/named/目录下:<也是bind工作目录>

             一般名字为:ZONE_NAME.zone

        

         注意:

                 (1)一台DNS服务器可同时为多个区域提供解析

                 (2)必须要有跟区域解析库文件:named.ca

                 (3)还必须有两个区域解析库文件:localhost和127.0.0.1的正反向解析库

                         正向:named.localhost

                         反向:named.loopback

·rndc:remote name domain contoller

    953/tcp,但默认监听于127.0.0.1地址,因此仅允许本地使用

·bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务

         CentOS 6:service named start

         CentOS 7:systemctl start named.service

·主配置文件格式:

         全局配置段:

             options {…};

         日志配置段:

             logging {…};

         区域配置段:

                 zone {…};

                     那些由本机负责解析的区域,或转发的区域

                

                 注意:每个配置语句必须以分号结尾

        

         缓存名称服务器的配置:

                 监听能于外部主机通信额地址:

                         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; };

                

                 允许某机器进行区域传送<应设置为只对从服务器进行区域传送>

                     allow-transfer { IP; }

·检查配置文件语法错误:

    named-checkconf [/etc/named.conf]

·检查配置区域文件语法错误:

    named-checkzone ZONE_NAME /var/named/ZONE_NAME.zone

·测试工具

        dig,host,nslookup等

                        

        dig命令:

                dig [-t RR_TYPE] name [@server] [query options]

                                        

                用于测试dns系统,因此其不会查询hosts文件

                                        

                查询选项:

                        +[no]trace:跟踪解析过程

                        +[no]recurse:进行递归解析

                                        

                注意:反向解析测试

                    dig -x IP

                                        

                模拟完全区域传送:

                    dig -t axfr DOMAIN [@server]

                        

        host命令:

            host [-t RR_TYPE] name SERVER_IP

                        

        nslookup命令:

                nslookup [-options] [name] [server]

                                        

                交互式模式:

                    nslookup>

                            server IP :以指定的IP为DNS服务器进行查询

                            set q=RR_TYPE :要查询的资源记录类型

                            name :要查询的名称

·配置解析一个正向区域:

以gm.com域为例:

(1)定义区域

         在主配置文件中或主配置文件辅助配置文件中实现

         zone "ZONE_NAME" IN {

                 type {master|slave|hint|forward};

                 file "ZONE_NAME.zone"

         };

        

         注意:区域名字即为域名

(2)建立区域数据文件<主要记录为A或AAAA记录>

         在/var/named目录下建立区域数据文件

        

         文件为:/var/named/gm.com.zone

                 $TTL 3600

                 $ORIGIN magedu.com.

                 @ IN SOA ns1.gm.com. admin.gm.com. (

                                     2017092301

                                     1H

                                     10M

                                     3D

                                     1D )

                         IN NS ns1

                         IN MX 10 mx1

                         IN MX 20 mx2

                 ns1 IN  A 10.1.143.2

                 mx1 IN  A 10.1.143.2

                 mx2 IN  A 10.1.143.2

                 www IN  A 10.1.143.2

                 web IN  CNAME www

                 bbs IN  A 10.1.143.3

                 bbs IN  A 10.1.143.4

        

         权限及属组修改:

                 # chgrp named /var/named/gm.com.zone

                 # chmod o= /var/named/gm.com.zone

        

         检测语法错误:

                 # named-checkconf [/etc/named/named.conf]

                 # named-checkzone ZONE_NAME ZONE_NAME_FILE

(3)让服务器重载配置文件和区域数据文件

         # rndc reload 或

         # systemctl reload named.service

·配置解析一个反向区域:

(1)定义区域

         在主配置文件中或主配置文件辅助配置文件中实现

         zone "ZONE_NAME" IN {

                 type {master|slave|hint|forword};

                 file "ZONE_NAME.zone"

         };

         注意:

                 区域名

                 反向区域的名字

                 反写的网段地址.in-addr.arpa

                 143.1.10.in-addr.arpa

(2)建立区域数据文件<主要记录为PTR>

         在/var/named目录下建立区域数据文件

         注意:在反向解析区域数据文件中,不能有MX的记录

        

         文件为:/var/named/10.1.143.zone

                 $TTL 3600

                 $ORIGIN 143.1.10.in-addr.arpa.

                 @ IN SOA ns1.gm.com. admin.gm.com. (

                                 2016092301

                                 1H

                                 10M

                                 3D

                                 1D )

                         IN NS ns1

                 2 IN  A ns1.gm.com.

                 2 IN  A mx1.gm.com.

                 2 IN  A mx2.gm.com.

                 3 IN  A bbs.gm.com.

                 4 IN  A bbs.gm.com.

                 2 IN  A www.gm.com.

        

         权限及属组修改:

                 # chgrp named /var/named/10.1.143.zone

                 # chmod o= /var/named/10.1.143.zone

        

         检测语法错误:

                 # named-checkconf [/etc/named/named.conf]

                 # named-checkzone ZONE_NAME ZONE_NAME_FILE

(3)让服务器重载配置文件和区域数据文件

         # rndc reload 或

         # systemctl reload named.service

·主从服务器:

注意:从服务器是区域级别的概念

1、应该为一台独立的名称服务器

2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器

3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中

4、主服务器得允许从服务器作区域传送

5、主从服务器时间应该同步,可通过ntp进行:ntpdate命令

6、bind 程序的版本应该保持一致;否则,应该从高,主低

配置一个从区域

On Slave

         (1)定义区域

                 定义一个从区域:

                 zone "ZONE_NAME" IN {

                         type slave;

                         file "slaves/ZONE_NAME.zone";

                         masters { MASTER_IP };

                 };

                

                 配置文件语法错误检测:named-checkconf

        

         (2)重载配置文件

                 # rndc reload

                 # systemctl reload named.service

On Master<每次修改了主服务器后,序列号要加1,从服务器才能同步数据>

         (1)在主服务器上的正向区域解析文件中追加2条记录

                 从服务器的NS记录:

                 magedu.com. IN NS ns2.magedu.com.

                 从服务器NS记录的A记录

                 ns2 IN A SLAVE_IP<从服务器的IP>

·rndc命令:named服务器控制命令

         rndc –> rndc (953/tcp)

         rndc COMMAND

        

         COMMAND:

                 reload:重载主配置文件和区域解析库文件

                 reload zone:重载区域解析库文件

                 retransfer zone:手动启动区域传送过程,而不管序列号是否增加

                 notify zone:重新对区域传送发通知

                 reconfig:重载主配置文件

                 querylog:开启或关闭查询日志文件/var/log/message

                 trace:递增debug 一个级别

                 trace LEVEL:指定使用的级别

                 notrace:为将调试级别设置为 0

                 flush:清空DNS服务器的所有缓存记录

·子域授权:

         注意:关闭dnssec功能:

                 dnssec-enable no;

                 dnssec-validation no;

        

         正向解析区域授权子域的方法:<添加在正向区域解析文件中的数据>

                 ops.gm.com. IN NS ns1.ops.gm.com.

                 ops.gm.com. IN NS ns2.ops.gm.com.

                 ns1.ops.gm.com. IN NS IP.AD.DR.ESS

                 ns2.ops.gm.com. IN NS IP.AD.DR.ESS

        

         在子域服务器上在配置/etc/named.conf文件和/var/named/目录下的区域文件,格式大致同主服务器

             提醒:此时的子域的域名是ops.gm.com

·转发服务器:

         注意:关闭dnssec功能:

                 dnssec-enable no;

                 dnssec-validation no;

        

         定义转发:

                 注意:被转发的服务器必须允许为当前服务做递归,否则转发请求不予进行

                

                 (1)区域转发:仅转发对某些特定区域的解析请求

                         zone "ZONE_NAME" IN {

                                 type forward;

                                 forward {first|only};

                                 forwarders { SERVER_IP; };

                         }

                        

                         first:首先转发;转发器不响应时,自行去迭代查询

                         only:只转发;转发器不响应时,就放弃查询

                

                 (2)全局查询:针对凡本地没有通过zone定义的区域查询请求,通通转发给某转发器

                         options {

                                 …..

                                 forward {first|only};

                                 forwarders { SERVER_IP; };

                                 …..

                         };

·bind中的安全相关的配置:

         acl:访问控制列表;把一个或多个地址归并成一个命名的集合,随后通过此名称即可对此集合内所有的主机实现统一调用

        

                 acl acl_name{

                         ip;

                         net/prelen;

                 };

                

                 示例:

                 acl mynet {

                         172.16.0.0/16;

                         127.0.0.0/8;

                 };

                

                 bind中有四个内置的acl:

                         none:没有一个主机

                         any:任意主机

                         local:本机

                         localnet:本机所在的IP所属的网络

        

         注意:只能先定义,后使用 ;因此一般 定义在 配置文件中,处于options的前面

        

         访问控制指令:

                 allow-query {}; 允许查询的主机;白名单

                 allow-transfer {}; 允许向那些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器可以传送

                 allow-recursion {}; 允许那些主机向当前DNS服务器发起递归查询请求

                 allow-update {}; DDNS,运行动态更新区域数据库文件中内容

·bind view:<视图>

         一个bind服务器可定义多个view,每个view中可定义一个或多个zone

         每个view用来匹配一组客户端

         多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

        

         view VIEW_NAME {

                 match-clients { };

                 zone …

                 zone …

                 ….

         };

        

         例如:

                 view internal {

                         match-clients { 172.16.0.0/8; };

                         zone "gm.com" IN {

                                 type "master";

                                 file "gm.com/internal.zone";

                         };

                 };

                

                 view external {

                         match-clients { any; };

                         zone "gm.com" IN {

                                 type "master";

                                 file "gm.com/external.zone";

                         };

                 };

                

         注意:

                 (1)一旦启用了view,所有的zone都只能定义在view中

                 (2)仅在允许递归请求的客户端所在view中定义根区域

                 (3)客户端请求到达时,是自上而下检查每个view所服务的客户端列表

原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/49107