首页 技术 正文
技术 2022年11月15日
0 收藏 761 点赞 3,992 浏览 6788 个字

概念介绍

  1. DNS的分类

    • 主DNS:配置管理,不提供服务,只用来编辑配置信息,给从DNS提供同步数据
    • 从DNS:从主DNS上同步数据信息,对外提供服务
    • 缓存DNS:在主DNS和从DNS之间,用来递归解析
    • 转发器:forwarder,本地不存储任何解析信息,转发给其他DNS来做解析
  2. 记录类型

    • SOA:备注信息
    • NS:域名解析服务器,也就是某一个域的名称服务器,存储了该域的所有解析信息
    • MX:邮件交换记录,优先值越小,优先级越高
    • A:Address,域名和地址的映射关系记录,IPv4,输入域名,解析得到地址
    • AAAA:IPv6的A记录
    • PTR:反向解析记录,地址和域名的映射关系,输入地址,解析得到域名
    • CNAME:别名记录
  3. 解析原理

    DNS的解析是一个树形结构,根节点是.,在根节点以下,全世界有13个节点服务器,所有其他的域名都是直接或间接归属到.域,比如.com、.cn等域名,世界上后面还有一个.。

    DNS的查找原理是递归,当客户端去请求某一个域名的地址时,显示查看本地的缓存(可以是本地hosts),如果本地缓存中有记录,则直接返回IP地址开始请求,如果本地缓存中没有,则会向本地DNS服务器去请求该域名,如果DNS服务器上有,则返回本地,本地进行缓存,然后开始请求;如果DNS服务器上没有,则会通过转发器,向上一级DNS服务器去请求,层层递归,直到解析到,或者超出范围。

    DNS的服务递归,最大64层。

  4. 常用的工具

    dig nslookup host

安装过程

  1. 安装dns

    DNS在linux上安装的名称为bind,如果是要搭建DNS服务器,需要在服务器上,安装bind应用。

    yum install -y bind-utils bind bind-devel bind-chroot
  2. 编辑主配置文件/etc/named.conf

    在安装过程的时候为bind,而实际的配置文件则成为named,其中主配置文件为/etc/named.conf文件,默认情况下,是将该配置文件备份后,重新编写该配置文件。下面是本机安装时的配置文件示例。

    [root@master ~]# cat /etc/named.conf
    options {
    version "1.1.1";
    listen-on port 53 {any;};
    directory "/var/named/chroot/etc/";
    #pid-file "/var/named/chroot/var/run/named/named.pid";
    pid-file "/run/named/named.pid";
    allow-query { any; };
    Dump-file "/var/named/chroot/var/log/binddump.db";
    Statistics-file "/var/named/chroot/var/log/named_stats";
    zone-statistics yes;
    memstatistics-file "log/mem_stats";
    empty-zones-enable no;
    forwarders {192.168.64.2; };
    };key "rndc-key" {
    algorithm hmac-md5;
    secret "Eqw4hClGExUWeDkKBX/pBg==";
    };controls {
    inet 127.0.0.1 port 953
    allow { 127.0.0.1; } keys { "rndc-key"; };
    };logging {
    channel warning {
    file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
    severity warning;
    print-category yes;
    print-severity yes;
    print-time yes;
    };
    channel general_dns {
    file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
    severity info;
    print-category yes;
    print-severity yes;
    print-time yes;
    };
    category default {
    warning;
    };
    category queries {
    general_dns;
    };
    };include "/var/named/chroot/etc/view.conf";

    其中主要的配置点为:

    • 端口:53,默认是TCP和UDP都会监听,通常使用UDP,当出现穿越的时候,使用TCP
    • zone 配置文件目录:directory,默认放在/var/named/chroot/etc/下
    • pid文件:pid文件,在CentOS 7中,默认的pid文件应该是在/run/named/named.pid,如果不在这个地方,named进程会等到超时,而导致启动失败,原因是该文件不可读。这个问题曾经困扰了我好久,最后还是通过看系统日志,才知道的。
    • forwarders:转发器,当本地DNS无法解析到是,上级DNS的地址
    • rndc-key:动态加载DNS解析信息,通过rndc进行操作,rndc和named之间的交互,是通过rndc-key来进行认证的
    • rndc controls:默认监听本地的953端口
    • 日志文件定义和使用
  3. rndc配置

    主要是配置rndc.key文件和rndc.conf文件,这两个文件默认是不存在的,直接编辑创建就可以了。

    [root@master ~]# cat /etc/rndc.key
    key "rndc-key" {
    algorithm hmac-md5;
    secret "Eqw4hClGExUWeDkKBX/pBg==";
    };
    [root@master ~]# cat /etc/rndc.conf
    key "rndc-key" {
    algorithm hmac-md5;
    secret "Eqw4hClGExUWeDkKBX/pBg==";
    };options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
    };

    在这里配置的key和options,必须要和主配置文件中的一致。

  4. 配置view文件

    view文件,就好比是zone配置文件,一个概要文件,在该文件中可以定义zone的文件、主从配置关系等等。这里我们以abc.com为例,配置一个view文件。该文件的位置,就是named.conf的include文件位置。

    [root@master ~]# cat /var/named/chroot/etc/view.conf
    view "View" {
    zone "abc.com" {
    type master;
    file "abc.com.zone";
    allow-transfer {
    192.168.64.132;
    };
    notify yes;
    also-notify {
    192.168.64.132;
    };
    };
    };
  5. 配置zone文件

    配置好view文件之后,就可以根据view中的zone信息,创建配置zone文件。

    [root@master ~]# cat /var/named/chroot/etc/cnpc.com.zone
    $ORIGIN .
    $TTL 3600 ; 1 hour
    abc.com IN SOA op.abc.com. dns.abc.com. (
    2000 ; serial
    900 ; refresh (15 minutes)
    600 ; retry (10 minutes)
    86400 ; expire (1 day)
    3600 ; minimum (1 hour)
    )
    NS op.abc.com.
    $ORIGIN abc.com.
    op A 192.168.64.131
    salt A 192.168.64.131

    在这个配置文件中,实际上就是配置zone里面的各种解析的信息,比如SOA、NS、A记录等。

  6. 启动服务

    上面所有文件配置完成之后,就需要可以启动服务了,默认启动服务是使用named用户,所以需要将/var/下的named目录的归属,改为named.named。然后就可以启动服务了。

    cd /var
    chown -R named.named named
    systemctl start named
  7. 解析测试

    使用dig命令,可以去解析之前定义的A记录

    dig @127.0.0.1 salt.abc.com

    @是指定DNS服务器。

    解析的时候,可以通过查看访问日志,知道dns的使用情况,/var/named/chroot/var/log/dns_log

主从配置

  1. 概述

    刚才安装了一个DNS服务器,作为某一个zone 的master服务器,现在要为该zone配置一个slave服务器,实现在master上增加DNS记录信息,主动同步给slave节点。主要需要配置的就是master上指定slave,也就是notify,而在slave上,则必须要制定master,一个slave可以同时拥有多个masters。

  2. 安装过程

    salve的安装过程,和master类似,前面的/etc/named.conf /etc/rndc.key /etc/rndc.conf都是可以完全一样的,唯一不同的是,salve上的view.conf文件需要注意,而zone file文件可以不用写,直接从master服务器上进行同步即可。

    salt-cp '192.168.64.132' /etc/named.conf /etc/named.conf
    salt-cp '192.168.64.132' /etc/rndc.key /etc/rndc.key
    salt-cp '192.168.64.132' /etc/rndc.conf /etc/rndc.conf
    salt-cp '192.168.64.132' /var/named/chroot/etc/view.conf /var/named/chroot/etc/view.conf [root@localhost etc]# cat view.conf
    view "View" {
    zone "abc.com" {
    type slave;
    file "abc.com.zone";
    masters { 192.168.64.131;
    };
    };
    };

    在slave的view配置文件中,与master不同的是,type为slave,而其他都不用写,指定一个masters就可以了。

  3. 启动服务

    当配置好salve节点之后,就可以直接启动了,在启动之后,会自动生成zone file文件,然后通过dig命令,使用本地进行解析,如果能得到正确的返回,就证明这个时候已经同步了。

    [root@localhost etc]# dig @127.0.0.1 salt.abc.com; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> @127.0.0.1 salt.abc.com
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56444
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;salt.abc.com. IN A;; ANSWER SECTION:
    salt.abc.com. 3600 IN A 192.168.64.131;; AUTHORITY SECTION:
    abc.com. 3600 IN NS op.abc.com.;; ADDITIONAL SECTION:
    op.abc.com. 3600 IN A 192.168.64.131;; Query time: 0 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Sat Apr 20 14:56:41 CST 2019
    ;; MSG SIZE rcvd: 91
  4. 同步设置

    在master主机上,增加一条A记录,是要修改master的zone配置文件,除了要添加一条A记录之外,还要修改该zone的serial值,如果不修改,是无法同步给slave的。修改完成之后,需要执行rndc reload,动态加载DNS的解析。然后分别在master和slave上进行解析测试,如果都能正常范围,则表示主从同步是生效的。

  5. 增加DNS记录

    默认修改DNS配置文件时,要修改zone的serial值,在执行rndc reload之后,能够同步给slave节点。

    • A记录

      在zone文件中添加,直接编辑配置文件,比如在abc.com.zone配置文件中增加一条A记录,格式为 域名 A IP,修改完成后,同步给slave,通过dig host都能进行解析

    • CNAME记录

      CNMAE记录是个别名记录,就是将域名A映射到域名B上,实际上解析到的地址是域名B的地址。格式为:

      域名A     CNAME   域名B
      a A 1.2.3.4
      b CNAME a
      c A 2.3.4.5
      mx mx 5 a
      mx mx 10 c
      [root@master etc]# host b.abc.com 127.0.0.1
      Using domain server:
      Name: 127.0.0.1
      Address: 127.0.0.1#53
      Aliases: b.abc.com is an alias for a.abc.com.
      a.abc.com has address 1.2.3.4
    • MX记录

      也是在zone文件中增加,格式为:

      域名      MX      PRIORITY    域名
      mx MX 5 mail

      实际上MX记录,对应的是一个A记录,然后通过A记录,递归查找到最后MX对应的IP地址。

      [root@master etc]# host mx.abc.com 127.0.0.1
      Using domain server:
      Name: 127.0.0.1
      Address: 127.0.0.1#53
      Aliases: mx.abc.com mail is handled by 5 a.abc.com.
      mx.abc.com mail is handled by 10 c.abc.com.

      同一个MX域名可以对应多条记录,结果按照优先级排列,优先级值越低,优先级越高,解析出来的排序就越高。

    • PTR记录

      PTR记录不仅仅是需要配置zone文件,是需要在zone配置文件view中,重新创建一个zone,然后创建该zone的目录文件,然后才能进行解析,将IP解析成对应的域名。

       zone "168.192.in-addr.arpa" {
      type master;
      file "192.168.zone";
      allow-transfer {
      192.168.64.132;
      };
      notify yes;
      also-notify {
      192.168.64.132;
      };
      };

      然后创建一个192.168.zone的配置文件,编辑解析记录。

      [root@master etc]# cat 192.168.zone $TTL 3600       ; 1 hour
      @ IN SOA op.abc.com. dns.abc.com. (
      2000 ; serial
      900 ; refresh (15 minutes)
      600 ; retry (10 minutes)
      86400 ; expire (1 day)
      3600 ; minimum (1 hour)
      )
      NS op.abc.com.
      131.64 IN PTR master.abc.com

      实际上的这条解析记录意思是192.168.64.131 对应解析到的域名是master.abc.com

      [root@master etc]# host 192.168.64.131 127.0.0.1
      Using domain server:
      Name: 127.0.0.1
      Address: 127.0.0.1#53
      Aliases: 131.64.168.192.in-addr.arpa domain name pointer master.abc.com.168.192.in-addr.arpa.

      解析的结果131.64.168.192.in-addr.arpa master.abc.com.168.192.in-addr.arpa. 实际上要看的就是zone之前的内容,后面的都是zone的名称

      增加了PTR记录之后,slave默认是不会自动同步的,因为修改了view文件,这个时候就需要在slave上手动创建zone,和之前的zone一样,从master上进行同步。

TIPS

  1. DNS可以做简单的LB,因为DNS对应关系是一个多对多的对应关系,在对同一个域名进行解析的时候,会采用轮询的方式,向客户端返回请求的域名对应的地址,也就是说,在一定程度上,能够实现LB负载。
  2. 智能DNS:根据客户端的地址,来解析到对应的地址,这个方式和CDN缓存差不多,都是基于客户端来进行判断的,保证解析到的地址,是客户端最快能访问到的。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849