DNS服务详解

本文主要介绍:名字解析、DNS服务、实现主从服务器、实现子域、实现view、编译安装、压力测试、DNS排错

DNS服务原理详解

DNS:Domain Name Service 域名解析服务

 因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析

我们在访问一个网站的时候,只要输入该网站的网址就会跳转到该网站页面,而实现这一过程就需要DNS服务器将域名解析为IP地址,进而实现数据通信。

监听端口:  udp/53,tcp/53

应用程序:  BIND        (Bekerley Internat Name Domain 国际域名)

 

 

一、DNS域名

根域

一级域名:Top Level Domain:      com, edu, mil, gov, net, org, int,arpa

组织域:.com, .org, .net, .mil, .edu, .gov, .info, .cc, .me, .tv

国家域:.cn, .us, .uk, .jp, .tw, .hk, .iq, .ir

反向域:.in-addr.arpa

最多127级域名

ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理

 

DNS域名结构

20170603030441_49954

 

二、DNS查询类型:

递归查询     客户端向小区DNS服务器查询,负责到底,返回总结果

迭代查询     根域  -> 二级域  -> 三级域… 一级一级的反馈,负责部分,返回部分结果   

名称服务器:域内负责解析本域内的名称的主机

根服务器:13组服务器    10在美国,主根在美国

解析类型:

FQDN –> IP          FQDN完整主机名

IP –> FQDN

注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

 

补充:上级DNS服务器有下级的DNS服务器地址,下级没有上级的地址;

新增ipv6 25组DNS服务器,中国有1主3辅。

 

 

三、DNS服务器类型:

主DNS服务器

从DNS服务器      多个  容错能力

缓存DNS服务器(转发器)

 

主DNS服务器:管理和维护所负责解析的域内解析库的服务器

从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本

序列号:解析库版本号,主服务器解析库变化时,其序列递增

刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔

重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔

过期时长:从服务器联系不到主服务器时,多久后停止服务

否定答案的缓存时长

“通知”机制:主服务器解析库发生变化时,会主动通知从服务器

 

区域传输:

完全传输:传送整个解析库

增量传输:传递解析库变化的那部分内容

Domain: Fully Qualified Domain Name

正向:FQDN –> IP

反向: IP –> FQDN

负责本地域名的正向和反向解析库

正向区域

反向区域

 

四、DNS解析

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

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

解析答案:

肯定答案:

否定答案:请求的条目不存在等原因导致无法返回结果

权威答案:aa    表示是自身知道的结果,不是问来的,如下图

非权威答案:

d1

 

五、资源记录

区域解析库:由众多RR组成:

资源记录:Resource Record, RR

记录类型:SOA, A, AAAA, PTR, NS, CNAME, MX…

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

A:internet Address,作用,FQDN –> IPv4

AAAA: FQDN –> IPv6

PTR: PoinTeR,IP –> FQDN

NS: Name Server,专用于标明当前区域的DNS服务器,(包括总数,主,从)

CNAME:Canonical Name,别名记录  大部分网站www都是别名

MX: Mail eXchanger,邮件交换器

 

资源记录

资源记录定义的格式:

语法:name  [TTL]  IN    rr_type(上述几种资源记录)    value(有多个)

注意:

(1) TTL可从全局继承,默认秒单位 没有明确声明TTL时默认用公用

(2) @可用于引用当前区域的名字   例magedu.com

(3) 同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应   可以分流,均衡负载

(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

图片1

 

SOA记录

name: 当前区域的名字,例如“magedu.com.”注意:最后有点

value: 有多部分组成

(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;名字随便写,跟下文对应即可

(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.magedu.com

(3) 主从服务区域传输相关定义以及否定的答案的统一的TTL

 

序列号:解析库版本号,主服务器解析库变化时,其序列递增 手动更改

刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔

重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔

过期时长:从服务器联系不到主服务器时,多久后停止服务

“通知”机制:主服务器解析库发生变化时,会主动通知从服务器

 

例如:

magedu.com. 86400 IN SOA  ns.magedu.com.  nsadmin.magedu.com.

(

2015042201 ;序列号(大小有限,手动更改后从DNS服务器才会识别,更新改变)

2H ;刷新时间

10M ;重试时间

1W ;过期时间

1D ;否定答案的TTL值

)

 图片2

注:下一行的记录可以继承上一行的记录

rndc reload 重新读取配置文件

 

NS记录

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.

注意:

(1) 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

图片3

dig -t mx magedu.com 查询指定域的邮件服务器。。然后可以冒充发邮件。。。

 

 

 

A记录

name: 某主机的FQDN,例如www.magedu.com.

value: 主机名对应主机的IP地址

例如:

www.magedu.com.       IN   A   1.1.1.1

www.magedu.com.       IN   A   2.2.2.2

mx1.magedu.com.        IN   A   3.3.3.3  邮件服务器的声明

magedu.com.             IN  A   6.6.6.6

 

$GENERATE 1-254 HOST$       A    1.2.3.$

表示从host1 对应1.2.3.1一直到 host254 对应 1.2.3.254

 

*.magedu.com.           IN   A   5.5.5.5

避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

 

 

其它记录

AAAA:

name: FQDN

value: IPv6

PTR:

name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.

value: FQDN

例如:

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

如1.2.3为网络地址,可简写成:

4  IN  PTR   www.magedu.com.

注意:网络地址及后缀可省略;主机地址依然需要反着写

 

别名记录

CNAME:

name: 别名的FQDN

value: 真正名字的FQDN

例如:

www.magedu.com.   IN   CNAME   websrv.magedu.com.

 

 

六、子域

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权

类似根域授权tld:

.com.      IN    NS   ns1.com.

ns1.com.   IN    A    2.2.2.1

magedu.com. 在.com的名称服务器上,解析库中添加资源记录

@             IN  NS  ns1.magedu.com.

ns1              A  3.3.3.1

glue record:粘合记录,父域授权子域的记录

 

七、互联网域名

域名注册:

代理商:万网, 新网, godaddy

注册完成以后,想自己用专用服务来解析

管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址

 

 

八、BIND安装

BIND的安装配置:

dns服务程序包:bind,unbound

程序名:named,unbound

程序包:yum list all bind*

bind:服务器

bind-libs:相关库

bind-utils:客户端

bind-chroot: /var/named/chroot/

 

bind服务器

服务的脚本和名称:

/etc/rc.d/init.d/named   /usr/lib/systemd/system/named.service

主配置文件:修改前先备份,注意:cp -a 保留所有属性!!!

/etc/named.conf, /etc/named.rfc1912.zones,请求注解,每个互联网的技术文档都有国际标准 /etc/rndc.key

解析库文件:

/var/named/ZONE_NAME.ZONE

注意:

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

(2) 必须要有根区域文件; /var/named/name.ca

(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库

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

 

补充:配置文件中                   或

            /*   开始                  /*   一行注释      */

          多行注释

            */   结束

 

 

配置文件

主配置文件:

全局配置:options {};

日志子系统配置:logging {};

区域定义:本机能够为哪些zone进行解析,就要定义哪些zone

zone “ZONE_NAME” IN {};

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

缓存名称服务器的配置:

监听外部地址即可

dnssec: 建议关闭dnssec,设为no

 

第一行和最后一行要修改: 或者直接用//注释掉

图片4

 

九、配置主DNS服务器

主DNS名称服务器:

在主配置文件中定义区域

                    (建议放/etc/named.rfc1912.zones文件,专门放区域设置的文件)

zone “ZONE_NAME” IN {

type {master|slave|hint|forward};

file “ZONE_NAME.zone”;

};

图片5

(2) 定义区域解析库文件      /var/named/ZONE_NAME.ZONE

出现的内容                                    有例子named.localhost 复制修改

宏定义

资源记录

主配置文件语法检查:

named-checkconf

解析库文件语法检查:

named-checkzone “magedu.com” /var/named/magedu.com.zone

 

rndc status|reload ;service named reload   重新读取配置文件

 

主区域示例

$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

websrv        IN                          A                         172.16.100.11

websrv        IN                          A                         172.16.100.12

www            IN                          CNAME                      websrv

 

图片6

 

十、测试命令

测试命令dig

 dig [-t type] name [@SERVER] [query options]

dig只用于测试dns系统,不会查询hosts文件进行解析

查询选项:

+[no]trace:跟踪解析过程 : dig +trace magedu.com

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

测试反向解析:

dig -x IP = dig –t ptr reverseip.in-addr.arpa

模拟区域传送:

dig -t axfr ZONE_NAME @SERVER

dig -t axfr magedu.com @10.10.10.11

dig -t axfr 100.1.10.in-addr.arpa @172.16.1.1

dig -t NS . @114.114.114.114

dig -t NS . @a.root-servers.net

 图片7

 

测试命令  host

host [-t type] name [SERVER]

host -t NS magedu.com 172.16.0.1

host -t soa magedu.com

host -t mx magedu.com

host -t axfr magedu.com

host 1.2.3.4

 

测试命令  nslookup

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.     arpa   互联网最早名称

(1) 定义区域

zone “ZONE_NAME” IN {

type {master|slave|forward};

file “网络地址.zone”

};

图片8

 

(2) 定义区域解析库文件

注意:不需要MX,以PTR记录为主

 

 

反向区域示例

$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.

IN  NS           ns2.magedu.com.

11        PTR           ns1.magedu.com.

11        PTR           www.magedu.com.

12       PTR           mx1.magedu.com.

12        PTR          www.magedu.com.

13       PTR           mx2.magedu.com.

 

十二、允许动态更新   

会自动更新SOA的序列号,方便从服务器同步

 

1、修改区域文件,指定的zone语句块中:Allow-update {any;};  any可以换成指定IP

2、chmod 770 /var/named

setsebool -P named_write_master_zones on

3、nsupdate

>server 127.0.0.1

>zone magedu.com

>update add ftp.magedu.com 88888 IN A 8.8.8.8

>send

>update delete www.magedu.com A

>send

 

测试:dig ftp.magedu.com @127.0.0.1

ll /var/named/magedu.com.zone.jnl  生成新文件,稍后同步到文件中去,不可读

命令可打开此文件,如下:

图片9

cat /var/named/magedu.com.zone

 

动态删除:如下

图片10

 

 

 

十三、从服务器

 

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命令

rndc:

rndc –> rndc (953/tcp)

 

rndc COMMAND

 COMMAND:

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

reload zonename     重载区域解析库文件

retransfer zonename  手动启动区域传送,而不管序列号是否增加

notify zonenam      重新对区域传送发通知

reconfig            重载主配置文件

querylog        开启或关闭查询日志文件/var/log/message,一般排错用

status              查看级别

trace               递增debug一个级别,越高越详细

trace LEVEL          指定使用的级别

notrace             将调试级别设置为 0

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

 

 

 

十五、子域

子域授权:分布式数据库

正向解析区域子域方法

定义一个子区域:

ops.magedu.com.           IN   NS   ns1.ops.magedu.com.

ns1.ops.magedu.com.    IN    A     1.1.1.1

fin.magedu.com.             IN   NS    ns1.fin.magedu.com.

ns1.fin.magedu.com.      IN    A     3.1.1.1

 

注意:在/etc/named.conf文件中 关闭dnssec功能:

dnssec-enable no;

dnssec-validation no;

 

 

补充:

子域

方法一:直接修改主服务器的资源记录

方法二:在主服务器上

1、更改区域配置文件

图片11

  • 建两个文件/var/named/NAME,修改A记录即可

 

方法三:子域授权:

 

 

 

十六、转发服务器

注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行

(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器

Options {

forward first|only;  先转到目标服务器,如果不通再去根 | 只去目标,不行就失败

forwarders { ip;};

};

图片12

(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

zone “ZONE_NAME” IN {

type forward;

forward first|only;

forwarders { ip;};

};

 

注意:在主配置文件中

关闭dnssec功能:

dnssec-enable no;

dnssec-validation no;

 

开启recursion功能:

 图片13

 

 

十七、bind中ACL

bind中基础的安全相关的配置:

acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用

格式:

acl acl_name {

ip;

net/prelen;

……

};

示例:

acl mynet {

172.16.0.0/16;

10.10.10.10;

};

 

bind有四个内置的acl:

none  没有一个主机

any    任意主机

localhost   本机

localnet   本机的IP同掩码运算后得到的网络地址

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

 

访问控制

访问控制的指令:

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

allow-transfer {}:允许区域传送的主机;白名单

allow-recursion {}: 允许递归的主机,建议全局使用

allow-update {}: 允许更新区域数据库中的内容

 

 

 

 

十八、智能DNS

  不同地区访问,DNS服务器会分配相应地区的地址

图片14

 

实现智能DNS

上海172.20、北京192.168两个访问 :

1、判断地区,网上有地区地址段

2、准备两份相应的区域数据库,

3、各地IP  分配  各地相应DNS解析

 

 

1、修改主配置文件

图片15

注意:匹配顺序:从上到下,点到即止

 

2、准备三个区域数据库

图片16

 

3、把主配置文件倒数第二块 移到 区域配置文件中,放首部块

 

4、在主配置文件尾部编辑view,两种语法,如下:

图片17

图片18

 

5、cp -a 区域配置文件 ,改内容如下

图片19

 

6、主配置文件语法检查:

named-checkconf

 

 

 

CDN内容分发网络

图片20

 

 

十九、bind view

CDN: Content Delivery Network内容分发网络

服务商:蓝汛,网宿,帝联等

智能DNS:

dnspod

dns.la

view:视图:实现智能DNS:

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

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

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

 

注意:

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

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

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

格式:

view VIEW_NAME {

match-clients { testacl; };

zone “magedu.com” {

type master;

file “magedu.com.zone”;

};

include “/etc/named.rfc1912.zones”;

};

 

二十、编译安装bind   了解

 

1、下载bind:

isc.org:

bind-9.10

bind-9.11

bind-10

 

 

tar xvf bind-9.11.0a3.tar.gz

cd bind-9.11.0a3/

groupadd -r -g 53 named

useradd -r -u 53 -g 53 named  如下:新建用户指定家目录

 图片21

./configure –prefix=/usr/local/bind9 –sysconfdir=/etc/named/ –without-openssl –disable-ipv6 –disable-chroot –enable-threads

make -j 4  &&  make install

 

2、环境变量:

vim /etc/profile.d/named.sh

export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin/:$PATH

 

3、库和头文件

vim /etc/ld.so.conf.d/named.conf

/usr/local/bind9/lib

ldconfig –v

ls -sv /usr/local/bind9/include /usr/include/named

 

4、man帮助

vim /etc/man.config | /etc/man_db.conf

MANPATH /usr/local/bind9/share/man

man named.conf

 

5、主配置文件

vim /etc/named/named.conf

options {

directory “/var/named/”

};

zone “.” IN {

type hint;

file “named.ca“;

};

zone “localhost” IN {

type master;

file “named.localhost”;

allow-update {none;};

};

zone “1.0.0.127.in-addr.arpa” IN {

type master;

file “named.loopback”;

allow-update {none;};

};

 

6、区域数据库

mkdir /var/named

named-checkconf

dig +norec @a.root-servers.net > /var/named/named.ca

vim /var/named/named.localhost

$TTL 1d

@                   IN     SOA      localhost. admin.localhost. ( 2016061801 1h 5m 7d 1d)

NS         localhost.

localhost.     IN      A           127.0.0.1

 

vim /var/named/named.loopback

$TTL 1d

@ IN SOA localhost. admin.localhost. ( 2016061801  1h  5m   7d  1d)

NS    @

A      127.0.0.1

PTR    localhost.

 

7、设置权限

chmod 640 /var/named/*

chmod 640 /etc/named/named.conf

chgrp -R named /var/named/

chgrp named /etc/named/named.conf

 

8、启动服务和测试

man named

named -u named -f -g -d 3 前端级别3方式运行

named -u named 后台运行

killall named

ss -tuln

tail /var/log/message

named -u named

 

9、支持rndc

rndc reload 观察错误提示

rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key

tail /etc/named/rndc.conf >> /etc/named/named.conf

killall -SIGHUP named     -1信号

rndc status

 

10、压力测试

/root/bind-xxx/contrib/scripts

编译压力测试工具

cd /root/bind-xxx/contrib/queryperf

./configure

make

cp queryperf /usr/local/bind9/bin

queryperf -h  查看帮助

 

vim test.txt   准备测试文件

www.magedu.com A

magedu.com NS

magedu.com MX

pop3.magedu.com A

web.magedu.com A

cat >>  test.txt <  test.txt 瞬间复制文件内容N遍,赶紧终止!

queryperf -d test.txt -s 127.0.0.1

 

11、打开日志功能

rndc querylog

rndc status

queryperf -d test.txt -s 127.0.0.1

wc -l /var/log/message

 

 

 

 

二十一、DNS排错

#dig A example.com

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523

SERVFAIL:The nameserver encountered a problem while processing the query.

可使用dig +trace排错,可能是网络和防火墙导致

NXDOMAIN:The queried name does not exist in the zone.

可能是CNAME对应的A记录不存在导致

REFUSED:The nameserver refused the client’s DNS request due to

policy restrictions.

可能是DNS策略导致

 

NOERROR不代表没有问题,也可以是过时的记录

查看是否为权威记录,flags:aa标记判断

被删除的记录仍能返回结果,可能是因为*记录存在

如:*.example.com. IN A 172.25.254.254

注意“.”的使用

避免CNAME指向CNAME记录,可能产生回环

test.example.com. IN CNAME lab.example.com.

lab.example.com. IN CNAME test.example.com.

正确配置PTR记录,许多服务依赖PTR,如sshd,MTA

正确配置轮询round-robin记录

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/100656

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code