linux中DNS原理详解

DNS服务器类型:

1.主域名服务器(权威)

    特定DNS区域的官方服务器,具有唯一性

    负责维护该区域内所有域名->IP地址的映射记录

    对区域的所有更新都通过此服务器进行;

    配置方式:在缓存服务器的基础上自己添加zones就可以

2.从域名服务器

    也称为辅助域名服务器

    其维护的域名->IP地址记录来源于主域名服务器

    只从同一个区域的主服务器或其它从服务器同步区域数据文件;

3.缓存域名服务器(非权威)

    也称为唯高速缓存服务器

    通过向其他域名服务器查询获得域名->IP地址记录

    将域名查询结果缓存到本地,提高重复查询时的速度

    配置相当简单:仅定义监听外部地址即可;

4.转发服务器-----转发器在子域授权部分会有解释,此处权当了解

    注意:指定的被转发服务器需要能够为请求做递归,否则转发不会进行。在子域授权结构下,某个子域想要查询它的父域下的另一个子域时,应该指定父域为转发服务器,如果不指定,子域会直接去查找根服务器

    (1)全部转发:本机不能解析的所有请求都发送到指定被转发服务器

        Options {

            type forword{first|only};

            forwarders

        }

    (2)区域转发:只转发特定区域的请求至被转发服务器,区域请求找根

        zone "zone_name" IN {

            type forward;

            forward {first|only}

            forwarders;

        }

first模式:先发送请求给被转发服务器,被转发服务器没有则送请求给根(先递归后迭代)

only模式:发送请求给被转发服务器,如果无法解析则放弃请求,不会找根

DNS解析过程:

迭代查询:客户及先查看浏览器缓存,本地host文件,本地DNS解析缓存,没有的话就交给本地域名解析服务器(由运营商提供),本地域名缓存解析服务器收到解析请求后,先看本地缓存有没有,如果没有直接找域名根服务器(涉及到授权问题,根节点服务器必须是可信任的),根收到www.google.com这个请求时,会说不明白在哪里,但是根节点服务器会返回.com给本地域名解析服务器,然后本地域名解析服务器再找.com,找到后,再找google.com,最终找到www.google.com这个主机,所以本地DNS解析服务器这种查询就叫做迭代查询

DNS基于UDP53号端口,UDP53端口为客户查询流量开放,和TCP53号端口,TCP53号端口为主从复制流量开放

递归查询:上面整个过程中客户只发送一次请求,本地DNS服务器帮助客户完成以下所有请求,只返回答案给客户机,所以客户端到本地DNS服务器的查询只有一次,就叫递归查询

wKioL1X41sehzCrwAAJetI6xYy4603.jpg

资源纪录[RR]:

SOA: Start Of Authority,起始授权记录;一个区域文件有且只能一个SOA记录;SOA还必须是第一条资源记录;定义了主从DNS架构中如何同步

NSName Server,名称服务器

MXMail eXchanger,邮件交换器,MX记录后面应该指定邮件服务器的优先级(0-99)

A: AddressFQDN-->IPv4 通过域名(主机名)解析IP

AAAA: Address, FQDN-->IPv6

PTR: Pointer,指针,IP-->FQDN,反解ip成域名(主机名)

CNAME: Cononical NAME,正式名称----别名记录,通过不同名称找到同一个主机,在CDN架构中可以引导查询者找到离其最近的DNS服务器,非常有

1.SOA记录:

DNS服务器的主从如何协调?这里就用到了SOA纪录,其实SOA的真正作用是说明一个区域(zone)解析文件的生效区域,由谁负责,以及主从同步时的参数设定

区域数据文件有版本号(序列号): serial,长度不能大于10位

刷新时间(检查周期)refresh

重试时间(重试周期): retry

过期时间(失效时长): expire

否定应答的TTL值;

示例:正向解析记录:

注意:下面的纪录除了SOA外.magedu.com.都可以省略,就像最后一行一样

wKiom1X43ASgWex7AACPxOgtQR0072.jpg

上图中,$TTL 1D是一个全局的宏,定义了客户端从本服务器解析得到结果后的可缓存时长,也可以定义在第二行的IN前面,如果两处都没定义,则必须在每条记录后面定义.IN就是internet的意思,这里为固定格式

$TTL下面也可以定义$ORIGIN指定如果下面记录条目中省略的话,自动补上$ORIGIN的内容,一般$ORIGIN赋值与第二行第四字段的域名相同,别忘了后面有个.

@在配置文件中有特殊含义,通配了当前区域名称(这里指magedu.com),在主配置文件中定义了,这里直接用用就可以了。所以邮箱地址使用.而不能使用@

第二行第五列邮箱格式:[email protected] -写为-> admin.magedu.com

第二行第四列的magedu.com,定义了当前区域主DNS服务器的FQDN(就是dns服务器主机名),也可以使用当前区域名,我们上面的图就是使用了当前区域名

协调过程:从服务器在间隔达到refresh指定的时长后发起同步请求至主服务器;主服务器响应serial,从服务器与本地的serial进行比较;如果主服务器serial大于本地,意味主服务器区域数据文件更新了,因此请求同步;

重试时间retry表示从服务器尝试同步失败时(无法连接到主服务器),间隔多久后尝试重新连接主服务器进行同步

过期时间expire:主服务器down后,从服务器还能工作多久(因为从服务器需要自杀)

同步:分为全量同步和增量同步两种,高版本bind支持触发更新,主服务器上信息发生改变时会通知从服务器过来同步,不用必须等refresh时间

括号中最后一个1D定义了否定TTL应答值,非本DNS区域管理区域内主机别人到我这请求解析就告诉发送请求的主机一天内不要来查我

时间单位:M(分钟)、H(小时)、D(天)、W(周),默认单位是秒

TIPS:配置文件中使用;作为注释标识符

2.NS记录:

NS: 一个区域数据文件可以有多个NS记录;

name: 区域名称,可使用@替换;

valuedns服务的FQDN

注意:(下面两条tips对于所有记录都应遵循,不光NS记录)

1.相邻的资源记录name相同时,后面的可省略;

2.任何一个value中指定的FQDN,在其域的正向解析文件中应该有A记录;

3.同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;

3.MX记录:

MX:一个区域数据文件可以有多个MX记录;

name: 区域名称,可使用@表示;

value: 邮件服务器的FQDN

value之前需要一个数字表示其优先级(0-99, 数字越小优先级越高)

例如:

@           IN          MX 10   mx1.magedu.com.

              IN        MX 20   mx2.magedu.com.

3.A记录示例:下面的第一条和第二条可以实现轮询解析方式的负载均衡(一个FQDN对应多个地址)

www.magedu.com.       IN         A    1.1.1.1

www.magedu.com.      IN        A   2.2.2.2

mx1.magedu.com.       IN         A  1.1.1.1

pop3.magedu.com.      IN   A    1.1.1.1

这里还可以使用泛域名解析:用户给错域名答案时依然可以给用户返回页面

*.magedu.com    IN    A    1.1.1.2 #输入的域名只要是magedu.com结尾的都定向到1.1.1.2

magedu.com    IN    A    1.1.1.4   #这里只要输入域名,即使不输入主机名也定向到正常主机

4.CNAME记录:通过不同名称找到同一个主机

name: 别名FQDN

value: 正名FQDN

例如:

web.magedu.com.   IN   CNAME        www.magedu.com.

5.PTR记录:反向解析记录(注意与正向解析zone文件不是同一个文件)

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

wKiom1X46kyTH0o7AABY1Je8jmY548.jpg

上面的@也可以替换成100.16.172.arpa-----这里注意ip必须反着写


DNS安全相关配置:

acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;
    acl acl_name {
        ip;
        ip;
        net/prelen;
            };
    示例:
        acl mynet {
        172.16.0.0/16;
        }
bind有四个内置的acl:
    none: 没有一个主机;
    any: 任意主机;
    local: 本机;
    localnet: 本机的IP同掩码运算后得到的网络地址;
注意:只能先定义,后使用;因此,其一般定义在配置文件中options的前面;

调用示例:

先定义:

acl     slave {
        192.168.20.2;
        127.0.0.1;
};

在options中调用:

allow-query     { slave; };

调用内置acl示例:

allow-query     { acl; };


allow-query {}: 允许查询的主机;白名单;
allow-transfer {}:允许区域传送的主机;白名单;
allow-recursion {}: 允许递归的主机;一般应该设置仅允许给本地主机进行递归

        allow-recursion { mynet; };

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


如何获取根节点服务器列表:

dig -t NS . @dnsserver地址




你可能感兴趣的:(主从同步,Host文件,智能dns,子预授权)