频道栏目
首页 > 资讯 > 网络协议 > 正文

DNS初级域名解析与架构

17-08-22        来源:[db:作者]  
收藏   我要投稿

前言:DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

socket

C/S模式

Clients:发起应用请求的程序

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

服务器端的程序必须监听在一个socket上(Socket=IP+Port),且套接字必须在客户端和服务端都有

传输层协议:TCP , UDP , SCTP

TCP :transmission control protocol 面向连接的协议,双方在互相通信的时候,需要建立虚链路,虚连接

UDP:user datagram protocol 无连接的协议,双方在互相通信的时候,不需要建立虚链路,虚连接

DNS(domain name service)应用层协议

属于C/S模式

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

www.baidu.com: FQDN( full qualified damain name )

top level domain

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

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

DNS查询类型

递归查询:从客户机到本地设置的DNS服务器

迭代查询:从根服务器到各个子服务器

通常的DNS查询过程

(1)当用户在浏览器输入域名的时候,首先会在本地的hosts文件中查找,如果hosts文件中没有对应域名的IP地址,那么就会发起一个DNS协议的网络请求,对DNS根服务器的53号端口发起一个UDP请求,根服务器在解析浏览器发送的DNS请求之后,会查找本地的DNS数据库,在本地的数据库查找完毕之后会通过网络响应给客户端。那么,这个时候客户端就拿到了域名对应的IP地址,就可以访问服务器了。

(2)对于用户第一次输入一个域名的时候,先会查找本地的hosts文件,如果hosts文件没有找到,那么将会在本地的DNS缓存中查找,如果本地缓存中没有找到,那么就会去找DNS服务器了。那么当DNS服务器返回解析到的IP地址给用户的时候,将会先将域名对应的IP地址暂存至缓存

DNS的查询分类

递归查询和迭代查询的区别

(1)递归查询

递归查询是客户端面向本地的DNS服务器的一种查询方式,在该模式下运营商的DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。

(2)迭代查询

迭代查询是运营商的DNS 服务器代理用户的DNS请求,面向全球的DNS服务器进行的查询。当客户机发送查询请求时是递归查询,而运营商的DNS服务器会首先请求根DNS 服务器,而根DNS服务器并不直接回复查询结果,而是告诉运营商DNS服务器另一台DNS 服务器地址,运营商DNS服务器再向这台DNS 服务器提交请求,依次循环直到拿到查询的结果为止。

DNS解析

DNS名称解析方式

名称—>IP:正向解析

IP—>名称:反向解析

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

DNS服务器类型

负责解析至少一个域

主名称服务器

辅助名称服务器

不负责域解析:缓存名称服务器

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

Client--->hosts文件--->DNS Local Cache--->服务商的DNS server (recursion) ---> DNS服务器

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

不是自己负责的解析域:server cache —> iteration(迭代)

解析答案

肯定答案

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

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

非权威答案

DNS主服务器——辅助服务器

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

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

复制操作的实施方式

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

刷新时间间隔:refresh,从服务器每隔多久到主服务器检查更新情况

重试时间间隔:retry,从服务器从主服务器请求数据库失败,再次发起请求的时长

过期时长:expire,从服务器始终练习不到主服务器,多久之后放弃从主服务器同步数据库,停止提供服务

否定答案的缓存时长

主服务器通知从服务器更新数据

数据区域传送

全量传送(axfr):将整个数据库进行传送

增量传送(ixfr):仅仅传送变更的数据

区域(zone)和域(domain)

yhyblog.cn 域

FQDN--->IP

正向解析库 + 正向解析功能 == 正向解析区域

IP ---> FQDN

反向解析库 + 方向解析功能 == 方向解析区域

区域数据库文件

资源记录:resource record

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

例如:IP和域名的对应关系、IP和邮件地址的对应关系

SOA:start of authority 起始授权记录,一个区域解析库有且只能有一个SOA记录,必须放在第一条,表示授权一个解析区域

NS:name service 域名服务记录,一个区域解析库可以有多个NS记录,其中一个为主的。一个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(资源记录类型) 值

SOA记录详解

name : 当前区域的名字,例如 yhyblog.cn 或者2.3.4.in-addr.arpa

value:有多部分组成

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

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

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

yhyblog.cn 86400 IN SOA yhyblog.cn. admin.yhyblog.cn. (

2017082101 ;serial

2H ; refresh

10M; retry

1W ; expire

1D ; negative answer ttl

)

NS记录详解

name : 当前区域的区域名称

value:当前区域的某DNS服务器的名字,例如 ns.yhyblog.cn

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

yhyblog.cn. 86400 IN NS www.yhyblog.cn

yhyblog.cn. 86400 IN NS bbs.yhyblog.cn

MX记录

name:当前区域的区域名称

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

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

yhyblog.cn. IN MX 10 mx1.yhyblog.cn.

yhyblog.cn. IN MX 20 mx2.yhyblog.cn.

A记录

name:某FQDN, 例如:www.yhyblog.cn

value:某IPv4地址

www.yhyblog.cn IN A 1.1.1.1

www.yhyblog.cn IN A 1.1.1.2

bbs.yhyblog.cn IN A 1.1.1.1

AAAA记录

name:某FQDN, 例如:www.yhyblog.cn

value:某IPv6地址

PTR

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

value : FQND

4.3.2.1.in-addr.arpa. IN PTR www.yhyblog.cn

CNAME

name:别名, FQDN格式的别名

value:FQDN的正式名称

web.yhyblog.cn. IN CNAME www.yhyblog.cn

区域数据库书写格式的注意点

(1)TTL可以从全局继承

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

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

(4)对于正向区域来说,各XM , NS等类型的记录的value为FQDN , 此FQDN应该有一个A记录

解析库文件(非常重要)

/var/named/目录下

一般名字命名为:区域名称.zone

注意:

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

例如:可以为yhyblog.cn、uplooking.com、baidu.com等区域提供解析服务

(2)必须要有根区域解析库文件,告诉DNS服务器根节点服务器地址,named.ca

(3)还应该有两个区域解析库文件,localhost 和 127.0.0.1的正反向解析库

正向解析库叫:/var/named/named.localhost

反向解析库叫:/var/named/named.loopback

rndc:名称服务器的远程控制工具

默认工作在953/tcp , 监听于127.0.0.1地址,因此仅仅是本地使用

bind程序安装完成之后,默认即可作为缓存名称服务器使用,就像我们经常在指定114.114.114.114.114一样,如果没有专门负责解析的区域。可直接启动服务。但是先不启动,先修改配置文件

CentOS 6 : service named start

CentOS 7 : systemctl start named.service

bind的主配置文件(/etc/named.conf)格式详解

全局配置段

options{...}

日志配置段

logging{...}

区域配置段

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

注意:对于DNS主机来说,每一个配置语句必须以分号结尾

作为缓存名称服务器的配置,修改配置文件/etc/named.conf

监听能与外部主机通信的地址,删除127.0.0.1, 只保留listen-on port 53 { }; 如果想监听特定的主机,listen-on port 53 { 192.168.23.3; };

并且关闭 dnssec-enable no; dnssec-validation no; dnssec-lookaside no; 注释 allow-query { localhost; };

只要修改了配置文件,必须检查配置文件的语法错误

named-checkconf /etc/name.conf

启动服务

systemctl start named.service

DNS服务既监听TCP的53号端口用于传送,又监听UDP的53号端口用于解析

DNS缓存服务器的配置步骤

1:yum 安装bind

2:编辑主配置文件/etc/named.conf

3:修改全局配置段中

listen-on port 53 { 192.168.23.10; };

//allow-query { localhost; };

dnssec-enable no;

dnssec-validation no;

dnssec-lookaside no;

4:检查配置文件是否修改正确

named-checkconf /etc/named.conf

5:重启named程序

systemctl start named.service

6:开启另外一台主机,使用nmtui命令,设置其DNS为192.168.23.10,且重启网卡

7:再ping下百度,看看是否可以正常解析

配置解析一个正向区域

前提条件:(1)在互联网注册一个域名。(2)有一台互联网主机(云服务主机)(3)在域名服务注册的后台设置指向这台互联网主机

配置 正向区域的步骤,以yhyblog.cn域为例

(1)定义解析区域 ,一般定义在/etc/named.rfc1912.zones里面

例如:在/etc/named.rfc1912.zones中添加这几行

zone "yhyblog.cn" IN {

type master;

file "yhyblog.cn.zone"; (这里的yhyblog.cn.zone中的yhyblog.cn是在互联网上注册的域名)

};

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

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

区域数据文件的文件名为:/var/named/yhyblog.cn.zone

文件内容为:

$TL 3600

$ORIGIN yhyblog.cn. ; 这里会自动补全yhyblog.cn

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017082101

1H

10M

3D

1D ) ; SOA记录是授权一个yhyblog.cn解析域

IN NS ns1 ; NS记录是用来指定解析yhyblog.cn域,ns1为解析服务器的域名

IN MX 10 mx1 ; MX记录是用来指定解析yhyblog.cn域,ns1为解析服务器的邮件地址

IN MX 20 mx2

ns1 IN A 192.168.23.10 ;ns1域名也必须有一条A记录

mx1 IN A 192.168.23.10 ;xm1域名也必须有一条A记录

mx2 IN A 192.168.23.10 ;xm2域名也必须有一条A记录

www IN A 192.168.23.3

web IN CNAME www

bbs IN A 192.168.23.7

bbs IN A 192.168.23.8

修改yhyblog.cn.zone的权限和属组

chown .named /var/named/yhyblog.cn.zone

chmod o= /var/named/yhyblog.cn.zone

检查配置文件和区域解析库文件的语法错误

named-checkconf /etc/named.conf

named-checkconf /etc/named.rfc1912.zones

named-checkzoen yhyblog.cn /var/named/yhyblog.cn.zone

重启named服务让服务器重载配置文件和区域数据文件

rndc reload 或 systemctl reload named.service

使用dig命令测试当前配置的解析区域

dig -t A www.yhyblog.cn @192.168.23.10

配置一个正向解析区域的详细步骤(必须掌握)

1:定义解析区域, 编辑/etc/named.rfc1912.zones文件,添加

zone "yhyblog.cn" IN {

type master;

file "yhyblog.cn.zone";

};

2: 编辑/var/named/yhyblog.cn.zone,添加解析区域

$TTL 3600

; 这里会自动补全yhyblog.cn

$ORIGIN yhyblog.cn.

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017082101

1H

10M

3D

1D )

IN NS ns1

IN MX 10 mx1

IN MX 20 mx2

ns1 IN A 192.168.23.10

mx1 IN A 192.168.23.10

mx2 IN A 192.168.23.10

www IN A 192.168.23.3

web IN CNAME www

bbs IN A 192.168.23.7

bbs IN A 192.168.23.8

3:修改yhyblog.cn.zone的权限和属组

chown .named /var/named/yhyblog.cn.zone

chmod o= /var/named/yhyblog.cn.zone

4:检查配置文件和区域解析库文件的语法错误

named-checkconf /etc/named.conf

named-checkconf /etc/named.rfc1912.zones

named-checkzone yhyblog.cn /var/named/yhyblog.cn.zone

5:重启named服务让服务器重载配置文件和区域数据文件

systemctl reload named.service 或 rndc reload

6:使用dig命令测试当前配置的解析区域

dig -t A www.yhyblog.cn @192.168.23.10

7: 在其他的主机上,将DNS设置为:192.168.23.10,再使用dig命令检查

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

(1)定义区域

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

zone “ZONE_NAME” IN {

type { master | slave | hint | forward };

file “ZONE_NAME.zone”;

};

注意:

1. 区域名字就是注册的域名

2. 方向区域的名字是这样的

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

例如:10.168.192.in-addr.arpa

(2)定义区域解析库文件(主要记录为PTR)

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

区域数据文件的文件名为:/var/named/192.168.23.3.zone

文件内容为:

$TTL 3600

$ORIGIN 23.168.192.in-addr.arpa.

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017082101

1H

10M

3D

12H )

IN NS ns1.yhyblog.cn.

10 IN PTR ns1.yhyblog.cn.

10 IN PTR mx1.yhyblog.cn.

10 IN PTR mx2.yhyblog.cn.

3 IN PTR www.yhyblog.cn.

7 IN PTR bbs.yhyblog.cn.

8 IN PTR bbs.yhyblog.cn.

并且修改yhyblog.cn.zone的权限和属组

chown .named /var/named/192.168.23.zone

chmod o= /var/named/192.168.23.zone

检查配置文件和区域解析库文件的语法错误

named-checkconf /etc/named.conf

named-checkconf /etc/named.rfc1912.zones

named-checkzone 10.168.192.in-addr.arpa /var/named/192.168.23.zone

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

rndc reload 或 systemctl reload named.service

如何配置一个反向解析区域的详细步骤(必须掌握)

1:编辑/etc/named.rfc1912.zones,添加

zone "23.168.192.in-addr.arpa" IN {

type master;

file "192.168.23.zone";

};

2: 在/var/named/下,创建一个192.168.23.zone文件

$TTL 3600

$ORIGIN 23.168.192.in-addr.arpa.

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017082101

1H

10M

3D

12H )

IN NS ns1.yhyblog.cn.

10 IN PTR ns1.yhyblog.cn.

10 IN PTR mx1.yhyblog.cn.

10 IN PTR mx2.yhyblog.cn.

3 IN PTR www.yhyblog.cn.

7 IN PTR bbs.yhyblog.cn.

8 IN PTR bbs.yhyblog.cn.

3:修改yhyblog.cn.zone的权限和属组

chown .named /var/named/192.168.23.zone

chmod o= /var/named/192.168.23.zone

4:检查配置文件和区域解析库文件的语法错误

named-checkconf /etc/named.conf

named-checkconf /etc/named.rfc1912.zones

named-checkzone 23.168.192.in-addr.arpa /var/named/192.168.23.zone

5:重启named服务让服务器重载配置文件和区域数据文件

systemctl reload named.service 或 rndc reload

6:使用dig命令测试当前配置的反向解析区域

dig -x 192.168.23.10

7: 在其他的主机上,将DNS设置为:192.168.23.10,再使用dig命令检查

主从DNS服务器

从服务器只是在区域级别进行的。也就是说,一台从服务器只是主服务器的一个区域的副本,不是所有区域的副本。如果要配置成主服务器上所有的区域的副本,那么需要配置所有的从服务器的区域。

这里主服务器的IP地址为:192.168.23.10

这里从服务器的IP地址为:192.168.23.11

主从服务器是区域级别的概念

如何配置一个从区域 :

1>在Slave 服务器上(192.168.23.11)

(1)定义区域

定义一个从区域

zone "ZONE_NAME" IN {

type slave ;

file "slaves/ZONE_NAME.zone";

masters { MASTER_IP }

};

例如:在/etc/named.rfc1912.zones文件中增加:

zone "yhyblog.cn" IN {

type slave;

masters { 192.168.23.3; };

file "slaves/yhyblog.cn.zone";

};

zone "10.168.192.in-addr.arpa" IN {

type slave;

file "slaves/192.168.23.zone";

masters { 192.168.23.3; };

};

注意:这里为什么要将从服务器的域写在slaves目录下?这是由于named这个进程是以named的身份运行的,但是/etc/named/目录的属组是named,没有写权限,那么主服务器将不能够以named的身份在/etc/named/目录下写入数据。那么可以在/etc/named/slaves目录下写,/etc/named/slaves目录的权限为:drwxrwx--- 2 named named 6 1月 17 20:00 slaves,可以写数据。那么是否可以将/etc/named/目录改为named用户组成员可以写呢?不行,如果这样做的话,那么如果named进程被劫持,将会有权利清空里面的所有的数据,这样就是为什么会有一个/etc/named/slaves目录专门为从DNS服务器写域解析库的原因。

配置文件语法检查:named-checkconf

(2)重载配置

rndc reload 或 systemctl reload named.service

2>在Master服务器上(192.168.23.10)

(1)确保区域数据文件中应该为每一个从DNS服务器配置NS记录,并且在正向区域文件需要每个从服务器的NS记录的主机名配置一个A记录,且此A记录后面的地址为真正的从服务器的IP地址

例如:在/var/named/yhyblog.cn.zone文件里修改:

$TTL 3600

$ORIGIN yhyblog.cn.

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017010802

1H

10M

3D

1D )

IN NS ns1

IN NS ns2

IN MX 10 mx1

IN MX 20 mx2

ns1 IN A 192.168.23.3

ns2 IN A 192.168.23.4

mx1 IN A 192.168.23.4

mx2 IN A 192.168.23.5

www IN A 192.168.23.3

web IN CNAME www

例如:在/var/named/yhyblog.cn.zone文件里修改

$TTL 3600

$ORIGIN 10.168.192.in-addr.arpa.

@ IN SOA ns1.yhyblog.cn. dnsadmin.yhyblog.cn. (

2017010803

1H

10M

3D

12H )

IN NS ns1.yhyblog.cn.

IN NS ns2.yhyblog.cn.

3 IN PTR ns1.yhyblog.cn.

3 IN PTR ns2.yhyblog.cn.

4 IN PTR mx1.yhyblog.cn.

5 IN PTR mx2.yhyblog.cn.

3 IN PTR www.yhyblog.cn.

注意:如果要测试是否主从同步使用dig命令(在从服务器上)

例如:dig -t axfr yhyblog.cn @192.168.23.10

例如:dig -t axfr 23.168.192.in-addr.arpa @192.168.23.10

注意:时间要同步,主从服务器都使用ntpdate命令同步,写在contab -e中

子域授权

如果我们现在在公司的内网搭建一个内部的DNS服务,那么现在对于yhyblog.cn来说,公司内部有很多部门。例如ops.yhyblog.cn,java.yhyblog.cn, python.yhyblog.cn。且每一个部门有很多的服务器需要得到解析,例如:www.ops.yhyblog.cn需要被公司内部的DNS服务器解析。那么如何让公司内网的DNS主机只解析二级域,不会解析三级域,那么如何让其他的主机解析三级域呢?

子域授权

正向解析区域授权子域的方法

ops.yhyblog.cn. IN NS ns1.ops.yhyblog.cn.

ops.yhyblog.cn. IN NS ns2.ops.yhyblog.cn.

ns1.ops.yhyblog.cn. IN A IP

ns2.ops.yhyblog.cn. IN A IP

例如:在主DNS服务器/var/named/yhyblog.cn.zone 中添加:

ops IN NS ns1.ops

ns1.ops IN A 192.168.23.12

例如:子域服务器中,在/etc/named.rfc1912.zones中添加:

zone "ops.yhyblog.cn" IN {

type master;

file "ops.yhyblog.cn.zone";

};

例如:子域服务器中,在/var/named//var/named/ops.yhyblog.cn.zone中添加

$TTL 3600

$ORIGIN ops.yhyblog.cn.

@ IN SOA ns1.ops.yhyblog.cn. dnsadmin.ops.yhyblog.cn. (

2017010802

1H

10M

3D

1D )

IN NS ns1

ns1 IN A 192.168.23.12

www IN A 192.168.23.10

定义转发(仅仅转发对某个特定区域的解析请求)

注意:被转发的服务器必须允许为当前服务器做递归查询,否则转发无效

就是在被转发的主DNS服务器中添加

acl mynet {

192.168.23.0/24;

127.0.0.0/8;

};

allow-recursion { mynet; }; 允许这个网段的服务器做递归查询

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

zone "ZONE_NAME" IN{

type forward;

forward {first|only};

forwarders { SERVER_IP; };

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

only: 只转发

}

例如:在主DNS服务器/var/named/yhyblog.cn.zone 中添加:

ops IN NS ns1.ops

ns1.ops IN A 192.168.23.5

例如:在主DNS服务器/etc/named.rfc1912.zones中添加:

zone "yhyblog.cn" IN {

type forward;

forward only;

forwarders { 192.168.23.3; 192.168.23.4; };

};

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

options {

forward {only|first};

forwarders {SERVER_IP};

}

例如:在子域服务器中的/etc/named.conf中

forward only;

forwarders { 192.168.23.3; };

在bind中与安全相关的配置(了解)

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

acl acl_name {

ip;

net/mask

}

例如:

acl mynet {

192.168.23.0/24;

127.0.0.0/8;

};

bind有四个内置的acl

none:没有一个主机

any:任意主机

local:本机

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

访问控制命令

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

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

allow-recursion {}:允许哪个主机向当前的DNS服务器发起递归请求,不允许递归的服务器不会转发请求,因此,dns服务器只允许指定的服务器进行递归查询

allow-update {}:DDNS , 允许动态更新区域数据库文件中的内容


相关TAG标签
上一篇:css3flex属性flex-grow、flex-shrink、flex-basis学习笔记
下一篇:Spark2.2.0+Scala2.13.0集群搭建
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站