• 第六周LINUX学习笔记


                                                                                                                                      DNS服务

    DNS:Domain Name Service //协议
         实现:BIND(Berkeley Internet Name Domain)
         监听端口:
            UDP:53
            TCP:53

        名称解析:将一种格式的信息转化为另外一种格式,以某关键字为标准查找某一数据库的过程

    passwd <--> nsswitch转换
    login:nsswitch为login提供服务
    nsswitch配置文件在/etc/nsswitch

    hosts:存放的为主机与ip、别名


    由于主机是在太多,所以将数据库和服务器进行分片管理。 分布式数据库:将数据库切割,放在不同的服务器上。实际上还需要一个类似于"引路人"一般的放置着引导向各个分布式数据库的数据库的服务器。当外部需要进行DNS域名转换时,便告诉他需要到哪个数据库上进行名称解析,再找到那个数据库。实际上每个数据库都要通过这个服务器进行登记备案。否则将不承认,也无法找到你自己所建立的。实际上,由于数量过大,一些分布式数据库需要再进行分布。
    其中的结构其实可以类比成Linux上的根文件系统,每个人都要通过根为入口来进行访问文件和目录,底下的目录一层套着一层,最终才能找到自己需要的文件。

    根域(.)-->一级域(ICCNA)-->二级域(组织域)  实际上我们平时输入的域名都是自下而上进行输入的如(www.baidu.com)www是最小的域,由此自下而上。

    namespace:名称空间

    一级域:
        组织域:.com,.org,.mil,.gov,.edu,
        国家域:.cn,.hk,.tw,.jp,.ir(伊朗),.iq(伊拉克),.us,.uk
        反向域:.in-addr.arpa
    另外任何想要访问其他主机信息的,都需要以跟作为入口去寻找,除非是在同一个服务器管辖下的域名,只需要找自己的服务器就行。但是确又不会进行逐层的递归解析,否则根的工作量太大。每一次访问的时候,都只会告诉其一个下一次要寻找的地址让他自行去寻找。如找到根,根返回消息说让他去找.com,于是.com再说你去找baidu 直到找到负责管辖的 再给以正确的IP地址信息。

    递归:逐层解析
    迭代:DNS才会迭代
    根拒绝回答递归问题  所谓的递归和迭代在这边通俗一点讲,就是递归只需发出一次请求就能够收到消息。而迭代则是发出好几次请求。

    客户端指向的DNS服务器,一定是允许给本地主机做递归的

    数据库每一个条叫一个资源记录(Resource Record),资源记录有类型 ,用于表示资源的功能
    SOA:Start Of Authority,起始授权
    NS:Name Server,域名服务器
    MX:mail eXchanger:邮件交换器
    A:Address,(FQDN-->IP)
    PTR: PoiTeR,(IP-->FQDN)
    AAAA:Address,FQDN-->IPv6
    CNAME:Canonical Name,正式名称(别名记录)

    DNS:FQDN --> IP

    正反向解析技术不同,因此不应该存放于同一个数据库文件中进行

    域:Domain,逻辑概念
    区域:zone,物理概念

    DNS服务器的类型
       主DNS服务器
       辅助DNS服务器  辅助服务器不能够自行的血区域数据文件,只能够从主服务器上读取。该过程称为区域传送
       缓存名称服务器
         转发器


    DNS的数据库文件(区域数据文件,区域自身有名字):文本文件,只能包含资源记录或宏定义,每行一个

       资源记录的格式:
          name [ttl(缓存时间)] IN 资源记录类型(RRtype)  Value
        例子:
           www  600(单位s) IN A 1.2.3.4
           www.magedu.com.  600 IN A 1.2.3.4

     SOA:
            name:只能是区域名称,通常可以简写为@,例如:magedu.com.
            value:有n个数值,最主要的是主DNS服务器的FQDN,点不可省略
            注意:SOA必须是区域数据库文件第一条记录

            例子:
             @ 600 IN SOA  na.magedu.com. 管理员邮箱(dnsadmin.magedu.com.)(
                 序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期,例如2014031001 用以让辅助服务器知道数据发生了改变的,主服务器上每次数据改变,序列号都会发生改变
                 刷新时间(refresh time) ;即每隔多久到主服务器检查一次
                 重试时间(retry time) ;应该小于refresh time
                 过期时间(expire time)
                 netgative answer ttl ;否定答案的ttl
             )
     
        NS:可以有多条
           name:区域名称,通常可以简写为@
           value:DNS服务器的FQDN(可以使用相对名称)
           例子:
           @ 600 IN NS na
     
        A:只能定义在正向区域数据文件中
           name:FQDN(可以使用相对名称)
           value:IP

           例子:
           www  600(单位s) IN A 1.2.3.4
           www  600(单位s) IN A 1.2.3.5
           可做轮询

           www  600(单位s) IN A 1.2.3.4
           ftp  600(单位s) IN A 1.2.3.4
        但凡以FQDN做为其值的记录,应该给这个值做一条A记录
    AAAA:

     MX:可以有多个
           name:区域名称,用于标识smtp服务器
           value:包含优先级和FQDN
               优先级:0-99,数字越小,级别越高,
           例子:
            @ 600 IN MX 10 mail
            @ 600 IN MX 20 mail2 先找优先级高的,实在太过繁忙,则找第二个。并没有在轮换工作


        PTR:IP --> FQDN,只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in.addr.arpa.后缀组成
         name:IP,逆向的主机地址,例如172.16.100.7的name为7.100,完全格式为7.100.16.172.in-addr-arpa.
         value:FQDN
             例子:
              4.3.2. 600 IN PTR www.magedu.com.

    区域传送:
       辅助DNS服务器从主DNS服务器或其他的辅助DNS服务器请求数据传输过程

       完全区域传送:传送区域的所有数据,AXFR
       增量区域传送:传送区域中改变的数据部分,IXFR

    辅助服务器按时间段去跟主服务器进行请求数据的跟新,如果多次主服务器未能响应请求,则认为主服务器瘫痪,不再与主服务器进行通信(一般相关规定定义在SOA中了)。另外主服务器如果有数据跟新,也会立刻通知辅助服务器数据的跟新,以实现数据的同步


     BIND:组织维护者isc(www.isc.org) DHCP
         4:功能简单,安全
         9:

        协议DNS,实现BIND,进程named

        chroot 为安全提供的机制 chroot假根,让其以这个作为根,保证安全性

    主配置文件:定义区域 /etc/named.conf
        至少有三个区域:
          根、
          locahost、
          127.0.0.1
    区域数据文件:/var/named

       named
           用户:named
           组:named   
     先由主配置文件声明各种区域,然后再到/var/named 文件目录下读取相关的区域数据文件
    主配置文件:
       options{
            //全局选项
       }
       zone "zone name" {
          //定于区域
       }
       logging{
           //日志文件
       }
       include:加载别的文件

    自定义
    optins{
        directory "/var/named";
    };
      zone "." IN{
       type{hint(根)|master(主)|slave(从)|forward(转发)}
       file "named.ca"
      }

    例子如果你申请到了域名test.com
    那么你可以配置
     zone "test.com." IN{
       type{master(主)}
       file "test.com.zone"
      }
    再在/var/named目录下创建test.com.zone文件 文件内容
    $TTL 600
    @    IN    SOA   dns.test.com.   admin test.com.(
                                  .
                                  .
                                  )
    @   IN NS   dns (这里用了SOA上定义的相对名称)
    @   IN MX 10 mail
    dns IN A    192.168.48.128
    mail IN A  192.168.48.128
    www IN A 192.168.48.128
    pop IN CNAME mail
    ftp IN CNAME www
    之后改个属组属主和权限

    name-checkconf 检查主配置文件
    named -u named
    name-checkzone "区域文件" 配置文件

    定义监听的地址

    recursion 是否允许递归查询

    dig 命令
      dig [-t type] [-x addr] name @DNS服务器
      +[no]trace [不]适用迭代
      +[no]tcp 是否使用tcp
      +[no]recurse:是否使用递归
    host
      host[-t type] {name} [server]

    nslookup
      nslookup>
      server DNS_SERVER_IP
      set q=TYPE
      {name}

    反向解析区域数据库文件:区域名称以逆向的网络地址,并以.in-addr.arpa为后缀
       第一条必须SOA
       应该具有NS记录,但不能出现MX和A记录
       较常见的微PTR记录
        名称为逆向的主机名
    $TTL 600
    @    IN    SOA   dns.test.com.   admin test.com.(
                                  .
                                  .
                                  )
    @   IN NS   dns (这里用了SOA上定义的相对名称)
    @   IN MX 10 mail
                     IN  NS  dns.test.com
    7               IN  PTR dns.test.com
    1               IN  PTR www.test.com

    区域传送:
      用dig模拟完全区域传送
       dig -t axfr 区域名称 @server

       主从同步:

           /etc/resolv.conf
      主从:
        主:bind版本可以低于从的

        主从可以不再同一网段

       向区域中添加从服务器的关键两步
          在上级获得授权
          在区域数据文件中为从服务器添加一条NS记录和对应的A或PTR记录,另外SOA里的序列号也要加个1
    配置从服务器的步骤

    zone"test.com" IN {
           type slave;
           masters {192.168.48.128; };
           file "slaves/test.com.zone" ; 注意这里辅助服务器的区域数据文件需要放在/var/named/slaves下
    };

    区域传送安全控制
        allow-transfer{127.0.0.1;127.16.100.1}
        allow-transfer{none;}

    rndc:Remote Name Domain Controller
          远程管理BIND的工具

          rndc:密钥
            rndc:持有一半密钥,保存于rndc的配置文件中
            BIND:持有一般密钥,保存在主配置文件中
         rndc的配置文件/etc/rndc.conf    现在好像已经没有了
            生成密钥 rndc-confgen   生产的密钥文件中的一半用于BIND的文本复制到BIND的主配置文件中将注释去掉 便可以使用rndc

     rndc
            reload
            reload zone
            reconfig:重读配置文件并加载新增的区域

            querylog:关闭或开启查询日志
            stop  关闭服务
            flush 清空服务器的缓存
            flushname name:只清空指定名称相关的缓存
            trace:打开debug,调试模式,debug有级别的概念,每执行一次提升一个等级
            trace LEVEL:指定debug的级别

            如果rndc无法正常工作,可尝试使用rndc-confgen生成/etc/rndc。conf配置文件,并将配置文件中的后半部分复制到BIND的主配置文件中按指示启用即可


    BIND子域授权的实现:
       在父域的配置文件中添加如下项:
          授权的子区域名称
          子区域的名称服务器
          子区域的名称服务器的IP地址
     例子:
         

          tech.test.com IN NS  dns.tech.test.com
          dns.tech.test.com IN A 192.168.48.160  
          tech.test.com IN NS  ns2.tech.test.com
          ns2.tech.test.com IN A 192.168.48.161 另外子域服务器需要副服务器的话,也需要再主服务器上进行标明

          接着子域服务器,需要同主服务器那样配置属于自己的DNS服务器
        
          子域服务器与主副服务器最大的配置差别就是,子域服务器的域名和父服务器的域名是不同的,而主副服务器的域名是相同的

    配置区域转发:转发域
          解析某本机不负责的区域内的名称时不转发给根,而是转给指定的主机:
       zone "ZONE NAME" IN{
        type forward;
        forwarders { DNS_SERVER; };
        forward only(仅转发)|first(先转发在找根)
       }
       配置转发的方式
         转发非本机负责解析的所有区域
          options{
            forward only|frist
            forwarders{ ip; }
           }  
          转发某特定区域
           zone"特定区域" IN{
           type forward;
            forwarders{ ip; }
            forward only|frist
           }
           转发必须对方服务器支持对本服务器的递归  
    安全控制选项:
       allow-transfer{};通常都需要启用,从服务器
       allow-query{};此项仅用于服务器是缓存名称服务器时,只开放查询功能给本地客户端
       allow-recursion{可以使用网段};允许递归的白名单
       allow-update{ none; }:允许动态更新数据文件的主机白名单

    ACL:BIND支持使用访问控制列表
        acl ACL_NAME{
          172.16.0.0/16
          192.168.0.0/24
          127.0.0.0/8
        }

      访问控制列表只有定义后才能使用,通常acl要定义在named.conf的最上方
      BIND有四个内置的acl
        any:任何主机
        none:无一主机
        local:本机
        localnet:本机所在的网络
                         

                                                                              DNS编译安装,view视图,LINUX完全定制内核

    3月11



     view 视图,逻辑的DNS服务器,即能够让不同网络(如电信和网通)访问同一个域名时,使其指向不同的主机IP实现访问速度的加快。能够实现让一个view实现多次
         acl telecom{
         1.2.0.0/16
         4.5.8.0
         }
         acl unicom{
         6.4.0.0/16
         4.5.3.0
         }
        view view_name {
            match-clients{ telecom; }
           zone"magelinux.com" IN{
           type master;
            file "magelinux.com.telcom";
           }

         }
        view view_name {
            match-clients{ unicom; }
           zone"magelinux.com" IN{
           type master;
            file "magelinux.com.unicom";
           }

         }
          view view_name {
            match-clients{ any; }
           zone"magelinux.com" IN{
           type master;
            file "magelinux.com.unicom";
           }

         }
         只要写入view,所有的都应该写在view中 包括将/etc/named.conf下的zone "."根也放在view中
         自上而下匹配

     /dev/random:自动生成
       熵池
     /dev/udandom:软件生成


     

     bind dlz
     rndc reeconfig


     源码安装named
     thrads 线程
     epoll 时间库
     --diabled-chroot               
     前提:配置好开发环境,安装包组
     1.下载源代码。编译安装
       tar xf bind-9.9.5.tar.gz
       cd bind-9.9.5
       ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/--enable-threads --enable-epoll --disabled--chroot
     make && make install
    2配置主配置文件
    3.创建区域数据文件
     3.1 name.ca
      dig -t NS @ >/var/named/named.ca
      3.2 name.localhost
      3.3 named.loopback
    4创建用户,并测试启动
      groupadd -g 53 -r named
      useradd -g named-r named
      chown root:named /etc/named/* /var/named/*
      chmod 640 /etc/named/named.conf /var/named/*
      vim /etc/profile.d/nmaed.sh
    export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH'
     
      named -u named -c /etc/named/named.conf
      5、rndc
      rndc -confgen -r /dev/
      6、准备启动脚本DNS 编译安装 02 23分到53分
      7、性能测试
         banckmark
         queryperf
         dnstop

    <DNS and BIND>



    bash编程之变量
       1、bash的内置变量:
       PATH PS1 HOSTNAME UID HISTFILE HISTEILESIZE HISTCONTROL
       $BASH:bash二进制程序文件的路径
       $BASH_SUBSHELL:子shell的层次
       $BASH_VERSION

       $EDITOR:默认编辑器

       $EUID:有效的用户ID
       $UID:当前用户的ID号

       $FUNCNAME:当前函数的名称

       $GROUPS:当前用户显示的组

       $HOME:当前用户的家目录

       $HOSTTYPE:主机架构类型,用来识别系统硬件
       $MACHTYPE:平台类型,系统平台依赖的编译平台
       $OSTYPE:OS系统类型
       
       $IFS:输入数据时的字段分隔符,默认是空白符(空格、制表符、换行符)

       $OLDPWD:上次使用的目录
       $PWD:当前目录

       $PPID:父进程

       $PS1:主提示符
       $PS2:第二提示符,主要用于补充完全命令输入时的提示符
       $PS3:第三提示符,用于select命令中
       $PS4:第四提示符,当使用-X选项调用脚本时,显示的提示符,默认为+号

       $SECONDS:当前脚本已经运行的时长

       $SHLVL:shell的级别。bash别嵌入的深度

       2、特殊变量:
           $0:脚本名称自身
           $1,$2。。。。:位置参数
           $#:命令行参数个数
           $*:所有的参数,被当作一个字符串
           $@:所有的参数,每个参数都是一个独立的字符串
           $-:传递给脚本的标记
           $!:运行于后台的最后一个作业的PID
           $_:上一条命令的最后一个参数的值
           $?:上一条命令状态的返回值
           $$:脚本自身的PID

        操作变量:
            ${#var} :返回变量中字符串的长度
            ${var}:变量引用
            ${var:-default}:如果var没有声明或者为空,则返回default字串,否则返回var自身的值
            ${var:+default}:如果var没有声明或者为空,则返回空字串,否则返回default的值
            ${var:=default}:如果var没有声明或者为空,则返回default字串,并且将default赋值给var,否则返回var自身的值
            ${var:?default}:如果var没有声明或者为空,则以default为错误信息返回,否则

            zb 返回var自身的值

        字串消除
            ${var#*word}:查找var中自左而右第一个被word匹配到的串,并将此串及向左的所有内容都删除
            ${var#*word}:查找var中自左而右最后一次被word匹配到的串,并将此串及向左的所有内容都删除
            ${var%word*}:查找var中自右而左第一个被word匹配到的串,并将此串及向右的所有内容都删除
            ${var%%word*}:查找var中自右而左最后一次被word匹配到的串,并将此串及向右的所有内容都删除

        取字串:
          ${var:pos}:偏移pos个字符,取余下的字串
           name=jerry,${name:2}结果为rry
          ${var:pos:num}偏移pos个字符,取num个字符长度的字串
            name='hello world' ${name:2:5}结果为llo w
        
        字串替换
          ${var/Pattern/Replaceplacement} :以Pattern为模式匹配var中的字串,将第一次匹配到的替换为Replaceplacement
          ${var// Pattern/Replaceplacement} :以Pattern为模式匹配var中的字串,将全部匹配到的替换为Replaceplacement6


       声明变量:
          declare
             -i:整形
             -a:数值
             -x:环境变量
             -r:只读变量,不能撤销,不能修改,相当于readonly
             -f:声明函数

    OpenSSH:
      ssh OpenSSH
      安装配置dropbear              
      1.编译安装
      tar
      cd
      ./configure
      make PROGRMS="dropbear dbclient dropberkey scp"
      make PROGRMS="dropbear dbclient dropberkey scp" install
      2.脚本
      3配置文件位置/etc/sysconfig/dropbear
      keysize=2048
      port=22022
      4后配置
      chmod +x /etc/rc.d/init.d/dropbear
      chkconfig -add dropbear


      定制Linux内核
        tar -xf -C /usr/src
        cd /usr/src/linux
        cp /boot/config-VERSION     /usr/src/linux/.config   自己选的可能会导致驱动的缺少,所以复制一份模板,再执行make menuconfig来增删改查

        make menuconfig
        make
        make modules_install
        make install

        make clean
        make mrproper
        make distclean

        单内核:核心+ko模块
         /lib/modules/VERSION

         make allnoconfig 自定义一个最小功能的内核,能够让系统正常运行。此时就需要完全配置
       第一步 给一个将要被新主机识别的装有内核文件的磁盘不需要太大。
        fdisk  /dev/sdb 创建新分区,并添加2个分区 sdb1 50M sdb2 512M
       mke2fs  -t ext4 /dev/sdb1 /dev/sdb2 分区格式化
       mkdir  /mnt/{boot,sysroot}
       mount  /dev/sdb1 /mnt/boot
       mount  /dev/sdb2 /mnt/sysroot   创建两个虚拟的根目录,将磁盘挂在到上面
       grub-install -root-directory=/mnt  /dev/sdb  安装grub
       第二步 下载一个内核版本 假设叫linux3.1
       tar xf linux3.1.tar.xz -C /usr/src  解压内核文件
       cd /usr/src
       ln -sv linux.3 linux 软连接一下(猜测应该是便于被系统识别)
       make allnoconfig   将.config文件中的绝大部分可以省略的内核功能给关闭
       make menuconfig  定制内核  这边省略 较复杂,可以看视频如何定制的,10-17分
       make bzI(大写的i)mage  这个只编译压缩格式的内核核心,并不编译内核模块
       cp arch/x86/boot/bzImage /mnt/boot/
       vim /mnt/boot/grub/grub.conf  此处省略
       default=0
       timeout=3
      title Customzed Linux
       root (hd0,0)
       kernel  /bzImage ro root=/dev/sda2 init=/bin/bash

    为什么要将bash 软连接成 sh ,难道识别的时候是识别sh吗?


         PC Server CPU + men + i/o
         make bzImage 只编译核心不编译模块

  • 相关阅读:
    给大家带来一些 horm的一些知识!
    标准文档流和伪类选择器
    列表 ul ol dl 和 块级标签和行及标签之间的转换
    <a>标签的特殊和文本的样式
    大家好,又是新的一天。今天给大家带来一些新的知识:选择器的种类和css的三种样式
    html 基础知识
    四级CET大学词汇六级备份
    大学外语四六级英语词汇CET
    单词大学CET六四级英语
    单词英文速记考研词汇英语
  • 原文地址:https://www.cnblogs.com/gohrx/p/10670208.html
Copyright © 2020-2023  润新知