软件工具

DNS和BIND

2018-07-25  本文已影响0人  毛利卷卷发

DNS

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

域名

分类:最多可以有127级域名

域名.jpg

解析

查询类型:

FQDN:Fully Qualified Domain Name,完全合格域名

解析类型:

类型

区域传送

利用“通知”机制,来保证主从服务器能及时同步

通知机制:主服务器解析库发生变化时,会主动通知从服务器

同步时一些必要参数:

类型

资源记录

resource record,简称RR

格式

name [TTL] IN rr_type value

SOA

Start Of Authority,起始授权记录,表明一个区域内部,主从DNS服务是如何同步数据以及起始授权对象是谁

注意:一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

name:当前区域的名字,例如“magedu.com.”

value:有多部分组成

magedu.com. 86400 IN SOA ns.magedu.com. nsadmin.magedu.com. (
    2015042201      ;序列号,serail number
    2H              ;刷新时间,refresh
    10M             ;重试时间,retry
    1W              ;过期时间,expire
    1D              ;否定答案的TTL值,nigative answer TTL
)

NS

Name Server,专用于标明当前区域的DNS服务器

name:当前区域的名字

value: 当前区域的某DNS服务器的名字,例如ns.magedu.com.

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

注意:

A

internet Address,FQDN-->IP IPV4

name: 某主机的FQDN,例如www.magedu.com.

value: 主机名对应主机的IP地址

www.magedu.com.         IN A 1.1.1.1
www.magedu.com.         IN A 2.2.2.2
mx1.magedu.com.         IN A 3.3.3.3
mx2.magedu.com.         IN A 4.4.4.4
$GENERATE 1-254 HOST$       A 1.2.3.$       # 主机名和ip地址同名的时候可以这样操作,避免重复操作
*.magedu.com.           IN A 5.5.5.5        # 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
magedu.com.             IN A 6.6.6.6

AAAA

FQDN --> IPv6

name:FQDN

value:IPv6

MX

Mail eXchanger,邮件交换器

name:当前区域的名字

value:当前区域的某邮件服务器(smtp服务器)的主机名

magedu.com. IN MX 10 mx1.magedu.com.
            IN MX 20 mx2.magedu.com.

注意:

CNAME

Canonical Name,别名记录

name:别名的FQDN

value:真正名字的FQDN

www.magedu.com. IN CNAME websrv.magedu.com.

PTR

PoinTeR,IP --> FQDN

name:IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.

value: FQDN

4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
# 如1.2.3为网络地址,可简写成:
4                   IN PTR www.magedu.com.

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

子域授权

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

类似根域授权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:粘合记录,父域授权子域的记录

BIND

BIND:Bekerley Internat Name Domain

/etc/named.conf # 主配置文件

/etc/named.rfc1912.zones # 专门的zone配置文件

/etc/rndc.conf # rdnc配置文件
/etc/rndc.key # 用来远程控制DNS服务的密钥文件

/usr/sbin/named # 二进制程序
/usr/sbin/named-checkconf # 检查配置文件语法
/usr/sbin/named-checkzone # 检查zone文件语法
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint # 查看jnl文件

/usr/sbin/rndc

/var/log/named.log # 日志文件
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca # 用于存放根服务器的地址信息
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves

/etc/named.conf

[root@centos7 ~]# cat /etc/named.conf

options {
    listen-on port 53 { 127.0.0.1; }; # IPv4地址监听端口及监听的主机列表
    listen-on-v6 port 53 { ::1; }; # IPv6地址监听端口及监听的主机列表
    directory   "/var/named"; # 服务器的工作目录
    dump-file   "/var/named/data/cache_dump.db"; # 当执行rndc dumpdb时服务器dump文件的路径
    statistics-file "/var/named/data/named_stats.txt"; # 执行rndc stats将服务器的统计信息写入文件,默认为named.stats
    memstatistics-file "/var/named/data/named_mem_stats.txt"; # 默认为named.memestats,当退出的服务的时候将服务器的统计信息写到文件中
    allow-query     { localhost; }; # 允许查询的主机列表,表示可以对主机列表里的主机提供服务
    allow-transfer { any;}; # 指定哪些主机可以从服务器上接收区域传输,未指定将允许传输到所有的主机,默认是any,极其不安全,通常修改为指定主机或none

    recursion yes; # 是否开启递归查询请求,设置为no的话,不去找根

    dnssec-enable yes; # dns安全策略,建议关闭
    dnssec-validation yes; # dns安全策略,建议关闭

    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";

    managed-keys-directory "/var/named/dynamic";

    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
    type hint;
    file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

ACL

把一个或多个地址归并为一个集合,并通过一个统一的名称调用

四个内置acl:

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

访问控制的指令:

测试工具

dig

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

注意:dig只用于测试dns系统,不会查询hosts文件进行解析

查询选项:

[root@xuexi ~]# dig -t a www.longshuai.com
; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7_3.1 <<>> -t a www.longshuai.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8670
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.longshuai.com.             IN      A

;; ANSWER SECTION:
www.longshuai.com.      21600   IN      A       172.16.10.16

;; AUTHORITY SECTION:
longshuai.com.          21600   IN      NS      dnsserver.longshuai.com.

;; ADDITIONAL SECTION:
dnsserver.longshuai.com. 21600  IN      A       172.16.10.15

;; Query time: 0 msec
;; SERVER: 172.16.10.15#53(172.16.10.15)
;; WHEN: Sat Aug 12 23:38:17 CST 2017
;; MSG SIZE  rcvd: 102

在结果中:

host

host [-t type] name [SERVER]

nslookup

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

也可使用交互式

rndc

remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程

提供辅助性的管理功能;953/tcp

rndc COMMAND:

CDN

Content Delivery Network,内容分发网络

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求

CDN.jpeg

view

用于实现智能DNS

注意:

格式:

view VIEW_NAME {
    match-clients { testacl; };
    zone “magedu.com” {
        type master;
        file “magedu.com.zone”; };
        include “/etc/named.rfc1912.zones”;
};

view VIEW_NAME {
    match-clients { testacl; };
    include “/etc/named.rfc1912.zones.VIEW_NAME”;
};

DNS排错

# dig A example.com
; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
...
SERVFAIL:The nameserver encountered a problem while processing the query.

实现只缓存DNS服务

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
  2. named-checkconf:主配置文件语法检查

  3. rndc reload

实现正向主DNS服务

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
  2. vim /etc/named.rfc1912.zones

    zone "magedu.com" IN {
            type master;
            file "magedu.com.zone";
    };
    
  3. named-checkconf

  4. cp -a named.localhost magedu.com.zone:为了保证权限,也可以自己创建,记得修改权限

    vim magedu.com.zone

    $TTL 1D
    @       IN SOA  dns1 admin.magedu.com (
                                            2018072201      ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
                   NS       dns1
    dns1           A       192.168.31.71
    web-nginx01    A       1.1.1.1
    web-nginx02    A       1.1.1.2
    app-tomcat01   A       2.2.2.2
    www           CNAME   web-nginx01
    *              A       192.168.31.71 # 泛域名解析
    @              A       192.168.31.71 # 直接解析本域
    $GENERATE 1-100 web-nginx0$ A 1.1.1.$
    
  5. named-checkzone magedu.com magedu.com.zone:如当前工作目录不是/var/named/,需要使用绝对路径

  6. rndc reload

实现反向主DNS服务

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
  2. vim /etc/named.rfc1912.zones

    zone "39.168.192.in-addr.arpa" IN {
            type master;
            file "39.168.192.in-addr.arpa.zone";
    };
    
  3. named-checkconf

  4. cp -a named.localhost 39.168.192.in-addr.arpa.zone:为了保证权限,也可以自己创建,记得修改权限

    vim 39.168.192.in-addr.arpa.zone

    $TTL 86400
    @       IN SOA  dns1.magedu.com. admin.magedu.com. (
                                            2018072201      ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
                   NS      dns1.magedu.com.
    71             PTR     dns1.magedu.com.
    100            PTR     www.qq.com. # 正反向解析结果最好一致
    
  5. named-checkzone 39.168.192.in-addr.arpa 39.168.192.in-addr.arpa.zone:如当前工作目录不是/var/named/,需要使用绝对路径

  6. rndc reload

实现远程动态更新DNS服务

  1. vim /etc/named.rfc1912.zones:在指定zone语句块中添加

    Allow-update {any;}; # 为了安全最好仅允许指定主机
    
  2. chmod 770 /var/named:动态更新实质上就是named用户将指定资源记录写到生成的/var/named/{指定zone}.jnl文件中,随后再同步到指定的zone文件中,因此需要再目录下有w权限

  3. nsupdate

    •>server 192.168.39.71
    •>zone magedu.com
    •>update add ftp.magedu.com 86400 IN A 8.8.8.8 # 这里的TTL不能省略
    •>send
    •>update delete www.magedu.com A
    •>send
    

实现主从DNS服务

主DNS:

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
    allow-transfer { 192.168.39.72; }; # 允许从服务器拉取数据,注意中花括号前后均有空格
    
  2. named-checkconf

  3. vim /var/named/magedu.com.zone:将从服务器信息添加到指定zone文件中

    $TTL 1D
    @    IN SOA  dns1 admin.magedu.com (
                     2018072201  ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
            NS      dns1
                   NS      dns2
    dns1           A       192.168.39.71
    dns2           A       192.168.39.72
    web-nginx01    A       1.1.1.1
    web-nginx02    A       1.1.1.2
    app-tomcat01   A       2.2.2.2
    www           CNAME   web-nginx01
    *              A       192.168.39.71
    @              A       192.168.39.71
    $GENERATE 1-100 web-nginx0$ A 1.1.1.$
    
  4. named-checkzone magedu.com. magedu.com.zone

从DNS:

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
    allow-transfer { none; }; # 为了安全禁止任何主机拉取
    
  2. vim /etc/named.rfc1912.zones

    zone "magedu.com" IN {
            type slave;
            masters { 192.168.39.71; };
            file "slaves/magedu.com.slave.zone";
    };
    
  3. named-checkconf

  4. ls /var/named/slave/:查看是否拉取成功

实现子域委派

父域DNS:

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
    dnssec-enable no; # 关闭加密
    dnssec-validation no;
    
  2. vim /var/named/magedu.com.zone

    $TTL 1D
    @       IN SOA  dns1 admin (
                                            2018072209      ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
                   NS      dns1
    shanghai       NS      dns2 # 添加shanghai子域信息
    dns1           A       192.168.39.71
    dns2           A       192.168.39.72
    www.beijing    A       3.3.3.3 # 主机少的情况下,可以直接在父域直接定义子域中的主机
    www            A       1.1.1.1
    
  3. rndc reload

子域DNS:

  1. vim /etc/named.conf

    listen-on port 53 { localhost; }; # 修改本机所有ip绑定53端口
    allow-query     { any; }; # 修修改可以以为任何主机提供服务
    
  2. vim /etc/named.rfc1912.zones

    zone "shanghai.magedu.com" IN {
            type master;
            file "shanghai.magedu.com.zone";
    };
    
  3. scp 192.168.39.71:/var/named/magedu.com.zone shanghai.magedu.com.zone:由于scp默认root身份执行,导致文件权限出错,一定要注意文件权限

    vim /var/named/shanghai.magedu.com.zone

    $TTL 1D
    @       IN SOA  dns1 admin (
                                            2018072201      ; serial
                                            1D      ; refresh
                                            1H      ; retry
                                            1W      ; expire
                                            3H )    ; minimum
                   NS      dns1
    dns1           A       192.168.39.72
    www            A       2.2.2.2
    
  4. rndc reload

实现转发DNS服务

forward first/only:表示如果 forwarders list 为非空,默认为first值,服务器首先请求 forwarders list ,如果 forwarders list 中的DNS主机不应答,该主机将自己去找应答,如果设置值为only,服务器将只会请求 forwarders中的DNS主机

forwarders:指定用来 forwarding的ip地址. 默认为空列(即不转发)

全局转发

对非本机所负责解析区域的请求,全转发给指定的服务器

vim /etc/named.conf

Options {
    forward first|only;
    forwarders { ip;};
};

特定区域转发

仅转发对特定的区域的请求,比全局转发优先级高

vim /etc/named.rfc1912.zones

zone "ZONE_NAME" IN {
    type forward;
    forward first|only;
    forwarders { ip;};
};

实现智能DNS服务

  1. vim /etc/named.conf:acl必须在option前添加,而且注意迁移zone,因为一旦启用view,所有的zone都必须定义装载view中

    acl beijingnet {
            192.168.31.0/24;
            10.0.0.0/8;
    };
    acl shanghainet {
            172.18.0.0/16;
    
    };
    acl othernet {
            any;
    };
    options {
     ......
    };
    logging {
     ......  
    };
    
    view  beijingview {
            match-clients {beijingnet;};
            include "/etc/named.rfc1912.zones.bj";
    }; 
    view shanghaiview {
            match-clients {shanghainet;};
            include "/etc/named.rfc1912.zones.sh";
    };
    view otherview {
             match-clients {othernet;};
             include "/etc/named.rfc1912.zones.other";
    };
    
    include "/etc/named.rfc1912.zones"; # 删除此行,所有的zone都将定义在view中
    ......
    
  2. vim /etc/named.rfc1912.zones.bj

    zone "magedu.com" IN {
            type master;
            file "magedu.com.zone.bj";
    };
    

    vim /etc/named.rfc1912.zones.sh

    zone "magedu.com" IN {
            type master;
            file "magedu.com.zone.sh";
    };
    

    vim /etc/named.rfc1912.zones.other

    zone "magedu.com" IN {
            type master;
            file "magedu.com.zone.other";
    };
    
  3. vim /var/named/magedu.com.zone.bj

    $TTL 1D
    @    IN SOA  dns1 admin (
                     2018072209  ; serial
                     1D  ; refresh
                     1H  ; retry
                     1W  ; expire
                     3H )    ; minimum
            NS      dns1
    dns1           A       192.168.39.71
    www            A       1.1.1.1
    

    vim /var/named/magedu.com.zone.sh

    ......
    www             A       2.2.2.2
    

    vim /var/named/magedu.com.zone.other

    ......
    www             A       3.3.3.3
    

实现互联网架构DNS服务

DNS架构.png

注意:

  1. 配置www主机:

    • yum install -y httpd

    • vim /var/www/html/index.html

      Welcome to magedu!
      
    • systemctl start httpd

  2. 配置主DNS:

    • vim /etc/named.conf

      listen-on port 53 { localhost; };
      allow-query     { any; };
      allow-transfer   { 192.168.39.75; };
      dnssec-enable no;
      dnssec-validation no;
      
    • vim /etc/named.rfc1912.zones

      zone "magedu.com" IN {
              type master;
              file "magedu.com.zone";
      };
      
    • named-checkconf

    • vim /var/named/magedu.com.zone

      $TTL 1D
      @              IN  SOA  dns1  admin ( 
                              2018072401
                              1D
                              2H
                              3D
                              1D )
              NS   dns1
              NS   dns2
      dns1    A    192.168.39.74
      dns2    A    192.168.31.75
      www     A    192.168.31.76
      
    • chmod 640 magedu.com.zone

    • chown :named magedu.com.zone

    • named-checkzone magedu.com. magedu.com.zone

    • systemctl start named

  3. 配置从DNS:

    • vim /etc/named.conf

      listen-on port 53 { localhost; };
      allow-query     { any; };
      allow-transfer   { 192.168.39.75; };
      dnssec-enable no;
      dnssec-validation no;
      
    • vim /etc/named.rfc1912.zones

      zone "magedu.com" IN {
              type slave;
              masters { 192.168.39.74; };
              file "slaves/magedu.com.slave.zone";
      };
      
    • named-checkconf

    • systemctl start named

  4. 配置comDNS:

    • vim /etc/named.conf

      listen-on port 53 { localhost; };
      allow-query     { any; };
      dnssec-enable no;
      dnssec-validation no;
      
    • vim /etc/named.rfc1912.zones

      zone "com" IN {
              type master;
              file "com.zone";
      };
      
    • named-checkconf

    • vim /var/named/com.zone

      $TTL 1D
      @              IN  SOA  dns1  admin ( 
                              2018072401
                              1D
                              2H
                              3D
                              1D )
              NS   dns1
      magedu  NS   dns2
      magedu  NS   dns3
      dns1    A    192.168.39.73
      dns2    A    192.168.39.74
      dns3    A    192.168.39.75
      
    • chmod 640 com.zone

    • chown :named com.zone

    • named-checkzone com. com.zone

    • systemctl start named

  5. 配置根DNS:

    • vim /etc/named.conf

      listen-on port 53 { localhost; };
      allow-query     { any; };
      dnssec-enable no;
      dnssec-validation no;
      
      zone "." IN {
              type master;
              file "root.zone";
      };
      
    • named-checkconf

    • vim /var/named/root.zone

      $TTL 1D
      @              IN  SOA  dns1  admin ( 
                              2018072401
                              1D
                              2H
                              3D
                              1D )
              NS   dns1
      com     NS   dns2
      dns1    A    192.168.39.72
      dns2    A    192.168.39.73
      
    • chmod 640 root.zone

    • chown :named root.zone

    • named-checkzone . root.zone

    • systemctl start named

  6. 配置局域网DNS:

    • vim /etc/named.conf

      listen-on port 53 { localhost; };
      allow-query     { any; };
      dnssec-enable no;
      dnssec-validation no;
      
    • vim /var/named/named.ca

      .         86400       IN   NS  dns1
      dns1      86400            A   192.168.39.72
      
    • systemctl start named

  7. 配置client:

    • vim /etc/resolv.conf

      nameserver 192.168.39.71
      

编译安装BIND

  1. 下载bind

    • isc.org
  2. 编译安装bind

    • tar xvf bind-9.11.0a3.tar.gz
    • cd bind-9.11.0a3/
    • groupadd -r -g 53 named
    • useradd -r -u 53 -g 53 named
    • ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --without-openssl --disable-ipv6 --disable-chroot --enable-threads
    • make
    • make install
  3. 环境变量

    • vim /etc/profile.d/named.sh

      export PATH=/usr/local/bind9/bin:
      /usr/local/bind9/sbin/:$PATH
      
  4. 库和头文件

    • vim /etc/ld.so.conf.d/named.conf

      /usr/local/bind9/lib
      
    • ldconfig –v

    • ls -sv /usr/local/bind9/include /usr/include/named

  5. man帮助

    • vim /etc/man.config | /etc/man_db.conf

      MANPATH /usr/local/bind9/share/man
      
    • man named.conf

  6. 主配置文件

    • vim /etc/named/named.conf

      options {
         directory "/var/named/"
      };
      zone "." IN {
         type hint;
         file "named.ca";
      };
      zone "localhost" IN {
         type master;
         file “named.localhost";
         allow-update {none;};
      };
      zone “1.0.0.127.in-addr.arpa" IN {
         type master;
         file "named.loopback";
         allow-update {none;};
      };
      
  7. 区域数据库

    • mkdir /var/named

    • named-checkconf

    • dig +norec @a.root-servers.net > /var/named/named.ca

    • vim /var/named/named.localhost

      $TTL 1d
      @ IN SOA localhost. admin.localhost. (
                         2016061801
                         1h
                         5m
                         7d
                         1d)
      IN NS localhost.
      localhost. IN A 127.0.0.1
      
    • vim /var/named/named.loopback

      $TTL 1d
      @ IN SOA localhost. admin.localhost. (
                         2016061801
                         1h
                         5m
                         7d
                         1d)
         NS @
         A 127.0.0.1
         PTR localhost.
      
  8. 设置权限

    • chmod 640 /var/named/*
    • chmod 640 /etc/named/named.conf
    • chgrp -R named /var/named/
    • chgrp named /etc/named/named.conf
  9. 启动服务和测试

    • man named
    • named -u named -f -g -d 3 前端级别3方式运行
    • named -u named 后台运行
    • killall named
    • ss -tuln
    • tail /var/log/message
    • named -u named
上一篇下一篇

猜你喜欢

热点阅读