欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LINUX系统与dns服务

程序员文章站 2022-05-08 17:42:47
DNS服务 DNS:Domain Name Service //协议 实现:BIND(Berkeley Internet Name Domain) 监听端口: UDP:53 TCP:53 名称解析:将一种格式的信息转化为另外一种格式,以某关键字为标准查找某一数据库的过程passwd <--> nss ......

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