第六周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 只编译核心不编译模块

上一篇:kafka_2.11-0.8.2.2的搭建


下一篇:mvc与三层结构终极区别