概念介绍

  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缓存差不多,都是基于客户端来进行判断的,保证解析到的地址,是客户端最快能访问到的。

DNS bind使用的更多相关文章

  1. 第7章 DNS & bind从基础到深入

    本文目录: 7.1 DNS必懂基础 7.1.1 域的分类 7.1.2 主机名.域名.FQDN 7.1.3 域的分层授权 7.1.4 DNS解析流程 7.2 DNS术语 7.2.1 递归查询和迭代查询 ...

  2. DNS(bind)服务器安装和配置

    一.前言 DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP ...

  3. DNS bind子域授权安装

    失败经验:rhel 6.x bind 9.8,两台做子域授权,最后失败.原因不详. 改用rhel 5.5, bind 9.3,同样的配置,就成功了.具体记录一下9.3的配置. 安装:采用安装RHEL时 ...

  4. 为linux dns (bind named)服务器配置 单独的笔记

    注意: 当在把 named.ca文件下载好13个根dns服务器的 全球记录后, 就不再需要别的 dns服务器来辅助获得了. 只要把所有 本地服务器 不能解析的请求, 都发送到 . 点根去就行了, 所以 ...

  5. dns bind配置教程

    实验环境 三台centos7虚拟机,一台ip为192.168.52.130,一台为192.168.52.131,最后一台为192.168.52.132 安装bind 使用yum -y insall b ...

  6. DNS Bind服务配置解析

    DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 一.DNS服务器工作模式分类: 1.主服务器:在特定区域内具有唯一 ...

  7. DNS/BIND in Debian

    Debian official document:http://www.debian.org/doc/manuals/network-administrator/ch-bind.html Buildi ...

  8. DNS BIND之rndc介绍及使用

    rndc(Remote Name Domain Controllerr)是一个远程管理bind的工具,通过这个工具可以在本地或者远程了解当前服务器的运行状况,也可以对服务器进行关闭.重载.刷新缓存.增 ...

  9. DNS BIND之dnssec安全介绍

    Domain Name System Security Extensions (DNSSEC)DNS安全扩展,是由IETF提供的一系列DNS安全认证的机制(可参考RFC2535).它提供了一种来源鉴定 ...

  10. DNS BIND配置 配置基本缓存服务器 DNS正向解析 DNS反向解析

    一. 缓存服务器配置 1.DNS:BIND    Berkeley Internet Name Domain    版本bind97: RPM服务器端包的名字  安装bind-libs    bind ...

随机推荐

  1. Kubernetes基本概念与架构

    Kubernetes,面向云原生应用的新“云平台” Kubernetes:以google Brog为原型 Kubernetes的成长历程: l  2014年,Kubernetes正式由google开源 ...

  2. Ant标签详解--基础操作

    Ant的一些核心概念: build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml.        project:每个构建文件包含一个工程. property:属性,一 ...

  3. eatwhatApp开发实战(三)

    在实战二中我们在eatwhatApp上增加了“添加店铺的功能”.接下来,我们来将添加的店铺显示出来,这里我们用到控件--ListView. 先上演示图: 首先,我们先设置布局: <Relativ ...

  4. 【转】roc曲线与auc值

    https://www.cnblogs.com/gatherstars/p/6084696.html ROC的全名叫做Receiver Operating Characteristic,其主要分析工具 ...

  5. DQN(Deep Q-learning)入门教程(五)之DQN介绍

    简介 DQN--Deep Q-learning.在上一篇博客DQN(Deep Q-learning)入门教程(四)之Q-learning Play Flappy Bird 中,我们使用Q-Table来 ...

  6. Node.js躬行记(2)——文件系统和网络

    一.文件系统 fs模块可与文件系统进行交互,封装了常规的POSIX函数.POSIX(Portable Operating System Interface,可移植操作系统接口)是UNIX系统的一个设计 ...

  7. 多用户vps管理面板怎么安装,有没有好用的vps管理工具

    一.VPS安装VPSMate控制面板步骤 1.使用SSH连接到VPS.使用命令获取VPSMate安装包: wget   http://www.vpsmate.org/tools/install.py ...

  8. 本地安装JDK1.7和1.8,可相互快速切换

    1.JDK官网下载jdk1.7和jdk1.8 https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 2.将jdk1.7 ...

  9. Rocket - tilelink - WidthWidget

    https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接 ...

  10. Chisel3 - bind - Data

    https://mp.weixin.qq.com/s/ENJVkz88sGgyODRNCu9jhQ   介绍Data类中的binding的定义和用法.   Binding stores informa ...