Linux运维实战之DNS综合实验

本次博文主要是对Linux系统中DNS知识的总结。

DNS的基础知识(参见http://sweetpotato.blog.51cto.com/533893/1596973

DNS的基础配置(参见http://sweetpotato.blog.51cto.com/533893/1598225

DNS的高级配置(参见http://sweetpotato.blog.51cto.com/533893/1607383

【本次博文的主要内容】

1、以一个综合案例总结Linux系统中DNS的配置

2、BIND的日志功能



一、Linux系统中的DNS综合实验:

【项目案例】
1、在第一台Linux主机上实现根域服务器,并完成对.com, .net, .org三个子域的授权;不允许递归;
2、在第二台Linux主机上实现一级域.com, .net, .org的正向及反向解析;并完成magedu.com, test.net, magelinux.org三个子域的授权;不允许递归;
3、在第三台Linux主机上实现以上两台DNS服务器的辅助DNS;
4、第四台Linux主机上实现magedu.com, test.net和magelinux.org域的解析;给本地客户端(win7物理机)递归;

要求:给出规划拓扑图
1、每台DNS服务器的根服务器named.ca文件的内容中,根要指向第一台DNS服务器建立的根;
2、本地客户端把服务器指向任一台,要能实现全网解析;

  • 实验拓扑:

    实验步骤:

    【准备工作】:按照上面的网络拓扑部署好虚拟机,并为每台虚拟机配置好网络,保证网络的互联互通;

    1、配置根域DNS:

    (1)在IP地址为192.168.80.11的Linux主机上,用yum安装bind服务(详见上一篇博文http://sweetpotato.blog.51cto.com/533893/1598225,此处不再赘述);

    (2)修改主配置文件:

    [[email protected] ~]# cat /etc/named.conf
    
    options {
        directory "/var/named";
        recursion no;      //不允许递归
    };
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    
    zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
    };
    
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
    };
    
    zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
    };
    
    zone "." IN {
        type master;              //我们自己建根域,所以类型为master
        file "root.zone";
    };

    (3)创建根域的区域文件(/var/named/root.zone):

    [[email protected] ~]# cat /var/named/root.zone
    $TTL 3600
    @     IN    SOA    root.   admin. (
            2015010701
            5H
            2H
            7D
            1D )
          IN    NS    root.
    root.    IN    A    192.168.80.11

    (4)修改主配置文件和区域文件的权限:

    [[email protected] ~]# chgrp named /etc/named.conf
    [[email protected] ~]# chmod 640 /etc/named.conf
    [[email protected] ~]# ll /etc/named.conf
    -rw-r-----. 1 root named 1025 Jan  7 20:09 /etc/named.conf
    [[email protected] ~]# chown :named /var/named/root.zone
    [[email protected] ~]# chmod 640 /var/named/root.zone
    [[email protected] ~]# ll /var/named/root.zone
    -rw-r-----. 1 root named 128 Jan  7 19:58 /var/named/root.zone

    (5)用dig命令验证配置的正确性:

    2、配置一级域DNS(实现一级域.com, .net, .org的正向及反向解析):

    【配置正向解析】:

    (1)在IP地址为192.168.80.12的Linux主机上,用yum安装bind服务;

    (2)修改主配置文件“/etc/named.conf”;

  • (3)在”/etc/named.rfc1912.zones”文件中定义区域(com、net和org):

    (4)将“/var/named/named.ca”文件的内容改为我们自建的根DNS的内容:

    (5)在“/var/named/”目录下新建三个区域文件(com.zone,net.zone,org.zone):

    (6)修改com.zone,org.zone和net.zone的权限及属组,并检查语法:

    (7)在根域DNS(192.168.80.11的主机)上对刚刚创建的三个域做子域授权:

    【子域授权】

    子域授权的基本理论在我的前两次博文中具体介绍过了,这里不再赘述(参见http://sweetpotato.blog.51cto.com/533893/1596973)。

    子域授权创建步骤:

    第一步:划分子域(例如上面即是对根域.划分了三个子域com./net./org.)。

    第二步:完成授权

    在主DNS(192.168.80.11主机)上完成子域的授权,即添加子域相应的NS记录和粘附A记录:

    (8)用rndc reload命令重新载入根域DNS和一级域DNS的配置文件和区域文件;

    (9)用dig命令在根域DNS(192.168.80.11主机)服务器上测试:

    【配置反向解析】

    下面配置反向解析区域,使得一级域DNS(192.168.80.12主机)既能够实现正向解析也能够做反向解析。

    (1)修改主配置文件“/etc/named.rfc1912.zones”,加入以下内容:

    说明:

    反向解析的子域授权比较麻烦,在内网做的话, 基本上都是整段授权, 所以比较容易。而对于不满一个网段的授权,就很复杂了, 差不多有两种方法, 第一种是一个IP一个zone, 另外一种是CNAME 。

    这里不做过深的研究,只以com域为例演示反向区域的解析,并把实验适当简化(朋友们做相关实验的时候,最好每个一级域用一个网段实现)

    (2)在/var/named/目录下创建区域文件“name.com.zone”:

    这里我们只配置com域的反向解析哈,其他两个就不做了。

    (3)设置好权限和属组并重新加载配置文件和区域文件;

    (4)用dig命令检验配置结果:

    3、在192.168.80.13Linux主机上实现根域和一级域DNS服务器的辅助DNS:

    (1)安装bind服务并编辑主配置文件/etc/named.conf:

    (2)编辑/etc/named.rfc1912.zones,添加如下记录:

    (3)在根域DNS(192.168.80.11主机)的区域文件/var/named/root.zone中添加辅助DNS的NS记录和相应的粘附A记录,并重新加载区域文件:

    用dig命令测试:

    (4)在辅助DNS(192.168.80.13主机)上,编辑/var/named/named.ca文件,将上图中用dig命令查询的结果复制到/var/named/named.ca中:

    (5)在一级域DNS(192.168.80.12主机)的区域文件/var/named/root.zone中添加辅助DNS的NS记录和相应的粘附A记录(注意修改序列号),并重新加载区域文件:

    (6)在辅助DNS上启动named服务;

    (7)在辅助DNS上查看相应的区域文件是否已经同步过来:

    (8)用dig命令验证:

    4、在192.168.80.14Linux主机上实现magedu.com, test.net和magelinux.org域的解析,并给本地客户端(win7物理机)递归:

    (1)修改主配置文件:

    (2)创建区域文件:

    其它两个区域文件参照写即可,篇幅限制,不在赘述!

    (3)编辑/var/named/named.ca文件,将根域的NS记录和A记录添加进去:

    (4)检查配置文件和区域文件的属主、属组,并检查语法错误;

    (5)在一级域DNS(192.168.80.12主机)上,完成子域授权,并重新载入区域文件:

    其它二个子域的授权参照即可。

    (6)回到二级域DNS(192.168.80.14主机),启动named服务;

    (7)在win7物理机上测试:

    5、配置ACL:

    在上面的案例中,二级域DNS服务器允许所有客户端递归查询(只要网络通信没问题),例如在一级域DNS服务器上查询:

    我们可以定义ACL,只允许我们指定的主机来查询。ACL的基础知识参见上篇博文http://sweetpotato.blog.51cto.com/533893/1607383

    【配置ACL】

    在二级域DNS服务器上配置ACL,只允许本机回环地址127.0.0.1查询:

    (1)先定义acl:

    (2)acl定义后需要应用在区域文件中:

    (3)重新载入配置文件;

    (4)验证结果:

    上面用192.168.1.3这台win7物理机查询是可以查到的,现在再次做查询:

    拒绝查询哈!



    二、BIND的日志功能:
  • 1、BIND的日志系统基础:

    在默认情况下,bind服务把日志消息写到 /var/log/messages 文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息;而将调试日志信息写入 BIND 服务器工作目录中的 named.run 文件。bind日志配置是非常灵活,可以详细记录服务运行状况,自定义某些敏感信息、日志滚动等等。

    【BIND的日志定义】

    对bind来讲他的所有日志功能都是在主配置文件named.conf中的logging段中来记录的,而bind系统非常灵活,是由2组来定义:

    (1)定义一个channel,channel主要定义日志被发送到的位置;

    (2)定义哪些日志发送至channel或channel的日志发送到哪个位置;

    语法格式如下:

    logging{
    
           channel default_debug {              #定义channel;这里的defualt_debug 为自定义的channel名称
    
                   file"data/named.run";          #记录日志保存的位置
    
                   severity dynamic;              # severity定义日志级别;
           };
    
    };

    2、日志定义流程:

    (1)定义channel,主要定义日志被发送到哪里去;

    (2)category:比如启动一次区域传送,区域传送本身会产生日志或发送了一次区域查询也会产生日志,这是2个所谓不同的功能所产生的日志;

    (3)事实上bind一共内置15种category,在定义日志信息产生日志位置的时候也只能使用其中一种;

    (4)产生的信息可以被发往channel中去,由channel来决定发往哪个位置;

    (5)同一个category可以发往多个channel,但是一个channel只能记录一个category发来的信息;

    3、日志级别:

    所谓日志级别是所产生的信息有些是纯粹的调试信息,有些是说明信息,有些是警告,有些是紧急信息,所以这些信息的紧急程度也是有级别的。

    rsyslog总共定义了7种日志级别:

    critical   :紧急的,最高级别

    error

    warning :警告信息

    notice :需要引起注意

    info :默认级别

    debug[level]

    dynamic

    当我们指定日志级别之后包括这个级别以及比这个级别高的所有信息都会记录,而critical 是最高级别

    query日志级别共15个,分别为:

    default   #default类别匹配所有未明确指定通道的类别,但是不匹配不属于任何类别的消息。这些不属于任何类别的消息属于下面列出的这些类别。
    general   #包括所有未明确分类的BIND消息。
    client    #处理客户端请求。
    config    #配置文件分析和处理。
    database  #同BIND内部数据库相关的消息,用来存储区数据和缓存记录。
    dnssec    #处理DNSSEC签名的响应。
    lame-servers  #发现错误授权。
    network       #网络操作
    notify        #异步区变动通知。
    queries       #查询日志
    resolver      #名字解析,包括对来自解析器的递归查询的处理。
    security      #认可/非认可的请求。
    update        #动态更新事件。
    xfer-in       #从远程名字服务器到本地名字服务器的区传送。
    xfer-out      #从本地名字服务器到远程名字服务器的区传送。

    4、定义日志

    编辑主配置文件,找到logging段:

    [[email protected] ~]# cat /etc/named.conf
    
    logging{ 
    
           channel default_debug {
    
                   file"data/named.run";
    
                   severity dynamic;
    
           };
           channel querylog {                    #定义channel
                   file"/var/log/bind_query.log" versions 10 size 10M ;    #定义日志文件保存绝对路径,指定vsersions版本为10 日志大小为10M,超过10M则自动滚动
    
                     severity dynamic;              #定义日志级别为dynamic (动态)
    
                   print-time yes;                #记录额外信息
    
                   print-category yes;            #记录category信息
    
                   print-severity yes;            #记录日志级别信息
    
           };
    
           category queries { querylog; };     #query必须是15个级别中的其中一个,将query日志信息保存至刚定义的querylog组里去,
                                               #category日志可以发送至多个channel,但一个channel只能接收一个category信息
    };

    特别注意:

    query必须是15个级别中的其中一个,将query日志信息保存至刚定义的querylog组里去,category日志可以发送至多个channel,但一个channel只能接收一个category信息。

    最开始是没有日志文件的,方便起见,来手动创建配置文件,并授权:

    [[email protected] ~]# touch /var/log/bind_query.log
    
    [[email protected] ~]# chown named.named /var/log/bind_query.log
    
    [[email protected] ~]# named-checkconf
    
    [[email protected] ~]# rndc reload

    测试:

    我们使用另外一台测试机来对其使用dig命令查询解析

    [[email protected] ~]# dig -t A www.test.com @192.168.80.11

    再来查看其日志文件:

    [[email protected] ~]# tail /var/log/bind_query.log
    
    Jan 24 17:41:38  queries: info: client 192.168.80.11#32960: view internal: query:www.test.com IN A + (192.168.80.11)

    这里是使用query来实现日志的定义,如果将日志发往syslog的话,syslog会自动记录时间。

    小结:

    1、bind日志通过named.conf中的logging段来自定义的

    2、“channel”用来定义日志信息记录在何处,一般有两种形式:file 或syslog

    3、“category”记录哪个功能产生的日志信息,内置有15种category,不能自定义,只能使用其中一个,一个category产生的日志可以发往多个channel;而一个channel只能为一个category记录日志。


    本次博文的内容就这么多,欢迎各位指出错误之处!~~

    本文出自 “技术日志” 博客,请务必保留此出处http://sweetpotato.blog.51cto.com/533893/1607730

    时间: 2024-10-02 03:51:04

    Linux运维实战之DNS综合实验的相关文章

    Linux运维实战之DNS(bind)服务器的安装与配置

    上次博文我们讨论了DNS的基础,本次博文我们重点来看看如何配置一台DNS服务器. [本次博文的主要内容] bind服务器简介(包括客户端工具dig的介绍) 配置正向解析DNS服务器 配置反向解析DNS服务器 配置辅助DNS服务器并在主辅之间实现区域传送 一.BIND服务器简介: Bind是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件.Bind原本是美国DARPA资助伯克利大学(Berkeley)开设的一个研究生课题,后来

    Linux运维实战之DNS基础

    DNS服务作为网络的一种基础架构,在网络中有举足轻重的地位.它担负着整个网络用户计算机的名称解析工作.没有正确的名称解析,服务器就无法识别各客户机.我们日常进行的浏览网页等上网活动,无一例外都在使用DNS服务.本次博文我们就来谈谈DNS的基本知识. [本次博文的主要内容] DNS服务器的组成 DNS域名称空间 DNS服务器的工作原理 DNS的名称解析库及资源记录 一.DNS服务器的组成: [DNS是什么]: 由网络知识可知:两台主机之间相互通信依靠的是IP地址,而数字对我们人类来说难以记忆,所以

    linux运维实战练习-正则表达式

    一.linux运维实战练习题及解答 1.显示/etc/passwd文件中以bash结尾的行 2.显示/etc/passwd文件中的两位数或三位数 3.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行 4.添加用户bash.testbash.basher以及nologin用户(nologin用户的shell为/sbin/nologin):而后找出/etc/passwd文件中用户名与其shell名相同的行 5.显示当前系统上root.centos或者

    linux运维实战练习-2015年9月01日课程作业(练习)

    linux运维实战练习-2015年9月01日课程作业(练习)安排 一.作业(练习)内容: 1.复习本次课程所讲的内容 2.总结整理磁盘管理及文件系统管理中设计的各种命令的使用,并附注一定的示例: 在Linux中,一块磁盘能被使用(可以被访问.被写入.被存储)要有以下三个步骤: (1)进行磁盘分区,及创建分区 (2)创建文件系统 (3)挂载文件系统 (1)磁盘分区 创建分区的命令: fdisk, parted, sfdisk fdisk:最多支持在一块硬盘上的15个分区:fdisk提供了一个交互式

    linux运维实战练习-2015年9月5日课程作业(任务计划使用和练习)-JY1506402-19+liuhui880818

    作业目标:linux运维实战练习-2015年9月5日课程作业(练习)安排 作业环境:CentOS 6.7/7 x86_64 一.作业(练习)内容: 1.总结Linux系统上的任务计划(at.crontab)的详细使用方法: 2.每周一到周六的凌晨3点20分,运行cp命令对/etc/目录进行归档另存,存储位置为/backups/etc-YYYY-MM-DD: 3.每周日凌晨2点30分,运行cp命令对/etc/fstab文件进行备份,存储位置为/backup/fstab-YYYY-MM-DD-hh-

    linux运维实战练习案例-2015年12月20日-12月31日 (第一次)

    一.实战案例(练习)内容 假如你学习完Linux,想找一份儿Linux相关的运维工作,某天你接到一家公司给出的邀请,你来到该公司面试,面试前,运维主管给你出了一些简单的笔试题,题目如下: 1.创建一个10G的文件系统,类型为ext4,要求开机可自动挂载至单独数据/data目录: 操作步骤: (1).使用fdisk工具创建一个10G的分区 [[email protected] ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2). 更改将停留在内存中,

    Linux运维实战之Apache2.4编译安装及其新特性

    上次博文我们具体讨论了Apache(httpd)的理论知识和配置: HTTP协议基础(参见博文:http://sweetpotato.blog.51cto.com/533893/1656137) Apache2.2的基本配置(参见博文:http://sweetpotato.blog.51cto.com/533893/1657668) Apache2.2的虚拟主机(参见博文:http://sweetpotato.blog.51cto.com/533893/1660229) 基于https的Apac

    Linux运维实战之Apache的基本配置(全局配置、主服务器配置):

    上次博文我们具体讨论了http协议(参见:http://sweetpotato.blog.51cto.com/533893/1656137),本次博文我们来具体配置一台Apache(httpd)服务器. 本次博文的主要内容: httpd相关包信息 httpd的安装及主页面 httpd的配置文件 httpd的全局配置 httpd的主服务器配置 一.httpd的RPM包介绍及其相关信息: RHEL5和RHEL6略有不同: 下图是RHEL5上httpd相关包的信息: 下图是RHEL6上httpd相关包

    Linux运维实战之文件系统、链接文件

    计算机操作系统作为最重要的系统软件,被用户直接使用的部分就是它的文件管理.因为用户使用计算机遇到的首要问题是如何保存程序和数据,然后如何查找.复制.删改它们.文件管理就是为用户的这些问题而设置的. 本次博文的主要内容: 1.文件系统基础(文件的概念.分类及存储机制) 2.从文件系统管理机制角度理解文件的复制.移动和删除 3.ext文件系统的扩展属性 4.硬链接和软链接 一.文件系统基础: 1.什么是文件系统: 操作系统中负责管理和存取文件信息的软件机构叫做文件系统.文件系统的目标是向用户提供简便