• DNS服务


    DNS概念简述

    DNS:Domain Name Service 域名解析服务,工作在应用层,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS监听在TCP和UDP端口53。

    FQDN:全称域名,如 www.example.com

    • www是主机名
    • example.com是域名

    实现名称到IP解析的有三种方式

    • 分散式解决方案:/etc/hosts,不易管理
    • 集中式解决方案:NIC,如果主机太多,对单一服务的压力太大
    • 分布式解决方案:DNS,解决了上俩个方式的不足

    权威的DNS服务器:记录主机名到IP的DNS服务器叫做权威的DNS服务器

    主从DNS服务器:主服务器记录发生变化,会同步到从服务器,(主从复制),实现容错机制

    • 序列号:解析库版本号,主服务器解析库变化时,其序列递增
    • 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
    • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
    • 过期时长:从服务器联系不到主服务器时,多久后停止服务

    DNS的查询类型

    • 递归查询:服务器从根开始去找一级一级的找到目标主机,直到找到,负责到底
    • 迭代查询:根服务器给了主机所在的域的IP,并没有直接给出结果

    DNS的解析类型:正反向解析是两个不同的名称空间,是两棵不同的解析树

    • 正向解析:FQDN --> IP

    • 反向解析:IP ---> FQDN 如邮件服务器需要用到反向解析技术

    DNS服务器的类型

    • 主服务器:管理和维护所负责解析的域内解析库的服务器
    • 从服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
    • 缓存服务器

    DNS的工作原理

    1. 客户端向离它最近的DNS服务器发起了查询请求,一般是由运营商提供
    2. 如果代理DNS服务器有记录则直接可以返回给客户端;如果没有记录则去根DNS服务器请求,根DNS并不会存储所以的主机名对应IP的记录,它只会记录它的子域的IP,例如.com等后缀的域,代理DNS服务器会拿到.com域的DNS服务器IP
    3. 然后再将请求发往.com.域的DNS服务器,如果还是没有找到主机,则再往它的下一级找,直到找到具体的主机,把IP返回给客户端,同时代理DNS服务器也会缓存一份到本地

    一次完整的查询请求经过的流程:Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…

    DNS域名

    • 根域:目前有13个根集群服务器,美国10台,日本1台,荷兰1台,瑞典1台
    • 一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 组织域、国家域(.cn, .ca, .hk, .tw)、反向域 等
    • 二级域名
    • 三级域名
    • 最多127级域名

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

    DNS服务管理工具

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

    • -x IP :测试反向解析
    • -t axfr ZONE_NAME @SERVER :模拟区域传送
    • -t NS . @a.root-servers.net :查询所有的根DNS服务器

    host

    • -t:指定查询记录类型
    • host www.dongfei.tech 192.168.0.7 :向192.168.0.7查询www.dongfei.tech这个域名

    rndc

    • reload: 重载主配置文件和区域解析库文件
    • reload zonename: 重载区域解析库文件
    • retransfer zonename: 手动启动区域传送,而不管序列号是否增加
    • notify zonename: 重新对区域传送发通知
    • reconfig: 重载主配置文件
    • querylog: 开启或关闭查询日志文件/var/log/message
    • trace: 递增debug一个级别
    • trace LEVEL: 指定使用的级别
    • notrace:将调试级别设置为 0
    • flush:清空DNS服务器的所有缓存记录

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

    named-checkzone "dongfei.com" /var/named/dongfei.com.zone :查询区域数据库文件的语法

    DNS服务器类

    主名称服务器

      负责至少解析一个域

    辅助名称服务器

         不负责域解析

    缓存名称服务器

    主-辅DNS服务器

    • 主DNS:维护所负责解析的域数据库的那台服务器;读写操作均可执行;
    • 从DNS:从主DNS服务器那里或其它的从DNS那里复制一份解析库;但只能进行读操作;

    复制操作的实施方式

    1. 序列号:serial,也即是数据库的版本号,主服务器数据内容发生变化时,其版本号要递增;
    2. 刷新时间间隔:refresh,从服务器每隔多久向主服务器检查序列号更新情况;
    3. 重试时间间隔:retry,从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;应小于刷新时间间隔;
    4. 过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
    5. 否定答案的缓存时长;minimum

    区域传送

    • 全量传送:axfr,传送整个数据库;
    • 增量传送:lxfr,仅传送变化的数据;

    区域(zone)和域(domain)

    • 正向解析库:FQDN —> IP
    • 反向解析库:IP —> FQDN

    测试工具

    dig , host, nslookup;如果当前系统上没有此三个命令,需要安装bind-utils软件包

    dig命令

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

    使用格式

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

    查询选项

    +[no]trace:跟踪解析过程;
    +[no]recurse:进行递归解析;

    反向解析


    dig -x IPADDR

    模拟完全区域传送

    dig -t axfr DOMAIN [@server]

    示例:
    # 查询baidu.com的NS记录
    [root@centos7~]# dig -t NS baidu.com
    # 跟踪解析www.baidu.com的过程
    [root@centos7 ~]# dig +trace www.baidu.com
    # 解析www.baidu.com的A记录
    [root@centos7 ~]# dig -t A www.baidu.com

    host命令

    使用格式

    host [-t RR_TYPE] name
    SERVER_IP

    示例
    # 解析www.jd.com的A记录
    [root@centos7 ~]# host -t A www.jd.com
    www.jd.com is an alias for www.jdcdn.com.
    www.jdcdn.com has address 59.108.139.1

    nslookup命令

    使用格式

    nslookup [-opthions] [name] [server]

    交互式模式下使用方式

    # 命令行下直接输入nslookup
    nslookup>
        server ip:server为关键字,以指定的IP为dns服务器进行查询;
        set q=RR_TYPE:set q= 为关键字,RR_TYPE为要查询的资源类型;
        name:要查询的域名;

    示例
    [root@centos7 ~]# nslookup
    > server 192.168.1.1
    Default server: 192.168.1.1
    Address: 192.168.1.1#53
    > set q=A
    > www.baidu.com
    Server:     192.168.1.1
    Address:    192.168.1.1#53
    
    Non-authoritative answer:
    www.baidu.com   canonical name = www.a.shifen.com.
    Name:   www.a.shifen.com
    Address: 119.75.218.70
    Name:   www.a.shifen.com
    Address: 119.75.217.109

    rndc命令

    功用:named服务控制命令

    rndc    status
    rndc    flush

    DNS服务

    DNS的实现:bind(Bekerley Internat Name Domain ) ,由 ISC (www.isc.org) 维护,本章所有配置实例的bind版本为 :bind-9.9.4-61.el7.x86_64

    软件包名:bind

    服务名:named

    提供的服务:DNS域名解析

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

    options {  #全局选项
        listen-on port 53 { 127.0.0.1; };  //默认监听本机的53号端口,如果没有其他需求则注释掉
        listen-on-v6 port 53 { ::1; };
        directory   "/var/named";
        dump-file   "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; };  //授权为指定的主机解析,默认只为本机解析,需要注释掉
        recursion yes|no;  //递归查询,默认开启
        dnssec-enable yes;  //sec功能,与安全加密传输相关的选项,如果要做转发,需要关闭此选项
        dnssec-validation yes;  //同上一条,需要关闭
        bindkeys-file "/etc/named.iscdlv.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
        allow-transfer { none; }:允许区域传送的主机;白名单,默认开启,建议关闭
    };
    
    logging {  //日志子系统配置
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    
    zone "." IN {  //根区域定义,如果自己要做根服务器的话需要注释掉
        type hint;
        file "named.ca";
    };
    
    include "/etc/named.rfc1912.zones";  //区域定义信息放在此文件
    include "/etc/named.root.key";

    DNS解析数据库文件存放位置:/var/named/

    区域定义:/etc/named.rfc1912.zones

    zone "test.com" IN { //internation 记录
        type {master|slave|hint|forward};   //类型,主服务器
        file "test.com.zone";  //区域数据库文件
    };  

    区域文件模板:/etc/named.rfc1912.zones

    # cat /var/named/named.localhost 
    $TTL 1D  #默认的TTL值
    @       IN SOA  @ rname.invalid. (                            #SOA记录
                                            0       ; serial        #序列号
                                            1D      ; refresh       #主从复制的时间间隔
                                            1H      ; retry         #如果主从复制失败重试时间
                                            1W      ; expire        #失效时间
                                            3H )    ; minimum       #否定答案的TTL值
            NS      @           #名字服务器记录
            A       127.0.0.1    #正向解析记录
            AAAA    ::1          #IPv6的正向解析记录

    区域解析数据库文件:

    资源记录:Resource Record 简称 RR

    ​ 语法格式:name [TTL] IN rr_type value

    • name:当前区域的名字,列如 www.example.com.,注意:最后的 "." 一定要加,如果不加则会把你的域名当成区域名字,再在后边加上你的默认域名。 “@”:表示当前域名的名字

    TTL:例如$TTL 1D的意思是默认的TTL值为1天

    TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。

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

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

    • IN:关键字
    记录类型
    • A :正向解析,名字到IP
    主机名(简称只写主机名,如www)   A   ip地址
    
    @   A   192.168.0.12        //不需要输入www,直接输入域名则可访问此网站
    *   A   192.168.0.12      //泛域名解析,只要请求的是这个域,但是没有匹配的主机,则应答此条记录
    $GENERATE 1-254 websvr$ A 192.168.0.$   //循环,表示websvr1 A 192.168.0.1 到 websvr254 A 192.168.0.254的254条记录
    • AAAA:正向解析,名字到IPV6
    • PTR:反向解析
    12  PTR websrv.magedu.com.
    14  PTR web2srv.magedu.com.
    100 PTR mailsrv.magedu.com.
    • NS:名字服务器记录,记录谁是这个域的DNS服务器,包括主服务器和从服务器
            NS  dns  //表示192.168.0.1这台主机是这个域的dns服务器
    dns     A   192.168.0.1
    • CNAME:别名记录
    websrv  A   192.168.0.10
    websrv  A   192.168.0.11
    websrv  A   192.168.0.12
    www     CNAME   websrv   //访问www.xxxx.com的时候则代表访问192.168.0.10-12,DNS会做轮调应答,实现负载均衡的功能
    • MX:邮件记录
    @       MX  10  mailsrv1
    @       MX  20  mailsrv2
    mailsrv1    A   192.168.0.100
    mailsrv2    A   192.168.0.200
    • SOA:起始授权记录,记录域中的主DNS服务器,一个区域解析库中只能有且仅能有一个SOA记录,必须位于解析库的第一条记录

    SOA记录的格式:域名称 IN SOA 主DNS主机名 域管理员邮箱 (序列号 主从同步的时间间隔 同步失败的尝试时间间隔 联系不上主DNS多长时间后失效 域名无法找到,在多长时间内不会再去查询)

    @ IN    SOA dns1.magedu.com. admin.magedu.com. ( 1 1D 1H 1W 3H )

    实例:配置DNS主服务器的正向解析

    ​ 1)安装bind

    # yum install bind
    # systemctl start named
    查错named-checkconf

    ​ 2)修改主配置文件,将下边俩条注释掉

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };  //监听本机的所有地址
    //  allow-query     { localhost; };  //允许给所有客户端解析

    ​ 3)修改区域数据文件

    # vim /etc/named.rfc1912.zones
    zone "magedu.com" IN {     //internation 记录
        type master;            //类型,主服务器
        file "magedu.com.zone";  //区域数据库文件,指向/var/named/magedu.com.zone
    };

    ​ 4)新建区域解析数据库文件,/var/named/dongfei.com.zone

    # vim /var/named/magedu.com.zone
    $TTL 1D  //代表全局的TTL值
    @ IN    SOA dns1.magedu.com. admin.magedu.com. ( 1 1D 1H 1W 3H ) //SOA记录,按格式写
            NS  dns1            //NS记录,域中有几个DNS服务器都要写出来
    dns1    A   192.168.0.7      //NDS服务器的A记录,0.7是本机的IP
    www     A   192.168.0.6      //一条正向解析记录,这里的0.6是web服务器
    
    # chgrp named /var/named/magedu.com.zone  //切记,修改文件的权限和所属组,保证named进程有此文件的可读属性
    # chmod 640 /var/named/magedu.com.zone
    # ll /var/named/magedu.com.zone
    -rw-r-----. 1 root named 120 Jun  1 19:39 /var/named/magedu.com.zone

    ​ 5)测试

    # named-checkconf  //检查主配置文件
    # named-checkzone "magedu.com" /var/named/magedu.com.zone  //检查
    # rndc reload  //重载配置文件
    # dig www.magedu.com @192.168.0.7  //在客户端上使用dig命令测试,如果返回有以下值则说明成功
    ;; ANSWER SECTION:
    www.magedu.com.        86400   IN      A       192.168.0.6

    实例:配置DNS主服务器的反向解析

    ​ 1)在/etc/name.rfc1912.zone中加入

    zone "0.168.192.in-addr.arpa" IN {  //地址需要反着写,与正向解析不同,是另一颗树
        type master;
        file "192.168.0.zone";
    };

    ​ 2)创建区域数据文件

    # vim /var/named/192.168.0.zone
    $TTL 1D
    @ IN    SOA dns.magedu.com. admin.magedu.com. ( 1 1D 1H 1W 3H )
                            NS  dns.magedu.com.
    dns.magedu.com         A   192.168.0.7
    100                     PTR mail.magedu.com.
    
    # chgrp named /var/named/192.168.0.zone
    # chmod 640 /var/named/192.168.0.zone
    # rndc reload

    ​ 3)重载配置文件,测试

    # vim /etc/resolv.conf
    nameserver 192.168.0.7  //在客户端将DNS服务器指向我们配置的DNS服务器
    # dig -x 192.168.0.100  //测试,如果出现以下信息则表示成功
    ;; ANSWER SECTION:
    100.0.168.192.in-addr.arpa. 86400 IN    PTR     mail.magedu.com.

    实例:DNS服务的动态更新

    ​ 1)打开允许指定主机更新数据库

    zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
        allow-update { 192.168.0.6; };  //允许192.168.0.6远程更新数据库
    };

    ​ 2)放开数据库文件夹和文件的权限

    # chmod 770 /var/named/
    # ll -d /var/named/
    drwxrwx---. 5 root named 173 Jun  1 20:55 /var/named/
    # rndc reload

    ​ 3)在客户端测试,上传一条更新记录

    # nsupdate 
    > server 192.168.0.7
    > zone magedu.com
    > update add ftp.magedu.com 86400 IN A 192.168.0.101
    > send
    > quit
    # dig ftp.magedu.com @192.168.0.7  // 出现以下信息表示成功
    ;; ANSWER SECTION:
    ftp.magedu.com.        86400   IN      A       192.168.0.101

    这时我们再回来看DNS服务器的/var/named/文件夹下出现了一个 magedu.com.zone.jnl 的文件,这个文件是更新数据库的日志文件,它不会立即同步到区域数据中库文件中,而是会先存放到日志文件中,过一会儿再向数据库文件中同步。

    # named-journalprint /var/named/magedu.com.zone.jnl查看日志文件

    资源记录

    资源记录(Resource Record):简称rr;常用的资源记录类型有:A, AAAA, PTR, SOA, MX, CNAME, NS;

    • SOA:起始授权记录;一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
    • NS:域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
    • A:地址记录,FQDN —> IP
    • AAAA:地址记录,FQDN —> IPv6
    • MX:邮件交换器;优先级0-99,数字越小优先级越高;
    • CNAME:别名记录;
    • PTR:地址记录,IP —> FQDN;

    DNS的主从复制

    DNS服务一般需要一台主,俩台从,如果主DNS服务器出现故障后可以向从DNS服务器请求解析;客户端需要将主DNS设置为主DNS服务器,将从DNS服务器设置为备DNS服务器

    实例3:配置主从DNS服务

    192.168.0.7 为主DNS服务器

    192.168.0.11 为从DNS服务器

    192.168.0.6 为客户端

    ​ 1)主服务器配置

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
        allow-transfer { 192.168.0.11; };  //只允许从DNS服务器同步区域数据库
    
    # vim /etc/named.rfc1912.zones
    zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
    };
    
    # vim /var/named/magedu.com.zone
    $TTL 86400  ; 1 day
    @ IN SOA    dns1.magedu.com. admin.magedu.com. (
                    2          ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
                NS  dns1
                NS  dns2         //将从DNS服务器的NS记录添加到此
    dns1        A   192.168.0.7
    dns2        A   192.168.0.11  //将从DNS服务器的A记录添加到此
    
    ftp         A   192.168.0.101
    www         A   192.168.0.6
    @           MX  10  mail
    mail        A   192.168.0.100

    ​ 2)配置从DNS服务器

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
        allow-transfer  { none; };  //为了数据安全,不允许任何主机从从DNS服务器上拉取区域数据
    
    # vim /etc/named.rfc1912.zones
    zone "magedu.com" IN {
        type slave;  //类型为从服务器
        masters { 192.168.0.7; };  //主DNS服务器的IP
        file "slaves/magedu.com.zone.slave";  //数据库文件保存到 /var/named/slaves/ 文件夹下,名字叫dongfei.com.zone.slave
    };
    
    # systemctl restart named //重启服务
    # ls /var/named/slaves/ //可以看到数据库文件则证明已经同步成功
    magedu.com.zone.slave

    ​ 3)在客户端测试

    # vim /etc/resolv.conf  //修改DNS配置文件
    ; generated by /sbin/dhclient-script
    nameserver 192.168.0.7
    nameserver 192.168.0.11
    
    # dig www.magedu.com
    ;; ANSWER SECTION:
    www.magedu.com.        86400   IN      A       192.168.0.6
    ;; SERVER: 192.168.0.7#53(192.168.0.7)

    主服务器可以正常解析,接下来我们将主机模拟故障,比如把网络断掉

    # dig www.magedu.com  //再次在客户端测试,发现现在已经是从服务响应我们的解析请求了
    ;; ANSWER SECTION:
    www.magedu.com.        86400   IN      A       192.168.0.6
    ;; SERVER: 192.168.0.11#53(192.168.0.11) //192.168.0.11是从服务器地址

    dig -t axfr magedu.com @192.168.0.7 手动抓取区域记录

    • 注意:
    1. 用户查询是走的UDP的53端口
    2. 主从复制的时候需要放开tcp和udp 的53号端口
    3. 需要的防火墙开放tcp和udp的53号端口

    DNS子域委派

    在互联网中我们的单个DNS服务无法去存储所有主机的域名到IP的记录,比如根域,它只是将来至查询.com 的请求委派给.com域的DNS服务器,来自.org的查询交给.org域的DNS服务器。具体怎么实现配置,那我们来一起研究吧

    实例4:配置子域委派的实现

    环境:

    ​ 父:192.168.0.7,dongfei.com

    ​ 子:192.168.0.11,bj.dongfei.com

    ​ 1)配置父域

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
        dnssec-enable no;
        dnssec-validation no;
    
    # vim /etc/named.rfc1912.zones
    zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
    };
    
    # vim /var/named/magedu.com.zone
    $TTL 86400  ; 1 day
    @ IN SOA    dns1.magedu.com. admin.magedu.com. (
                    2          ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
                NS  dns1
    bj          NS  dns2.magedu.com.  //将bj域的请求委派给dns2来处理
    dns1        A   192.168.0.7
    dns2        A   192.168.0.11
    
    # chgrp named /var/named/magedu.com.zone
    # chmod 640 /var/named/magedu.com.zone
    # rndc reload

    ​ 2)配置子域

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
    # vim /etc/named.rfc1912.zones
    zone "bj.magedu.com" IN {
        type master;
        file "bj.magedu.com.zone";
    };
    
    # vim /var/named/bj.magedu.com.zone
    $TTL 1D
    @ IN SOA dns1.bj.magedu.com. admin.bj.magedu.com. ( 1 1D 1H 1W 3H )
            NS  dns1
    dns1    A   192.168.0.11
    www     A   192.168.0.6
    
    # chgrp named /var/named/bj.magedu.com.zone
    # chmod 640 /var/named/bj.magedu.com.zone
    # rndc reload

    ​ 3)在客户端测试

    # dig www.bj.magedu.com @192.168.0.7
    ;; ANSWER SECTION:
    www.bj.magedu.com.     86385   IN      A       192.168.0.6

    DNS转发

    • 1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
    • 2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

    注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行;关闭dnssec功能(dnssec-enable no; dnssec-validation no; )

    转发器类型:

    1. first模式:优先先转发到目标DNS服务器,如果区域不存在,再转发到根上去查询
    2. onyl模式:只转发到目标DNS服务器,如果目标主机没有此查询的信息则转发失败

    实例5:配置DNS转发(全局转发)

    192.168.0.11 为转发DNS服务器

    192.168.0.7 为目标DNS服务器

    ​ 1)配置转发DNS服务器

    # vim /etc/named.conf
    options {
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
        recursion yes;  //开启递归查询
        dnssec-enable no;
        dnssec-validation no;
        forward only;  //only模式
        forwarders { 192.168.0.7; };  //目标DNS服务器IP
    };
    
    # rndc reload //重载配置文件

    ​ 2)配置目标DNS服务器

    # vim /etc/named.conf
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-transfer { 192.168.0.11; };
        recursion no;  //关闭递归查询
        dnssec-enable no;
        dnssec-validation no;
    
    # vim /etc/named.rfc1912.zones
    zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
    };
    
    # vim /var/named/dongfei.com.zone
    $TTL 86400  ; 1 day
    @ IN SOA    dns1.magedu.com. admin.magedu.com. (
                    2          ; serial
                    86400      ; refresh (1 day)
                    3600       ; retry (1 hour)
                    604800     ; expire (1 week)
                    10800      ; minimum (3 hours)
                    )
                NS  dns1
    dns1        A   192.168.0.7
    webs        A   192.168.0.6
    webs        A   192.168.0.5
    www         CNAME   webs
    @           MX  10 mail
    mail        A   192.168.0.100
    ftp         A   192.168.0.101
    
    # rndc reload

    ​ 3)在客户端测试

    # dig www.magedu.com @192.168.0.11
    ;; ANSWER SECTION:
    www.magedu.com.        86369   IN      CNAME   webs.magedu.com.
    webs.magedu.com.       86369   IN      A       192.168.0.6
    webs.magedu.com.       86369   IN      A       192.168.0.5
    ;; SERVER: 192.168.0.11#53(192.168.0.11)  //真正的域名解析信息在192.168.0.7上,这里由0.11代为去查询

    如果对单个域进行转发则把配置写到区域配置文件中即可

    # vim /etc/named.rfc1912.zones
    zone "magedu.com" {
       type forward;
       forward only;
       forwarders { 192.168.0.7; };
    };

    智能DNS

    互联网上各个地区的网络站点分布到各个地区,这时就需要按地区为当地地区的客户解析到当地的站点服务器,比如在北京和在上海打开同一个网站显示的信息是不同的;这就需要用到智能DNS解析的技术。

    商站点或者视频站点,这些站点需要快速响应客户的请求,不可能将服务器搭建到一个地区,而是需要分布到各个省市,在每个地方有缓存服务器,这就是CDN: Content Delivery Network内容分发网络的工作,一般由单独的CDN公司搭建机房服务于各大电商视频等站点。

    接下来,我们一起研究一下如何实现智能DNS解析吧

    ACL规则

    acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;只能先定义,后使用,因此一般定义在配置文件中,处于options的前面

    格式:

    acl acl_name { 
      ip; 
      net/prelen; 
      …… 
    }; 

    bind有四个内置的acl:

    ​ none: 没有一个主机

    ​ any: 任意主机

    ​ localhost: 本机

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

    访问控制的指令:

    • allow-query {}: 允许查询的主机;白名单
    • allow-transfer {}:允许区域传送的主机;白名单
    • allow-recursion {}: 允许递归的主机,建议全局使用
    • allow-update {}: 允许更新区域数据库中的内容

    view 视图

    view:视图:实现智能DNS

    • 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
    • 每个view用来匹配一组客户端
    • 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件

    注意:

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

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

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

    实例:ACL和view实现智能DNS

    在一台主机上有俩张网卡,配置俩个网段来模拟来自不同地区的客户

    ​ 192.168.0.7/24

    ​ 172.20.111.236/16

    ​ 1)添加ACL和视图

    # vim /etc/named.conf
    acl bjnet {  //注意,acl要写在options前边,而且要注意acl的匹配顺序关系,至上而下
        192.168.0.0/24;
    };
    acl shnet {
        172.20.0.0/16;
    };
    acl othernet {
        any;
    };
    
    options {
    //  listen-on port 53 { 127.0.0.1; };
    //  allow-query     { localhost; };
    };
    
    view bjview {
        match-clients {bjnet;};
        include "/etc/named.rfc1912.zones.beijing";
    };
    view shview {
        match-clients {shnet;};
        include "/etc/named.rfc1912.zones.shanghai";
    };
    view otherview {
        match-clients {othernet;};
        include "/etc/named.rfc1912.zones";
    };
    
    include "/etc/named.root.key";

    注意:要将默认配置文件中的根区域配置放到/etc/named.rfc1912.zones文件中

    ​ 2)创建各地区区域配置文件

    # vim /etc/named.rfc1912.zones.beijing 
    zone "magedu.com" {
        type master;
        file "magedu.com.zones.beijing";
    };
    # vim /etc/named.rfc1912.zones.shanghai
    zone "magedu.com" {
        type master;
        file "magedu.com.zones.shanghai";
    };
    ​ 3)配置解析数据库文件
    
    # vim /var/named/magedu.com.zones.beijing
    $TTL 1D
    @ IN SOA dns1.magedu.com. admin.magedu.com. ( 1 1D 1H 1W 3H )
            NS  dns1
    dns1    A   192.168.0.7
    www     A   192.168.0.1
    # vim /var/named/magedu.com.zones.shanghai
    $TTL 1D
    @ IN SOA dns1.magedu.com. admin.magedu.com. ( 1 1D 1H 1W 3H )
            NS  dns1
    dns1    A   172.20.111.236
    www     A   172.20.111.1

    ​ 4)在客户端测试

    # dig www.magedu.com @192.168.0.7
    ;; ANSWER SECTION:
    www.magedu.com.        86400   IN      A       192.168.0.1
    ;; SERVER: 192.168.0.7#53(192.168.0.7)
    
    # dig www.magedu.com @172.20.111.236
    ;; ANSWER SECTION:
    www.magedu.com.        86400   IN      A       172.20.111.1
    ;; SERVER: 172.20.111.236#53(172.20.111.236)
    从上边的测试结果,从不同IP段查询同一个域名得到的结果却不一样,从而可以实现按地区来智能解析
  • 相关阅读:
    hph 缓存机制
    递归调用 和 迭代
    多维数组排序
    php curl操作
    JavaScript基本数据类型
    JavaScript基础
    CSS基础布局
    CSS基础样式
    CSS选择器
    CSS3基础
  • 原文地址:https://www.cnblogs.com/yaun1498078591/p/9125149.html
Copyright © 2020-2023  润新知