zoukankan      html  css  js  c++  java
  • Linux Bind架设DNS服务

    一、DNS域名解析服务

      互联网中的计算机只能通过IP地址进行识别并通信,但是IP地址不方便用户记忆。而后产生了域名解析服务,用户输入域名后即可访问,这个过程即为正向解析(服务器将域名解析为IP地址并返回给计算机,然后再进行的通信),反向解析(IP地址转换为域名)也是同理。

      DNS域名解析服务采用的是目录树层次结构,域名后缀一般分为国际域名和国内域名。原则上来讲,域名后缀都有严格的定义,但在实际使用时可以不必严格遵守。目前最常见的域名后缀有.com(商业组

    织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。

      当今世界的信息化程度越来越高,大数据、云计算、物联网、人工智能等新技术不断涌现,全球网民的数量据说也超过了35亿,而且每年还在以10%的速度迅速增长。这些因素导致互联网中的域名数量进一步激增,被访问的频率也进一步加大。假设全球网民每人每天只访问一个网站域名,而且只访问一次,也会产生35亿次的查询请求,如此庞大的请求数量肯定无法被某一台服务器全部处理掉。

      DNS技术作为互联网基础设施中重要的一环,为了为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器。

    • 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。
    • 从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况。
    • 缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。

      简单来说,主服务器是用于管理域名和IP地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询
    域名,从而减轻主服务器的负载压力。缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。

      DNS域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。所谓递归查询,
    是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,
    并将返回的查询结果提交给用户。而迭代查询则是指,DNS服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS服务器的地址,用户再向
    这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

     二、安装Bind服务程序

      BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。

    [root@localhost ~]# rpm -qa | grep bind
    bind-license-9.11.4-16.P2.el7_8.3.noarch
    bind-libs-9.11.4-16.P2.el7_8.3.x86_64
    bind-9.11.4-16.P2.el7_8.3.x86_64
    bind-export-libs-9.11.4-9.P2.el7.x86_64
    bind-libs-lite-9.11.4-16.P2.el7_8.3.x86_64
    bind-utils-9.11.4-16.P2.el7_8.3.x86_64
    bind-chroot-9.11.4-16.P2.el7_8.3.x86_64
    [root@localhost ~]# yum install bind bind-chroot -y

    常用配置文件:

    主配置文件(/etc/named.conf):只有58行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
    区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
    数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。

      bind服务程序的名称为named。首先需要在/etc目录中找到该服务程序的主配置文件,然后把第14行和第22行的地址均修改为any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。这两个地方一定要修改准确。

     1 [root@localhost ~]# vim /etc/named.conf 
     2 //
     3 // named.conf
     4 //
     5 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
     6 // server as a caching only nameserver (as a localhost DNS resolver only).
     7 //
     8 // See /usr/share/doc/bind*/sample/ for example named configuration files.
     9 //
    10 // See the BIND Administrator's Reference Manual (ARM) for details about the
    11 // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
    12 
    13 options {
    14     listen-on port 53 { any; };
    15     listen-on-v6 port 53 { ::1; };
    16     directory     "/var/named";
    17     dump-file     "/var/named/data/cache_dump.db";
    18     statistics-file "/var/named/data/named_stats.txt";
    19     memstatistics-file "/var/named/data/named_mem_stats.txt";
    20     recursing-file  "/var/named/data/named.recursing";
    21     secroots-file   "/var/named/data/named.secroots";
    22     allow-query     { any; };
    23 
    24     /* 
    25      - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
    26      - If you are building a RECURSIVE (caching) DNS server, you need to enable 
    27        recursion. 
    28      - If your recursive DNS server has a public IP address, you MUST enable access 
    29        control to limit queries to your legitimate users. Failing to do so will
    30        cause your server to become part of large scale DNS amplification 
    31        attacks. Implementing BCP38 within your network would greatly
    32        reduce such attack surface 
    33     */
    34     recursion yes;
    35 
    36     dnssec-enable yes;
    37     dnssec-validation yes;
    38 
    39     /* Path to ISC DLV key */
    40     bindkeys-file "/etc/named.root.key";
    41 
    42     managed-keys-directory "/var/named/dynamic";
    43 
    44     pid-file "/run/named/named.pid";
    45     session-keyfile "/run/named/session.key";
    46 };
    47 
    48 logging {
    49         channel default_debug {
    50                 file "data/named.run";
    51                 severity dynamic;
    52         };
    53 };
    54 
    55 zone "." IN {
    56     type hint;
    57     file "named.ca";
    58 };
    59 
    60 include "/etc/named.rfc1912.zones";
    61 include "/etc/named.root.key";

      bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。在这个文件中,定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。

    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "ruixun.com" IN {
            type master;
            file "ruixun.com.zone";
            allow-update { none; };
    };
    
    zone "0.25.168.192.in-addr.arpa" IN {
            type master;
            file "192.168.25.arpa";
            allow-update { none; };
    };
    
    
    *注意在配置文件的末尾添加正向解析和反向解析参数!其他默认配置可不作修改*

      如果启动服务时遇到了bind服务程序启动失败的情况,而您认为这是由于参数写错而导致的,则可以执行named-checkconf命令和named-checkzone命令,分别检查主配置文件与数据配置文件中语法或参数的错误。

    三、正向解析

    在DNS域名解析服务中,正向解析是指根据域名(主机名)查找到对应的IP地址。也就是说,当用户输入了一个域名后,bind服务程序会自动进行查找,并将匹配
    到的IP地址返给用户。这也是最常用的DNS工作模式。

    [root@localhost ~]# cd /var/named/
    [root@localhost named]# ls -al named.localhost
    -rw-r----- 1 root named 152 Jun 21  2007 named.localhost
    [root@localhost named]# cp -a named.localhost ruixun.com.zone #在复制时记得加上-a参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容:
    [root@localhost named]# vim ruixun.com.zone
    $TTL 1D  #生存周期为1天
    @       IN SOA  @ rname.invalid. (
            #授权信息开始:  #DNS区域的地址    #域名管理员的邮箱(不要用@符号)                              0       ; serial#更新序列号
                                            1D      ; refresh  #更新时间
                                            1H      ; retry    #重试延时
                                            1W      ; expire   ##失效时间
                                            3H )    ; minimum  #无效解析记录的缓存时间
            NS      @    #域名服务器记录
            A       127.0.0.1
            AAAA    ::1
    www     A       192.168.25.101
    [root@localhost named]# systemctl restart named
    [root@localhost named]# dig www.ruixun.com
    
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.3 <<>> www.ruixun.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15844
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;www.ruixun.com.            IN    A
    
    ;; ANSWER SECTION:

     四、反向解析

        在DNS域名解析服务中,反向解析的作用是将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名
    发送的垃圾邮件。它也可以针对某个IP地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严
    重的超售问题。

    1.编辑区域配置文件,在编辑该文件时,除了不要写错格式之外,还需要记住此处定义的数据配置文件名称,因为一会儿还需要在/var/named目录中建立与其对应的同名文件。反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.25.0,反写后应该就是25.168.192,而且只需写出IP地址的网络位即可。把下列参数添加至正向解析参数的后面。

    [root@localhost ~]# tail -n 14 /etc/named.rfc1912.zones 
    
    zone "ruixun.com" IN {
        type master;
        file "ruixun.com.zone";
        allow-update { none; };
    };
    
    zone "0.25.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.25.arpa";
        allow-update { none; };
    };

    2.编辑数据配置文件。首先从/var/named目录中复制一份反向解析的模板文件(named.loopback)【注意要使用cp -a命令】,然后把下面的参数填写到文件中。其中,IP地址仅需要写主机位

    [root@localhost ~]# cd /var/named/
    [root@localhost named]# ll 192.168.25.arpa 
    -rw-r-----. 1 root named 192 May 22 13:34 192.168.25.arpa
    [root@localhost named]# cat 192.168.25.arpa 
    $TTL 1D
    @    IN SOA    @ rname.invalid. (
                        0    ; serial
                        1D    ; refresh
                        1H    ; retry
                        1W    ; expire
                        3H )    ; minimum
        NS    @
        A    127.0.0.1
        AAAA    ::1
        PTR    localhost.
    101    PTR    www.ruixun.com.   #PTR为指针记录,仅用于反向解析中
    [root@localhost named]# 

    3.重启服务,nslookup命令测试域名解析

    [root@localhost named]# systemctl restart named
    [root@localhost named]# nslookup www.ruixun.com
    Server:        192.168.25.101
    Address:    192.168.25.101#53
    
    Name:    www.ruixun.com
    Address: 192.168.25.101
    
    [root@localhost named]# 

    五、DNS主从服务器部署

           作为重要的互联网基础设施服务,保证DNS域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名查询服务。在DNS域名解析服务中,
    从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用
    户的查询效率。

    实现步骤:

    1.主服务器的区域配置文件要允许从服务器的更新请求,在对应的区域配置项添加allow-update {从服务器IP地址;};然后重启DNS服务

    [root@localhost ~]# vim /etc/named.rfc1912.zones 

    zone "ruixun.com" IN {
    type master;
    file "ruixun.com.zone";
    allow-update { 192.168.25.102; };
    };

    zone "0.25.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.25.arpa";
    allow-update { 192.168.25.102; };
    };

    2.从服务器的区域文件配置改成"slave"模式,masters选项指向需要从主服务器复制信息的主机地址,file参数指定同步数据配置文件存放的位置

    [root@localhost ~]# vim /etc/named.rfc1912.zones 

    zone "ruixun.com" IN { type slave; masters { 192.168.25.101; }; file "slaves/ruixun.com.zone"; }; zone "25.168.192.in-addr.arpa" IN { type slave; masters { 192.168.25.101; }; file "slaves/192.168.25.arpa"; };

    3.重启服务,查看/var/named/slaves下是否有同步的数据配置文件

    六、配置安全加密传输,开启bind服务的密钥验证功能

    七、DNS缓存服务器

        DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器。简单来说,缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存
    在主机本地,从而提升下次解析的效率。DNS缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广
    泛。而且,缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关,因此当前仅需了解即可。

    forwarders {上级DNS服务器IP;};

    八、分离解析技术

    1.修改bind服务程序的主配置文件,把监听端口与允许查询主机修改为any。由于配置的DNS分离解析功能与DNS根服务器配置参数有冲突,所以需要把原有的根域信息删除。

    [root@localhost ~]# vim /etc/named.conf
    ………………省略部分输出信息………………
    44 logging {
    45 channel default_debug {
    46 file "data/named.run";
    47 severity dynamic;
    48 };
    49 };
    50
    51 zone "." IN {
    52 type hint;
    53 file "named.ca";
    54 };
    55
    56 include "/etc/named.rfc1912.zones";
    57 include "/etc/named.root.key";
    58
    ………………省略部分输出信息………………

    2. 编辑区域配置文件。把区域配置文件中原有的数据清空,然后按照以下格式写入参数。首先使用acl参数分别定义两个变量名称(china与american),当下面需要匹配IP地址时只需写入变量名称即可,这样不仅容易阅读识别,而且也利于修改维护。这里的难点是理解view参数的作用。它的作用是通过判断用户的IP地址是中国的还是美国的,然后去分别加载不同的数据配置文件。

    [root@localhost ~]# vim /etc/named.rfc1912.zones
    1 acl "china" { 122.71.115.0/24; };      #设置根据IP地址匹配的ACL条目
    2 acl "american" { 106.185.25.0/24;};
    3 view "china"{                  #按ACL条目匹配不同的区域文件视图
    4 match-clients { "china"; };
    5 zone "linuxprobe.com" {
    6 type master;
    7 file "linuxprobe.com.china";
    8 };
    9 };
    10 view "american" {
    11 match-clients { "american"; };
    12 zone "linuxprobe.com" {
    13 type master;
    14 file "linuxprobe.com.american";
    15 };
    16 };

    这样,当把相应的IP地址分别写入到数据配置文件后,即可实现DNS的分离解析功能。这样一来,当中国的用户访问linuxprobe.com (https://linuxprobe.com/)域名时,便会按照linuxprobe.com.china数据配置文件内的IP地址找到对应的服务器。


  • 相关阅读:
    [转]ASP.NET中JSON的序列化和反序列化
    [转]JavaScriptSerializer中日期序列化
    [转]国外英语教学网页
    [转]linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符)
    [转]Business Model Canvas(商业模式画布):创业公司做头脑风暴和可行性测试的一大利器
    [转]sql server transaction
    CentOS7安装配置PostgreSQL9.6
    使用struts的同步令牌避免form的重复提交
    Flink初探-为什么选择Flink
    jdbc三种常见用法
  • 原文地址:https://www.cnblogs.com/ashjo009/p/12930629.html
Copyright © 2011-2022 走看看