DNS AND BIND

DNS and BIND

  1. 综述

DNS: Domain Name Service,协议(C/S, 53/udp, 53/tcp);应用层协议;

BIND:Bekerley Internat Name Domain, ISC (www.isc.org)

TCP: 面向连接的协议;在dns的tcp有其它用处

UDP: User Datagram Protocol,无连接协议,不需要确认对方是否在线,速度快,省略很多流程,节约资源。

  1. 本地名称解析配置文件:hosts,起初IANA创建个host文件,然后提供下载,主机到IANA上更新host文件。当主机太多后,ip地址与解析越来越多,IANA不与允许主机从IANA下载了,找个服务器来提供查询。多了一步,用udp比较节约时间。Hash化提取特征码,保存在内存中,hash桶保存。桶还缩小范围,两级就够了。当解析规模到了100,0000级别了,服务器这是也拖不住了。

Linux:/etc/hosts

Windows:%WINDOWS%/system32/drivers/etc/hosts

1.1.1.1 www.magedu.com

1.2.2.2 www.apple.com

  1. DNS Domain:
    1. FQDN: Full Qualified Domain Name : www.magedu.com.(最后一格个点不能省略) 各需要一个解析库来分别负责本地域名的正向和反向解析
    2. Top Level Domain: tld,直接位于根下。

    顶级域:com, edu, mil, gov, net, org, int

三类:组织域、国家域(.cn, .iq, .hk, .tw)、反向域

  1. DNS查询
    1. 类型:
      1. 递归查询:发一次请求得到最终答案
      2. 迭代查询:发多次请求得到答案

互联网的根、.com主机这些都不支持递归查询,运营商提供一台主机做递归查询,而用户主机只能做迭代查询。

  1. 一次完整的查询请求经过的流程:

Client –> hosts文件 –> DNS Service

            Local Cache –> DNS Server (recursion) –> Server Cache –> iteration(迭代) –>

  1. 解析类型:正向区域、反向区域,注意:正反向解析是两个不同的名称空间,是两棵不同的解析树;需要像不同的上级注册,而反向解析对于邮件服务器很重要。

Name –> IP

IP –> Name

正向:FQDN –> IP

反向: IP –> FQDN

  1. 解析答案:
    1. 肯定答案:请求条目存在返回结果
    2. 否定答案:请求的条目不存在等原因导致无法返回结果;否定答应也缓存,所有否定答案都统一缓存,本地没有的都缓存下来。
    3. 权威答案:权威负责这个域的就叫权威回答
    4. 非权威答案:缓存返回的
  1. DNS服务器的类型:
    1. 主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理维护;
    2. 辅助DNS服务器:从主DNS服务器或其它的从DNS服务器那里”复制”(区域传递)一份解析库;
      1. 都会接受用户请求,在上级dns数据库,写两条轮询,最简单的发负载均衡,很多负载均衡都没有考虑到。当一台down机了,都丢给第二台
      2. 问第一个解析某个地址解析不到了,由于都是找根问的,如果第一台解析不出结果了,它是不会找第二台。
      3. 如果第一台down 机了才会找第二台。
    3. 缓存DNS服务器:运营商提供给用户提供递归dns服务的,本身不进行dns解析的。通过在把地址hash在内存中,保留一段时间,不用再次请求查询。在缓存失效期,用的一定就是缓存查询的结果。最差生效,两个小时。客户端缓存是主机缓存,专门拿来的太主机做缓存服务器就是缓存服务器。
    4. 转发器:暂时先不考虑
    5. 名称服务器:域内负责解析本域内的名称的主机;通常较ns
      1. 根服务器:13组服务器(异地多活动主机)绝大多数在美国。
  1. 测试命令:

  2. dig的使用

dig [-t type] name [@SERVER] [query options]

dig用于测试dns系统,因此,不会查询hosts文件进行解析;

  1. 查询选项:

+[no]trace:跟踪解析过程

+[no]recurse:进行递归解析

  1. 测试反向解析:

dig -x IP @SERVER

  1. 模拟区域传送:

dig -t axfr ZONE_NAME @SERVER

例如:dig -t axfr magedu.com @172.16.100.11

  1. host命令:

host [-t type] name [SERVER]

  1. nslookup命令:

nslookup [-option] [name | -] [server]

交互式模式:

nslookup>

server IP: 指明使用哪个DNS server进行查询;

set q=RR_TYPE: 指明查询的资源记录类型;

NAME: 要查询的名称;

  1. rndc:

rndc –> rndc (953/tcp)

rndc COMMAND

COMMAND:

reload: 重载主配置文件和区域解析库文件

reload zone: 重载区域解析库文件

retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;

notify zone: 重新对区域传送发通知;

reconfig: 重载主配置文件

querylog: 开启或关闭查询日志;

trace: 递增debug级别;

trace LEVEL: 指定使用的级别;

  1. named-checkzone

[root@repo named]# named-checkzone “31.16.172.in-addr.arpa” /var/named/31.16.172.zone

zone 31.16.172.in-addr.arpa/IN: loaded serial 2016021601

OK

  1. named-checkconf

[root@repo named]# named-checkconf

没有消息说明主配置文件正常

区域解析库:由众多RR组成:

  1. 资源记录:Resource Record, RR
  2. 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
    1. Soa:起始授权记录;一个区域解析库有且仅能有一个SOA记录,而必须为解析库的第一条记录;
    2. A:internet Address,作用,FQDN –> IP
    3. AAAA: FQDN –> IPv6
    4. PTR: PoinTeR,IP –> FQDN
    5. NS: Name Server,专用于标明当前区域的DNS服务器
    6. CNAME:Canonical Name,别名记录
    7. MX: Mail eXchanger,邮件交换器
  3. 资源记录定义的格式:
    1. 语法:name    [TTL]    IN     rr_type     value
    2. 注意:
      1. TTL可从全局继承;
      2. @可用于引用当前区域的名字;
      3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;
      4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已;
  1. SOA:Start Of Authority,

    1. 语法:name    [TTL]    IN     rr_type     value
      1. 例如:

magedu.com.     86400     IN     SOA     ns.magedu.com.     nsadmin.magedu.com.     (

2015042201 ;序列号

2H ;刷新时间

10M            ;重试时间

1W            ;过期时间

1D            ;否定答案的TTL值

IN:关键字

NAME:解析的名称。

TTL:缓存的时间(全局定义后可省略)

rr_type:    记录的类型,主要为前面7种

VALUE:解析出来的地址。

  1. ttl可以从全局继承
  2. @可以引用当前区域的名字相邻的两个资源记录的name相同时,后续的可省略;
  3. 相邻的两个资源记录的name相同时,后续的可省略;
  4. 同一名字可能有多个不同的主机,这时会轮询。
  5. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机而已

  1. SOA概述:
    1. name: 当前区域的名字,例如”magedu.com.”;
    2. value: 有多部分组成
      1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;这个要求并不严格
    3. 录前区域管理员的邮箱地址;但地址中不能使用@符号一般用.替换,例如linuxedu.magedu.com;
    4. (主从服务协调属性的定义以及否定的答案的统一的TTL)
      1. 序列号:解析库的版本号;前提:主服务器解析库内容发生变化,其序列递增;
        1. 区域传送:
          1. 全量传送:传送整个解析库
          2. 增量传送:传递解析库变化的那部分内容
      2. 刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔;
      3. 重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;
      4. 过期时长:从服务器始终联系不到主服务器时,多久多后放弃从服务器角度,停止提供服务;
      5. “通知”机制:当主服务器自己发生变化,立即告诉从服务器,这样就避免的从服务器数据落后主服务器。
  1. NS:

    1. 语法:name    [TTL]    IN     rr_type     value
  1. name: 当前区域的名字
  2. value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.;注意:一个区域可以有多个NS记录;
  1. 例如:

magedu.com.        IN         NS     ns1.magedu.com.

magedu.com.        IN         NS     ns2.magedu.com.

  1. 注意:
    1. 相邻的两个资源记录的name相同时,后续的可省略;
    2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录;
  1. MX:

    1. 语法:name    [TTL]    IN     rr_type     value
  1. name: 当前区域的名字
  2. value: 当前区域的某邮件服务器(smtp服务器)的主机名;
  3. 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高;
  1. 例如:

magedu.com.        IN     MX 10 mx1.magedu.com.

IN     MX 20 mx2.magedu.com.

  1. 注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录;
  1. A:

    1. 语法:name    [TTL]    IN     rr_type     value
  1. name: 某主机的FQDN,例如www.magedu.com.
  2. value: 主机名对应主机的IP地址;
  1. 例如:

www.magedu.com.        IN     A     1.1.1.1

www.magedu.com.        IN     A     1.1.1.2

mx1.magedu.com.     IN     A 1.1.1.3

mx2.magedu.com.     IN     A 1.1.1.3

  1. 注意:避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;

*.magedu.com.         IN     A     1.1.1.4

magedu.com.            IN     A 1.1.1.4

  1. AAAA:

    1. 语法:name    [TTL]    IN     rr_type     value

name: FQDN

value: IPv6

  1. PTR:

    1. 语法:name    [TTL]    IN     rr_type     value
  1.     name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addra.arpa.
  2. value: FQDN
  1. 例如:

4.3.2.1.in-addr.arpa.     IN     PTR     www.magedu.com

简写成:

4     IN PTR     www.magedu.com.

  1. 注意:网络地址及后缀可省略;主机地址依然需要反着写;

CNAME:

name: 别名的FQDN

value: 正工名字的FQDN;

例如:

web.magedu.com.     IN     CNAME     www.magedu.com.

搭建DNS

  1. 子域授权:

    1. 每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权;

类似根域授权tld:

.com.    IN         NS     ns1.com.

.com. IN     NS         ns2.com.

ns1.com.     IN         A     2.2.2.1

ns2.com.     IN         A     2.2.2.2

magedu.com. 在.com的名称服务器上,解析库中添加资源记录:

magedu.com.     IN     NS         ns1.magedu.com.

magedu.com.     IN     NS         ns2.magedu.com.

magedu.com.     IN     NS         ns3.magedu.com.

ns1.magedu.com.     IN     A     3.3.3.1

ns2.magedu.com.     IN     A     3.3.3.2

ns3.magedu.com.     IN     A     3.3.3.3

glue record:粘合记录

  1. 域名注册:

代理商:万网, 新网;godaddy

注册完成以后,想自己用专用服务来解析?

  1. 管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址;
  1. BIND的安装配置:

dns服务,程序包名bind,程序名named

  1. 程序包:

Bind—-主程序包

bind-libs—库文件

bind-utils—测试程序包

bind-chroot.x86_64—安全沙盒 —-一般测试不建议使用

bind-chroot: /var/named/chroot/ 圈禁在一个小范围里。

bind-lite-devel.i686 –开发环境

bind-lite-devel.x86_64 –开发环境

bind-sdb.x86_64    -数据库组件 把解析库放在非文件中,数据库中

bind-sdb-chroot.x86_64 –数据库安全组件

bind-dyndb-ldap.x86_64    -数据库组件

  1. bind应用程序:
    1. 服务脚本:/etc/rc.d/init.d/named
    2. 主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
      1. /etc/named.conf, 主配置文件—切片了—–〉/etc/named.rfc1912.zones中

    1. rndc: remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程;提供辅助性的管理功能;

953/tcp

主配置文件:

  1. 全局配置:options {}
  2. 日志子系统配置:logging {}
  3. 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone;

zone “ZONE_NAME” IN {}

  1. 注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上;
  2. 缓存名称服务器的配置:监听外部地址即可;
  3. dnssec:    建议测试时关闭dnssec;
  1. 解析库文件:/var/named/ZONE_NAME.ZONE
  1. 注意:
    1. 一台物理服务器可同时为多个区域提供解析;
    2. 必须要有根区域文件;named.ca
    3. 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库;
  1. 配置缓存DNS服务器
    1. 备份配置文件

[root@repo etc]# cp /etc/named.conf{,.bak} -av

`/etc/named.conf’ -> `/etc/named.conf.bak’

[root@repo etc]# cat /etc/named.conf.bak

  1. 修改配置文件

[root@repo etc]# vim /etc/named.conf

listen-on port 53 { 172.16.31.125; };

allow-query { any; };

  1. [root@repo etc]# named-checkconf 检查配置文件是否正确无返回说明正确
  2. 重新载入配置文件
  3. 检查端口监听是否正常

    [root@repo etc]# ss –tunl


  4. 测试解析正常


  1. 主DNS名称服务器:
    1. 在主配置文件中定义区域

zone “ZONE_NAME” IN {

type {master|slave|hint|forward};

file “ZONE_NAME.zone”;

};

[root@repo etc]# vim /etc/named.rfc1912.zones

zone “cpe.com” IN {

type master;

file “cpe.com.zone“;

};

“ZONE_NAME” 区域名称(日后区域解析库@会调用它)

Type:master主服务器

file “cpe.com.zone“; 区域解析库文件

  1. 定义区域解析库文件

[root@repo etc]# vim /var/named/cep.com.zone

$TTL 86400

$ORIGIN cpe.com.

@ IN SOA cpe.com. admin.cpe.com (

2016021601

1H

5M

1W

1D

)

IN NS ns1

IN NS ns2

IN MX 20 mx1

IN MX 10 mx2

ns1 IN A 172.16.31.125

ns2 IN A 172.16.31.124

mx1 IN A 172.16.31.125

mx2 IN A 172.16.31.124

www IN A 172.16.31.124

www IN A 172.16.31.125

* IN A 172.16.31.124

ftp IN CNAME www

cpe.com. IN A 172.16.31.124

  1. 检查配置文件是否正确

[root@repo etc]# named-checkconf

[root@repo etc]# named-checkzone “cpe.com” /var/named/cep.com.zone

zone cpe.com/IN: loaded serial 2016021601

OK

  1. 重新载入配置文件

[root@repo etc]# service named reload

Reloading named: [ OK ]

  1. 测试配置

[root@repo named]# dig -t NS cpe.com @172.16.31.125

[root@repo named]# dig -t MX cpe.com

[root@repo named]# dig -t axfr cpe.com

  1. 出现的内容:
    1. 宏定义;$TTL 86400 $ORIGIN cpe.com.
    2. 资源记录;

示例:

$TTL 86400

$ORIGIN magedu.com.

@    IN    SOA    ns1.magedu.com.    admin.magedu.com (

2015042201

1H

5M

7D

1D )

IN    NS    ns1

IN    NS    ns2

IN    MX 10    mx1

IN    MX 20    mx2

ns1    IN    A    172.16.100.11

ns2    IN    A    172.16.100.12

mx1    IN    A    172.16.100.13

mx2    IN    A    172.16.100.14

www    IN    A    172.16.100.11

www    IN    A    172.16.100.12

ftp    IN    CNAME    www

  1. 反向区域:

区域名称:网络地址反写.in-addr.arpa.172.16.100. –> 100.16.172.in-addr.arpa.

  1. 定义区域

zone “ZONE_NAME” IN {

type {master|slave|forward};

file “网络地址.zone”

};

[root@repo named]# vim /etc/named.rfc1912.zones

zone “31.16.172.in-addr.arpa” IN {

type master;

file “31.16.172.zone”;

};

  1. 区域解析库文件

注意:不需要MX和A,以及AAAA记录;以PTR记录为主;

示例:

$TTL 86400

$ORIGIN 100.16.172.in-addr.arpa.

@    IN    SOA    ns1.magedu.com. admin.magedu.com. (

2015042201

1H

5M

7D

1D )

IN    NS    ns1.magedu.com.

IN    NS    ns2.magedu.com.

11    IN    PTR    ns1.magedu.com.

11    IN    PTR    www.magedu.com.

12    IN    PTR    mx1.magedu.com.

12    IN    PTR    www.magedu.com.

13    IN    PTR    mx2.magedu.com.

[root@repo named]# vim /var/named/31.16.172.zone

$TTL 86400

$ORIGIN 31.16.172.in-addr.arpa.

@ IN SOA cpe.com. admin.cpe.com (

2016021601

1H

5M

1W

1D

)

IN NS ns1.cpe.com.

IN NS ns2.cpe.com.

125 IN PTR ns1.cpe.com.

124 IN PTR ns2.cpe.com.

125 IN PTR mx1.cpe.com.

124 IN PTR mx2.cpe.com.

125 IN PTR www.cpe.com.

125 IN PTR www.cpe.com.

  1. 测试配置文件
    1. [root@repo named]# named-checkconf

    没有反馈说明配置文件正确

    1. [root@repo ~]# named-checkzone “31.16.172.in-addr.arpa.” /var/named/31.16.172.zone
    2. zone 31.16.172.in-addr.arpa/IN: loaded serial 2016021601
    3. OK
  2. 重载配置文件

    [root@repo ~]# rndc reload

    server reload successful

    [root@repo ~]# rnds status

    -bash: rnds: command not found

    [root@repo ~]# rndc status

    version: 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6

    CPUs found: 4

    worker threads: 4

    number of zones: 21

    debug level: 0

    xfers running: 0

    xfers deferred: 0

    soa queries in progress: 0

    query logging is OFF

    recursive clients: 0/0/1000

    tcp clients: 0/100

    server is up and running

    [root@repo ~]# service named restart

    Stopping named: . [ OK ]

    Starting named: [ OK ]

    [root@repo ~]# service named reload

    Reloading named: [ OK ]

  3. 测试解析

    [root@repo ~]# dig -x 172.16.31.124 @172.16.31.125

    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -x 172.16.31.124 @172.16.31.125

    ;; global options: +cmd

    ;; Got answer:

    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2753

    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

    ;; QUESTION SECTION:

    ;124.31.16.172.in-addr.arpa.    IN    PTR

    ;; ANSWER SECTION:

    124.31.16.172.in-addr.arpa. 86400 IN    PTR    ns2.cpe.com.

    124.31.16.172.in-addr.arpa. 86400 IN    PTR    mx2.cpe.com.

    ;; AUTHORITY SECTION:

    31.16.172.in-addr.arpa.    86400    IN    NS    ns2.cpe.com.

    ;; ADDITIONAL SECTION:

    ns2.cpe.com.        86400    IN    A    172.16.31.124

    ;; Query time: 0 msec

    ;; SERVER: 172.16.31.125#53(172.16.31.125)

    ;; WHEN: Fri Feb 17 10:55:44 2017

    ;; MSG SIZE rcvd: 117


    [root@repo ~]# host -t ptr 172.16.31.125

    125.31.16.172.in-addr.arpa domain name pointer ns1.cpe.com.

    125.31.16.172.in-addr.arpa domain name pointer mx1.cpe.com.

    125.31.16.172.in-addr.arpa domain name pointer www.cpe.com.


  4. 修改区域库文件权限,安全考虑

[root@repo named]#chmod 640 cpe.zone 31.16.172.zone

[root@repo named]#chown :named cpe.zone 31.16.172.zone

[root@repo named]# ls /var/named/ -l

total 36

-rw-r—– 1 root named 310 Feb 17 10:59 31.16.172.zone

-rw-r—– 1 root named 364 Feb 17 10:28 cpe.zone

drwxrwx— 2 named named 4096 May 11 2016 data

drwxrwx— 2 named named 4096 May 11 2016 dynamic

-rw-r—– 1 root named 3171 Jan 11 2016 named.ca

-rw-r—– 1 root named 152 Dec 15 2009 named.empty

-rw-r—– 1 root named 152 Jun 21 2007 named.localhost

-rw-r—– 1 root named 168 Dec 15 2009 named.loopback

drwxrwx— 2 named named 4096 May 11 2016 slaves

  1. 主从复制:

1、应该为一台独立的名称服务器;

2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器;

3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;

4、主服务器得允许从服务器作区域传送;

5、主从服务器时间应该同步,可通过ntp进行;

6、bind程序的版本应该保持一致;否则,应该从高,主低;

定义从区域的方法:

zone “ZONE_NAME” IN {

type slave;

masters { MASTER_IP; };

file “slaves/ZONE_NAME.zone”;

};

  1. 打开缓存解析服务

  1. 检查dns端口是否监听

    [root@centos72 named]# ss -tunl | grep 172.16.31.124


  2. 增加zone

    [root@centos72 named]# vim /etc/named.rfc1912.zones

    zone “cpe.com” IN {

    type slave;

    masters { 172.16.31.125; };

    file “slaves/cpe.zone”;

    };

    zone “31.16.172.in-addr.arpa” IN {

    type slave;

    masters { 172.16.31.125; };

    file “/var/named/slaves/31.16.172.zone”;

    };

  3. 测试ns同主服务器。

    Feb 17 08:08:52 centos72 named[6866]: managed-keys-zone: sync_keyzone:dns_journal_open -> unexpected error

    Feb 17 08:08:52 centos72 named[6866]: managed-keys-zone: unable to synchronize managed keys: unexpected error

    Feb 17 08:08:52 centos72 named[6866]: reloading zones succeeded

    Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: Transfer started.

    Feb 17 08:08:52 centos72 named[6866]: transfer of ‘31.16.172.in-addr.arpa/IN’ from 172.16.31.125#53: connected using 172.16.31.124#58706

    Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: transferred serial 2016021601

    Feb 17 08:08:52 centos72 named[6866]: all zones loaded

    Feb 17 08:08:52 centos72 named[6866]: transfer of ‘31.16.172.in-addr.arpa/IN’ from 172.16.31.125#53: Transfer completed: 1 messages, 9 records, 259 bytes, 0.001 secs (259000 bytes/sec)

    Feb 17 08:08:52 centos72 named[6866]: running

    Feb 17 08:08:52 centos72 named[6866]: zone 31.16.172.in-addr.arpa/IN: sending notifies (serial 2016021601)

  1. 创建子域
    1. 子域授权:分布式数据库
    1. 正向解析区域子域方法:

定义一个子区域:

            ops.magedu.com.     IN     NS     ns1.ops.magedu.com.

            ops.magedu.com.     IN     NS     ns2.ops.magedu.com.

            ns1.ops.magedu.com.     IN     A     1.1.1.1

            ns2.ops.magedu.com.     IN     A     1.1.1.2

            fin.magedu.com.     IN     NS     ns1.fin.magedu.com.

            fin.magedu.com.     IN     NS     ns2.fin.magedu.com.

            ns1.fin.magedu.com.     IN     A     3.1.1.1

            ns2.fin.magedu.com.     IN     A     3.1.1.2

  1. 在父域转发库中添加子域名授权:

[root@repo ~]# vim /var/named/cpe.zone

ops.cpe.com.    IN    NS    ns1.ops.cpe.com.

ops.cpe.com.    IN    NS    ns2.ops.cpe.com.

ns1.ops.cpe.com.    IN    A    11.100.40.125

ns2.ops.cpe.com.    IN    A    11.100.40.14

  1. 配置子域服务器

    同主dns服务器配置

    注意:标白的是坑。

注意:关闭dnssec功能:dnssec-enable no; dnssec-validation no;


  1. 定义转发服务器:

注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;

  1. 全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;

                Options {

                    forward {first|only}

                    fowwarders

                }

  1. 区域转发:仅转发对特定的区域的请求至某服务器;

                zone “ZONE_NAME” IN {

                    type forward;

                    forward {first|only}

                    forwarders

                }

  1. 例如:

    [root@localhost ~]# vim /etc/named.conf

forward first;

forwarders { 172.16.31.125; };


  1. 创建子域查询库

    [root@localhost ~]# vim /etc/named.rfc1912.zones

    zone “ops.cpe.com” IN {

    type master;

    file “ops.cpe.com.zone”;

    };


  2. 配置子域查询库

    [root@localhost ~]# vim /var/named/ops.cpe.com.zone

    $TTL 86400

    $ORIGIN ops.cpe.com.

    @ IN SOA ops.cpe.com. admin.ops.cpe.com (

    2017021701

    1H

    5M

    1W

    1D )

    IN NS ns1

    IN NS ns2

    IN MX 10 mx1

    mx1 IN A 11.100.40.14

    ns1 IN A 11.100.40.125

    ns2 IN A 11.100.40.14

    www IN CNAME ns1

    * IN CNAME www

    ops.cpe.com. IN A 11.100.40.14


  1. bind中基础的安全相关的配置:
    1. acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用;

acl acl_name {

        ip;

        ip;

                net/prelen;

            };

  1. 示例:

acl mynet {

172.16.0.0/16;

}

  1. bind有四个内置的acl:
    1. none: 没有一个主机;
    2. any: 任意主机;
    3. local: 本机;
    4. localnet: 本机的IP同掩码运算后得到的网络地址;

  2. 注意:只能先定义,后使用;因此,其一般定义在配置文件中options的前面;

    访问控制的指令:

    allow-query {}: 允许查询的主机;白名单;

    allow-transfer {}:允许区域传送的主机;白名单;

    allow-recursion {}: 允许递归的主机;

            allow-update {}: 允许更新区域数据库中的内容;

  3. 例如:

    zone “zmjchina.cn” IN {

    type master;

    file “zmjchina.zone”;

    allow-query { “jiazitext”; };

    allow-transfer { “jiazitext”; };

    allow-update { “jiazi1”; };

    // allow-recursion { 192.168.3.17; }; 无法使用

    };

    zone “3.168.192.in-addr.arpa” IN {

    type master;

    file “3.168.192.zone”;

    allow-query { none; };

    };

    acl “jiazitext” {

    10.0.0.1; 192.168.3.17;

    };

    acl “jiazi” {

    192.168.3.0/24;

    };

    acl “jiazi1” {

    192.168.3.17;

    };

  1. 控制递归在named.conf中完成

[root@localhost ~]# vim /etc/named.conf

acl “jiazi111” {

192.168.3.0/24;

};

recursion yes;

allow-recursion { “jiazi111”; };

  1. bind view:
    1. 视图:
      1. 一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
      2. 每个view用一来匹配一组客户端;
      3. 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件;

view VIEW_NAME {

match-clients { };

  1. [root@localhost ~]# vim /etc/named.rfc1912.zones

}

view jia {

match-clients { “mynet”; };

allow-recursion { “mynet”; };

zone….

};

  1. [root@localhost ~]# vim /etc/named.conf

acl “mynet” {

192.168.3.10/32;

};

  1. 注意:
    1. 一旦启用了view,所有的zone都只能定义在view中;
    2. 仅有必要在匹配到允许递归请求的客户所在view中定义根区域;
    3. 客户端请求到达时,是自上而下检查每个view所服务的客户端列表;
  1. CDN: Content Delivery Network
  2. 智能DNS:

dnspod

dns.la

手动编译安装bind

  1. 安装开发库组包文件

    [root@centos68 ~]# yum grouplist | grep “Dev”

    [root@centos68 ~]# yum groupinstall “Development tools” “Desktop Platform Development” –y


  2. 下载bind

[root@centos68 ~]# wget https://www.isc.org/downloads/file/bind-9-11-0-p3/?version=tar-gz

  1. 解压文件

    [root@centos68 ~]# tar zxf bind-9.11.0-P3.tar.gz

  2. 进入目录

[root@centos68 ~]# cd bind-9.11.0-P3

  1. 创建用户与组

    [root@centos68 bind-9.11.0-P3]# groupadd -r -g 53 named

    [root@centos68 bind-9.11.0-P3]# useradd -r -u 53 -g 53 -M named

  2. ./configure –prefix=/usr/local/bind9 –sysconfdir=/etc/named/ –disable-ipv6 –disable-chroot –enable-threads –without-openssl

    不取消openssl编译无法完成

Make

make install

  1. 增加环境变量

[root@centos68 named]# vim /etc/profile.d/named.sh

export PATH=$PATH:/usr/local/bind9/bin:/usr/local/bind9/sbin

重读配置文件

[root@centos68 ~]# . /etc/profile.d/named.sh

  1. 导入bind9用到的库文件

[root@centos68 ~]# vim /etc/ld.so.conf.d/named.conf

/usr/local/bind9/lib

重读库

[root@centos68 ~]# ldconfig –v

  1. 导入头文件

[root@centos68 ~]# ln -sv /usr/local/bind9/include/ /usr/local/named

`/usr/local/named’ -> `/usr/local/bind9/include/’

[root@centos68 ~]# ls /usr/local/named/

bind9 dns dst irs isc isccc isccfg lwres pk11 pkcs11

  1. 增加man文件

[root@centos68 ~]# vim /etc/man.config

MANPATH /usr/local/bind9/share/man/

  1. 创建配置文件

    [root@centos68 ~]# vim /etc/named/named.conf

    options {

    directory “/var/named”;

    };

    zone “.” IN {

    type hint;

    file “named.ca”;

    };

    zone “localhost” IN {

    type master;

    file “localhost.zone”;

    allow-update { none; };

    };

    zone “0.0.127.ip-addr.arpa” IN {

    type master;

    file “named.local”;

    allow-update { none; };

    };

    ~

  2. 创建name.ca

    dig -t NS . @61.139.2.69 > /var/named/named.ca

  3. 修改权限

    [root@centos68 named]# chown :named /etc/named/named.conf

    [root@centos68 named]# chmod 640 /etc/named/named.conf

    [root@centos68 named]#

    [root@centos68 named]#

    [root@centos68 named]# ls -l /etc/named/named.conf

    -rw-r—–. 1 root named 275 Feb 12 01:37 /etc/named/named.conf

    [root@centos68 named]# chown root:named *

    [root@centos68 named]# chmod 640 *

    [root@centos68 named]# ls

    localhost.zone named.ca name.local

    [root@centos68 named]# ls -l

    total 12

    -rw-r—–. 1 root named 145 Feb 12 01:40 localhost.zone

    -rw-r—–. 1 root named 1518 Feb 12 01:38 named.ca

    -rw-r—–. 1 root named 142 Feb 12 01:43 name.local

  4. 调试启动程序不报错就成功了

    [root@centos68 named]# named -u named -f -g -d 3

  5. 正式启动程序

    [root@centos68 named]# named -u named

  6. Rndc配置

    [root@centos68 named]# rndc-confgen -r /dev/urandom

    # Start of rndc.conf

    key “rndc-key” {

        algorithm hmac-md5;

        secret “FiOahb04PrywbxjfR5qyAQ==”;

    };

    options {

        default-key “rndc-key”;

        default-server 127.0.0.1;

        default-port 953;

    };

    # End of rndc.conf

    # Use with the following in named.conf, adjusting the allow list as needed:

    # key “rndc-key” {

    #     algorithm hmac-md5;

    #     secret “FiOahb04PrywbxjfR5qyAQ==”;

    # };

    #

    # controls {

    #     inet 127.0.0.1 port 953

    #         allow { 127.0.0.1; } keys { “rndc-key”; };

    # };

    # End of named.conf

  7. 测试rndc是否启动

[root@centos68 named]# rndc-confgen -r /dev/urandom > /etc/named/rndc.conf

[root@centos68 named]# cat /etc/named/rndc.conf | sed ‘/# key “rndc-key” {$/,$ p’ -n | sed ‘1,$ s/#//g’ | sed ‘$d’ >> /etc/named/named.conf

[root@centos68 named]# killall -SIGHUP named

[root@centos68 named]# named -u named

[root@centos68 named]# rndc status

version: BIND 9.11.0-P3 <id:4801fbc>

running on centos68.zmjchina.cn: Linux x86_64 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016

boot time: Sun, 12 Feb 2017 06:50:09 GMT

last configured: Sun, 12 Feb 2017 07:13:06 GMT

configuration file: /etc/named/named.conf

CPUs found: 1

worker threads: 1

UDP listeners per interface: 1

number of zones: 101 (98 automatic)

debug level: 0

xfers running: 0

xfers deferred: 0

soa queries in progress: 0

query logging is OFF

recursive clients: 0/900/1000

tcp clients: 0/150

server is up and running

压力测试

  1. 进入目录

    [root@centos68 queryperf]# cd /root/bind-9.11.0-P3/contrib/queryperf

  2. ./configure
  3. [root@centos68 queryperf]# make
  4. 复制到/usr/local/bind9/bin/

    [root@centos68 queryperf]# cp queryperf /usr/local/bind9/bin/

  5. 创建测试文件

    [root@centos68 queryperf]# vim test

www.magedu.com A

www.163.com A

  1. 测试压力

    [root@centos68 queryperf]# queryperf -d test -c 192.168.3.14

    DNS Query Performance Testing Tool

    Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $

    [Status] Processing input data

    [Status] Sending queries (beginning with 127.0.0.1)

    [Timeout] Query timed out: msg id 1

    [Status] Testing complete

    Statistics:

    Parse input file: once

    Ended due to: reaching end of file

    Queries sent: 2 queries

    Queries completed: 2 queries

    Queries lost: 0 queries

    Queries delayed(?): 0 queries

    RTT max:     0.411310 sec

    RTT min: 0.411310 sec

    RTT average: 0.411310 sec

    RTT std deviation: 0.000040 sec

    RTT out of range: 0 queries

    Returned NOERROR: 1 queries

    Percentage completed: 100.00%

    Percentage lost: 0.00%

    Started at: Sun Feb 12 02:25:55 2017

    Finished at: Sun Feb 12 02:26:00 2017

    Ran for: 5.000049 seconds

    Queries per second: 0.399996 qps

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值