概念介绍

  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. uniapp轻轻松松开发各种类型的小程序

    1.前言 现在移动端用户使用量占据了市场大部分的比例,今天 给大家说说怎么去开发一个小程序,今天使用的是uniapp 2.什么是uniapp uni-app 是一个使用 Vue.js 开发所有前端应用 ...

  2. 4.Linux的目录结构

    Linux的目录结构 (1)"/"目录 Linux文件系统的入口,也是出于最高一级的目录 (2)"/bin" 基础系统所需要的那些命令位于此目录.也是最小系统所 ...

  3. MVC设计模式-查询与删除

    MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它把应用程序分成三个核心模块: 模型:模型是应用程序的主体部分,模型表示业务数据和业务逻辑. 一个 ...

  4. 使用RTL进行硬件模型编程的局限性

    https://mp.weixin.qq.com/s/Nj_d3hwgNX4kWVtKsqMSWg   ​​   硬件模型编程,即Hardware Model Programming.在RTL抽象级别 ...

  5. Ondemand和Interactive gonernor工作逻辑简述

    ondemand 简述: 1.采样时间:sampling_rate,单位us 2.cpu usage是仅统计最新1us的一个smaple周期,以%体现cpu busy程度. 3.一般情况下,next频 ...

  6. Java实现 LeetCode 655 输出二叉树(DFS+二分)

    655. 输出二叉树 在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则: 行数 m 应当等于给定二叉树的高度. 列数 n 应当总是奇数. 根节点的值(以字符串格式给出)应当放在可放置的第一 ...

  7. Java实现 LeetCode 397 整数替换

    397. 整数替换 给定一个正整数 n,你可以做如下操作: 如果 n 是偶数,则用 n / 2替换 n. 如果 n 是奇数,则可以用 n + 1或n - 1替换 n. n 变为 1 所需的最小替换次数 ...

  8. Java实现 蓝桥杯VIP 算法训练 确定元音字母位置

    算法训练 确定元音字母位置 时间限制:1.0s 内存限制:512.0MB 输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有元音字母输出0.英语元音字母只有'a'.'e'.'i'. ...

  9. java实现 蓝桥杯 算法训练 操作格子

    问题描述 有n个格子,从左到右放成一排,编号为1-n. 共有m次操作,有3种操作类型: 1.修改一个格子的权值, 2.求连续一段格子权值和, 3.求连续一段格子的最大值. 对于每个2.3操作输出你所求 ...

  10. java实现第五届蓝桥杯LOG大侠

    LOG大侠 atm参加了速算训练班,经过刻苦修炼,对以2为底的对数算得飞快,人称Log大侠. 一天,Log大侠的好友 drd 有一些整数序列需要变换,Log大侠正好施展法力- 变换的规则是: 对其某个 ...