Web DNS 实战

环境部署


  192.168.9.28     Centos7     zx28.zxjr.com     DNS 主  
  192.168.9.29   Centos7   zx29.zxjr.com   DNS 从
  192.168.9.30     Centos7     zx30.zxjr.com   测试机
  192.168.9.31   Centos7   zx31.zxjr.com   测试机
  192.168.9.32   Centos7   zx32.zxjr.com   测试机

主上部署 DNS


  1 // 对应的主机修改主机名
  2 hostnamectl set-hostname zx28.zxjr.com
  3 hostnamectl set-hostname zx29.zxjr.com
  4 ... ...
  5 
  6 // 操作系统及内核版本
  7 [root@zx28 ~]# cat /etc/redhat-release 
  8 CentOS Linux release 7.4.1708 (Core) 
  9 [root@zx28 ~]# uname -r
 10 3.10.0-693.el7.x86_64
 11 
 12 // 安装 BIND
 13 yum -y install bind
 14 
 15 // DNS 主配置文件 /etc/named.conf; 
 16 *** 语法严格, 分号, 空格; 文件的权限, 属主: root , 属组: named , 640 ***
 17 // 配置文件主干
 18 '''
 19 options{
 20     //全局选项
 21 }
 22 zone "zone name" {
 23     //定于区域
 24 }
 25 logging{
 26     //日志文件
 27 }
 28 include:加载别的文件
 29 '''
 30 
 31 // 配置文件
 32 vim /etc/named.conf
 33 options {
 34     listen-on port 53 { 192.168.9.28; };
 35     directory     "/var/named";
 36     dump-file     "/var/named/data/cache_dump.db";
 37     statistics-file "/var/named/data/named_stats.txt";
 38     memstatistics-file "/var/named/data/named_mem_stats.txt";
 39     allow-query     { any; };
 40 
 41     /* 
 42      - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
 43      - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion.
 44      - If your recursive DNS server has a public IP address, you MUST enable access
 45        control to limit queries to your legitimate users. Failing to do so will
 46        cause your server to become part of large scale DNS amplification
 47        attacks. Implementing BCP38 within your network would greatly
 48        reduce such attack surface
 49     */
 50     recursion yes;
 51 
 52         dnssec-enable no;
 53         dnssec-validation no;
 54 
 55     /* Path to ISC DLV key */
 56     bindkeys-file "/etc/named.iscdlv.key";
 57 
 58     managed-keys-directory "/var/named/dynamic";
 59 
 60     pid-file "/run/named/named.pid";
 61     session-keyfile "/run/named/session.key";
 62 };
 63 
 64 logging {
 65         channel default_debug {
 66                 file "data/named.run";
 67                 severity dynamic;
 68         };
 69 };
 70 
 71 zone "." IN {
 72     type hint;
 73     file "named.ca";
 74 };
 75 
 76 include "/etc/named.rfc1912.zones";
 77 include "/etc/named.root.key";
 78 
 79 // 检查配置文件; 后面配置文件可加可不加;
 80 named-checkconf [/etc/named.conf]
 81 
 82 // 启动 DNS, 并设置开机启动
 83 systemctl start named
 84 systemctl enable named
 85 
 86 // 使用测试机 192.168.9.30 配置DNS指向 192.168.9.28 进行测试;两种方法修改 DNS, 
 87 // 方法一: 修改 /etc/resolv.conf 配置文件
 88 vim /etc/resolv.conf 
 89 # Generated by NetworkManager
 90 search tian.com
 91 nameserver 192.168.9.28
 92 
 93 // 方法二: 修改 网卡配置的 DNS; /etc/sysconfig/network-scripts/ifcfg-eth0中, 优先级/etc/resolv.conf; 重启网卡生效;
 94 vim /etc/sysconfig/network-scripts/ifcfg-eth0 
 95 ... ...
 96 DNS1=192.168.9.28
 97 
 98 systemctl restart network
 99 
100 // ping 百度验证解析
101 [root@zx30 ~]# ping -c2 -i1 www.baidu.com
102 PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
103 64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=48 time=4.45 ms
104 64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=48 time=14.7 ms

自定义正解域


主机域

  • 主机域和业务域无关, 且建议分开;
  • 主机域其实是一个假域,也就是说, 主机域其实是不能解析到互联网上的, 只对局域网(内网)提供服务;

自定义区域数据库文件

  • 一般而言是文本文件, 且只包含 资源记录, 宏定义 和 注释;
  • 需要在自定义区域配置文件中指定存放路径, 可以绝对路径或相对路径 ( 相对于 /var/named )
  • 注意文件属性

资源记录

 1 $ORIGIN .
 2 $TTL 600    ; 10 minutes
 3 zxjr.com            IN SOA    dns.zxjr.com. 983012***@qq.com. (
 4                 2019073101 ; serial
 5                 10800      ; refresh (3 hours)
 6                 900        ; retry (15 minutes)
 7                 604800     ; expire (1 week)
 8                 86400      ; minimum (1 day)
 9                 )
10                 NS   dns.zxjr.com.
11 $ORIGIN zxjr.com.
12 $TTL 60    ; 1 minute
13 ns1                             A    192.168.9.28
14 
15 // 资源记录格式
16     name [ttl(缓存时间)] IN 资源记录类型(RRtype)  Value
17 
18 // 常用的资源记录类型
19 // SOA 记录: 起始授权, 只能有一条
20     name: 只能是区域名称,通常可以简写为@, 例如: zxjr.com
21     value: 有n个数值, 最主要的是主DNS服务器的FQDN, 点不可省略;
22     
23     // *** SOA 必须是区域数据库文件的第一条记录
24     @ 600 IN SOA  dns.zxjr.com. 管理员邮箱(983012***@qq.com.)(
25          序列号(serial number) ;注释内容,十进制数据,不能超过10位,通常使用日期时间戳,例如2019073101
26          刷新时间(refresh time) ;即每隔多久到主服务器检查一次
27          重试时间(retry time) ;应该小于refresh time
28          过期时间(expire time);当辅助DNS服务器无法联系上主DNS服务器时,辅助DNS服务器可以在多长时间内认为其缓存是有效的,并供用户查询。
29          netgative answer ttl ;非权威应答的ttl,缓存DNS服务器可以缓存记录多长时间
30 31  
32 // NS记录: 可有多条, 每一NS记录, 必须对应一个 A 记录
33     name: 区域名称, 通常可以简写为 @
34     value: DNS服务器的FQDN(可以使用相对名称)
35     
36     // 示例 @ 120 IN NS dns
37             zxjr.com.    120 IN NS dns.zxjr.com.
38     
39 // A记录: 只能定义在正向区域数据库文件中 (ipv4 → FQDN)
40     name: FQDN(可以使用相对名称)
41     value:IP
42     
43     // 示例    (可以轮询)
44             dns    60 IN A 192.168.9.28
45             zx28    60 IN A 192.168.9.28
46 
47 // MX 记录: 邮件交换记录, 可以有多个(不常用)
48     name: 区域名称, 用于标识smtp服务器
49     value: 包含优先级和FQDN
50     优先级: 0-99, 数字越小, 级别越高;
51     示例: @ 600 IN MX 10 mail
52           @ 600 IN MX 20 smtp
53           
54 // CNAME记录: canonical name, 别名(FQDN → FQDN)
55     name: FQDN
56     value: FQDN
57     示例: rong IN CNAME zx28
58     
59 // 宏定义
60     $ORIGIN .
61     $TTL 60

正解主机域配置


// 域可以放置/etc/named.conf 配置文件中, 可以放在 /etc/named.rfc1912.zones 文件中, 也可以放置在自定义的文件中, 在 /etc/named.conf 后使用include加载进来;

// 在 /etc/named.rfc1912.zones 文件内追加以下内容
zone "zxjr.com" IN {
     type master;
     file "zxjr.com.zone";
     allow-update { 192.168.9.28;192.168.9.29; };
};

// 在 /var/named 下创建 zxjr.com.zone 文件
vim /var/named/zxjr.com.zone
    $TTL 600    ; 10 minutes
    @               IN SOA    dns.zxjr.com. 983012***@qq.com. (
                    2019073101 ; serial
                    10800      ; refresh (3 hours)
                    900        ; retry (15 minutes)
                    604800     ; expire (1 week)
                    86400      ; minimum (1 day)
                    )
                NS   dns.zxjr.com.
    $ORIGIN zxjr.com.
    $TTL 60    ; 1 minute
    zx28                A    192.168.9.28
    dns                 A    192.168.9.28
    
// 修改zone文件权限
chmod 640 /var/named/zxjr.com.zone
chown .named /var/named/zxjr.com.zone
// 三种配置方式: 用宏定义 $ORIGIN . ; 下面使用 zxjr.com 不用宏定义; 下面使用 @ 不用宏定义, 下面使用 zxjr.com.

检查配置并重启


// 检查自定义区域配置
named-checkzone zxjr.com. /var/named/zxjr.com.zone 
    zone zxjr.com/IN: loaded serial 2019073101
    OK

// 检查主配置
named-checkconf

// 重启named
systemctl restart named

反解域的自定义区域配置


// 在 /etc/named.rfc1912.zones 文件内追加以下内容
zone "9.168.192.in-addr.arpa" IN {
     type master;
     file "9.168.192.in-addr.arpa.zone";
     allow-update { 192.168.9.28;192.168.9.29; };
};

// 在 /var/named 下创建 zxjr.com.zone 文件
vim /var/named/9.168.192.in-addr.arpa.zone
    $TTL 600    ; 10 minutes
    @                 IN SOA    dns.zxjr.com. 983012***@qq.com. (
                    2019073101 ; serial
                    10800      ; refresh (3 hours)
                    900       ; retry (15 minutes)
                    604800     ; expire (1 week)
                    86400      ; minimum (1 day)
                    )
                    NS   dns.zxjr.com.
    $ORIGIN 9.168.192.in-addr.arpa.
    $TTL 60    ; 1 minute
    28            PTR         zx28.zxjr.com.
    29            PTR         zx29.zxjr.com.
*** 一个IP只能对应唯一的FQDN反解PTR记录, 且应该与正解A记录对应 ***

// 修改zone文件权限
chmod 640 /var/named/9.168.192.in-addr.arpa.zone
chown .named /var/named/9.168.192.in-addr.arpa.zone

检查反解域配置及重启


named-checkzone 9.168.192.in-addr.arpa. /var/named/9.168.192.in-addr.arpa.zone 
    zone 9.168.192.in-addr.arpa/IN: loaded serial 2019073101
    OK
    
systemctl restart named

检查解析是否生效


// 方法一
dig -t PTR 29.9.168.192.in-addr.arpa. @192.168.9.28 +short
    zx29.zxjr.com.
    
// 方法二
dig -x 192.168.9.29 @192.168.9.28 +short
    zx29.zxjr.com.
    
// 反向解析正常

DNS 主从同步


在从上部署 DNS

  注意: 从DNS上的 bind 版本要小于等于 主DNS上bind的版本

// 从DNS服务器配置与主相同
cat /etc/redhat-release 
    CentOS Linux release 7.4.1708 (Core) 
uname -r
    3.10.0-693.el7.x86_64

// 安装bind
yum -y install bind

修改从DNS的主配置文件


vim /etc/named.conf
    options {
        listen-on port 53 { 192.168.9.29; };
        directory     "/var/named";
        dump-file     "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
        masterfile-format text;                // 定义域文件类型为 text;

        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

            dnssec-enable no;
            dnssec-validation no;

        /* 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";

修改主DNS配置文件


// 在主配置文件中 options 添加以下两行; 也可以在主配置文件或named.rfc1912.zones文件同步单个域; 以下三行加入指定域中;
vim /etc/named.conf
    ... ...
    allow-transfer { 192.168.9.29; };         // 允许哪些主机进行区域传送
    notify yes;                   // 通知从服务器
also-notify { 192.168.9.29; }; // 主动通知从域名服务器进行更新 ... ... // 检查配置并重启DNS named-checkconf systemctl restart named

从DNS操作


 1 // 检查完全区域数据传送
 2 dig -t axfr zxjr.com @192.168.9.28
 3 
 4     ; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> -t axfr zxjr.com @192.168.9.28
 5     ;; global options: +cmd
 6     zxjr.com.        60    IN    SOA    dns.zxjr.com. 983012386.qq.com. 2019080106 21600 3600 604800 60
 7     zxjr.com.        120    IN    NS    dns.zxjr.com.
 8     dns.zxjr.com.        60    IN    A    192.168.9.28
 9     zx28.zxjr.com.        60    IN    A    192.168.9.28
10     zx29.zxjr.com.        60    IN    A    192.168.9.29
11     zxjr.com.        60    IN    SOA    dns.zxjr.com. 983012386.qq.com. 2019080106 21600 3600 604800 60
12     ;; Query time: 1 msec
13     ;; SERVER: 192.168.9.28#53(192.168.9.28)
14     ;; WHEN: Fri Aug 02 15:32:59 CST 2019
15     ;; XFR size: 8 records (messages 1, bytes 229)
16     
17 // 从DNS服务器上创建自定义正解域配置, 在 /etc/named.rfc1912.zones 追加
18 vim /etc/named.rfc1912.zones
19      ... ...
20     zone "zxjr.com" IN {
21         type slave;
22         masters { 192.168.9.28; };
23         file "slaves/zxjr.com.zone";
24     };
25     
26 // 检查配置并启动从 DNS
27 named-checkconf
28 systemctl start named
29 
30 // 检查同步过来的区域数据库文件, 在 /var/named/slaves 下
31 cat /var/named/slaves/zxjr.com.zone 
32     $ORIGIN .
33     $TTL 60    ; 1 minute
34     zxjr.com        IN SOA    dns.zxjr.com. 983012386.qq.com. (
35                     2019080106 ; serial
36                     21600      ; refresh (6 hours)
37                     3600       ; retry (1 hour)
38                     604800     ; expire (1 week)
39                     60         ; minimum (1 minute)
40                     )
41     $TTL 120    ; 2 minutes
42                 NS    dns.zxjr.com.
43     $ORIGIN zxjr.com.
44     $TTL 60    ; 1 minute
45     dns            A    192.168.9.28
46     zx28            A    192.168.9.28
47     zx29            A    192.168.9.29
48     
49 // 分别使用两台DNS服务器查询一个A记录, 验证解析是否正确
50 [root@zx28 ~]# dig -t A zx29.zxjr.com @192.168.9.28 +short
51     192.168.9.29
52 [root@zx29 ~]# dig -t A zx29.zxjr.com @192.168.9.28 +short
53     192.168.9.29

DNS工具


// 安装
yum -y install bind-utils

// 工具一: nslookup -- Windows也常用
    // 交互式
    nslookup 
        > www.baidu.com
        Server:        114.114.114.114
        Address:    114.114.114.114#53

        Non-authoritative answer:
        www.baidu.com    canonical name = www.a.shifen.com.
        Name:    www.a.shifen.com
        Address: 220.181.38.149
        Name:    www.a.shifen.com
        Address: 220.181.38.150
        > server localhost
        Default server: localhost
        Address: ::1#53
        Default server: localhost
        Address: 127.0.0.1#53
    // 非交互式
    nslookup www.baidu.com
        Server:        114.114.114.114
        Address:    114.114.114.114#53

        Non-authoritative answer:
        www.baidu.com    canonical name = www.a.shifen.com.
        Name:    www.a.shifen.com
        Address: 220.181.38.149
        Name:    www.a.shifen.com
        Address: 220.181.38.150

// 工具二: host 简单粗暴
    host -t A www.baidu.com
        www.baidu.com is an alias for www.a.shifen.com.
        www.a.shifen.com has address 220.181.38.149
        www.a.shifen.com has address 220.181.38.150
        
// 工具三: dig 功能强大的DNS工具, 重点 ******
dig -t A www.baidu.com @192.168.9.28
    ; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> -t A www.baidu.com @192.168.9.28
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49642
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6

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

    ;; ANSWER SECTION:
    www.baidu.com.        1200    IN    CNAME    www.a.shifen.com.
    www.a.shifen.com.    300    IN    A    220.181.38.150
    www.a.shifen.com.    300    IN    A    220.181.38.149

    ;; AUTHORITY SECTION:
    a.shifen.com.        1200    IN    NS    ns3.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns4.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns2.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns1.a.shifen.com.
    a.shifen.com.        1200    IN    NS    ns5.a.shifen.com.

    ;; ADDITIONAL SECTION:
    ns1.a.shifen.com.    1200    IN    A    61.135.165.224
    ns2.a.shifen.com.    1200    IN    A    220.181.33.32
    ns3.a.shifen.com.    1200    IN    A    112.80.255.253
    ns4.a.shifen.com.    1200    IN    A    14.215.177.229
    ns5.a.shifen.com.    1200    IN    A    180.76.76.95

    ;; Query time: 606 msec
    ;; SERVER: 192.168.9.28#53(192.168.9.28)
    ;; WHEN: Fri Aug 02 16:13:27 CST 2019
    ;; MSG SIZE  rcvd: 271 
    opcode
    
dig -t A www.baidu.com @192.168.9.28 +short
    www.a.shifen.com.
    220.181.38.149
    220.181.38.150

企业级Web DNS


安装部署 namedmanager

// namedmanager 下载网址: https://repos.jethrocarr.com/pub/jethrocarr/linux/centos/7/jethrocarr-custom/x86_64/

// 下载最新版本
[root@zx28 ~]# ll /opt/
total 1160
-rw-r--r-- 1 root root  102136 Jul 31 16:29 namedmanager-bind-1.9.0-2.el7.centos.noarch.rpm
-rw-r--r-- 1 root root 1084340 Jul 31 16:29 namedmanager-www-1.9.0-2.el7.centos.noarch.rpm

// 安装
[root@zx28 opt]# yum -y localinstall namedmanager-*

MySQL 配置

// 启动 Mariadb
systemctl start mariadb

// 设置开机启动
systemctl enable mariadb

// 为root设置密码
mysqladmin -uroot password 123456

// 导入namedmanager的数据库脚本
cd /usr/share/namedmanager/resources
./autoinstall.pl
... ...
Please enter MySQL root password (if any): 123456        // mariadb的root登录密码
... ...

配置 namedmanager

// 修改config.php; 增加一条配置
cd /etc/namedmanager
vim config.php
    ... ...
    $_SERVER['HTTPS'] = "TRUE";
    ... ...

// 修改 config-bind.php
vim config-bind.php
    ... ...
    $config["api_url"]              = "http://dns.zxjr.com/namedmanager";                   // Application Install Location
    $config["api_server_name"]      = "dns.zxjr.com";                               // Name of the DNS server (important: part of the authentication process)
    $config["api_auth_key"]         = "verycloud";                                  // API authentication key
    $config["log_file"]             = "/var/log/namedmanager_bind_configwriter";
    ... ...

// 修改 php.ini 
vim /etc/php.ini
    ... ...
    max_input_vars = 10000                // 提交限制表单数量
    ... ...
    
// 绑 hosts
vim /etc/hosts
    ... ...
    192.168.9.28    dns.zxjr.com

配置 apache

// 修改 apache 配置文件
vim /etc/httpd/conf/httpd.conf
    ... ...
    Listen 192.168.9.28:8080
    ServerName dns.zxjr.com
    <Directory />
        AllowOverride none
        allow from all
        # Require all denied
    </Directory>
    ... ...

// 检测配置文件的语法正确性
httpd -t
  [Tue Aug 06 09:48:51.020316 2019] [core:warn] [pid 23118] AH00114: Useless use of AllowOverride in line 11 of /etc/httpd/conf.d/namedmanager.conf.
  Syntax OK
// 启动并设置为开机启动 systemctl start httpd systemctl enable httpd

配置 Nginx

// Centos7 以后自带的yum源中不包含nginx的rpm包, 需要安装nginx源; 安装后在/etc/yum.repos.d下会生成一个 nginx.repo 的文件;
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

// 安装 Nginx
yum -y install nginx

// 修改 nginx 配置文件
vim /etc/nginx/conf.d/dns.zxjr.com.conf
    server {
        server_name dns.zxjr.com;

        location =/ {
            rewrite ^/(.*) http://dns.zxjr.com/namedmanager  permanent;
        }
        location / {
            proxy_pass http://192.168.9.28:8080;
            proxy_set_header Host       $http_host;
            proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
        }
    }

// 检测nginx配置文件语法正确性
nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
// 启动并设置开机启动
nginx
systemctl enable nginx

继续修改 namedmanager 的配置

// 修改 namedmanager_bind_configwriter.php
vim /usr/share/namedmanager/bind/namedmanager_bind_configwriter.php
    ... ...
    if (flock($fh_lock, LOCK_EX))
    {
            log_write("debug", "script", "Obtained filelock");
    }
    ... ...
    
// 给namedmanager_logpush.rcsysinit添加执行权限并启动
cd /usr/share/namedmanager/resources
chmod u+x namedmanager_logpush.rcsysinit
sh namedmanager_logpush.rcsysinit start
    Starting namedmanager_logpush service:
    [root@zx28 resources]# nohup: redirecting stderr to stdout
    
// 查看是否启动
ps -ef |grep -v grep |grep php
root     20363     1  0 Aug04 ?        00:00:00 php -q /usr/share/namedmanager/bind/namedmanager_logpush.php

使用supervisor管理

  这个脚本非常重要, 是整个 namedmanager 软件的核心, 所以要保证它一直在后台启动, 在这里使用 supervisor 这个软件把它管理起来

// 首先安装 supervisor 软件, 使用yum安装, 前提保证 epel-release 已安装, 没有安装的话直接使用yum安装
yum -y install epel-release
yum -y install supervisor

// 创建脚本启动的配置文件
vim /etc/supervisord.d/namedmanager_logpush.ini 
    [program:namedmanager_logpush]
    command=php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager_logpush
    numprocs=1
    directory=/usr/share/namedmanager/resources
    autostart=true
    autorestart=true
    startsecs=22
    startretries=4
    exitcodes=0,2
    stopsignal=QUIT
    stopwaitsecs=10
    user=root
    redirect_stderr=false
    stdout_logfile=/var/log/namedmanager_logpush.out
    stdout_logfile_maxbytes=64MB
    stdout_logfile_backups=4
    stdout_capture_maxbytes=1MB
    stdout_events_enabled=false
    stderr_logfile=/var/log/namedmanager_logpush.err
    stderr_logfile_maxbytes=64MB
    stderr_logfile_backups=4
    stderr_capture_maxbytes=1MB
    stderr_events_enabled=false
    
// 启动 supervisord 服务并设置开机启动
systemctl start supervisord
systemctl enable supervisord

// 查看脚本启动情况
supervisorctl status
    namedmanager_logpush             RUNNING   pid 20710, uptime 0:00:47
ps -ef |grep php|grep -v grep
    root     20710 20709  0 10:53 ?        00:00:00 php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager_logpush
    
// 查看日志
tail -200f /var/log/namedmanager_logpush
[root@hdss7-11 resources]# tail -fn 200 /var/log/namedmanager_logpush
    Error: Unable to authenticate with NamedManager API - check that auth API key and server name are valid

// 修改 inc_soap_api.php
vim /usr/share/namedmanager/bind/include/application/inc_soap_api.php
    ... ...
                            preg_match("/^http://(S*?)[:0-9]*//", $GLOBALS["config"]["api_url"], $matches);
    ... ...
    
// 重启 namedmanager_logpush.rcsysinit;已经用supervisor管理起来,只需要kill掉脚本进程;
ps -ef |grep php |grep -v grep
    root     23059 20709  0 13:36 ?        00:00:00 php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager_logpush
kill -9 23059
ps -ef |grep php|grep -v grep
    root     23128 20709  0 13:38 ?        00:00:00 php -q /usr/share/namedmanager/bind/namedmanager_logpush.php 2>&1 > /var/log/namedmanager_logpush
    
// 若是没有使用supervisor 管理, 则需要手动重启
cd /usr/share/namedmanager/resources/
sh namedmanager_logpush.rcsysinit restart

配置 BIND9


首先配置rndc

// rndc 是BIND 安装包提供的一种控制域名服务运行的工具, 它可以运行在其他计算机上, 通过网络与 DNS服务器进行连接, 然后根据管理员的指令对 named 进程进行远程控制, 此时, 管理员不需要 DNS 服务器的根用户权限, 使用 rndc 可以在不停 DNS 服务器工作的情况进行数据更新, 使修改后的配置文件生效. 在实际情况下, DNS服务器是非常繁忙的, 任何短时间的停顿都会给用户的使用带来影响, 因此, 使用 rndc 工具可以使 DNS服务器更好的为用户提供服务.

// 查看 rndc.key, 若是存在, 则删除 (若是配置的本机不需要删除, 直接使用) rm -f /etc/rndc.key // 删除后或者没有则生成 rndc.key rndc-confgen -r /dev/urandom // 配置rndc.conf vim /etc/rndc.conf key "rndc-key" { algorithm hmac-md5; secret "wkOZbb0OALfLlSAr2QvXhA=="; }; options { default-key "rndc-key"; default-server 192.168.9.28; default-port 953; };

Bind 配置

// bind 主配置文件
vim /etc/named.conf
    options {
        ... ...
    }
    
    key "rndc-key" {
        algorithm hmac-md5;
        secret "wkOZbb0OALfLlSAr2QvXhA==";
    };

    controls {
        inet 192.168.9.28 port 953
            allow { 192.168.9.28; } keys { "rndc-key"; };
    };
    ... ...
    include "/etc/named.namedmanager.conf";
    
// 修改 named.namedmanager.conf 文件属性
chown apache.named /etc/named.namedmanager.conf

// 检查配置
named-checkconf

// 重启bind; 重启的时候可能会报错, named.rfc1912.zones 与named.namedmanager.conf 配置文件中域的冲突; 将named.rfc1912.zones中对应项注释掉;
systemctl restart named

// 检查启动情况
netstat -anptu |grep 53
    tcp        0      0 192.168.9.28:53         0.0.0.0:*               LISTEN      19491/named         
    tcp        0      0 192.168.9.28:953        0.0.0.0:*               LISTEN      19491/named         
    udp        0      0 192.168.9.28:53         0.0.0.0:*                           19491/named

rndc 的使用

// 如何使用 rndc 控制dns服务器
rndc status            // 查看状态
rndc reload            // 重读配置文件和区域文件
rndc reload zone       // 重读区域问紧啊
rndc transfer zone     // 重新传送
rndc flush             // 清空缓存
rndc stop              // 停止 dns 服务
// 停止以后, 使用systemctl status named 可以看到状态为 faild; 使用 systemctl start named 启动;
// 命令后可以指定配置文件, 例如 rndc -c /etc/rndc.conf flush;
// 一般不要开放远程控制, 危险, 但本机上很常用;

配置 NamedManager 页面


浏览器访问 http://dns.zxjr.com (提前绑定好host), 用户名/密码: setup/setup123

配置 Configuration 选项卡

配置 Name Servers 选项卡

Add NewServer

Server Details

  • Name Server FQDN *

    dns.zxjr.com
    注意:这里一定要填config-bind.php里对应$config["api_server_name"]项配置的值

  • Description
    dns server for zxjr.com

Server Type

  • Server Type

    API (supports Bind)

API Authentication Key *

verycloud

Server Domain Settings

  • 必须勾选以下三项
  • Nameserver Group *

    default – Default Nameserver Group

  • Primary Nameserver *

    Make this server the primary one used for DNS SOA records.

  • Use as NS Record *

    Adds this name server to all domains as a public NS record.

Save Changes

保存后View Name Servers选项卡下,Logging Status应变绿且成为status_synced,如一直不变绿,需要进行排错,不要继续往下做了。

配置 Domain/Zones 选项卡

方法一: 手动添加域

Domain Details

  • Domain Type *

    Standard Domain
    Reverse Domain (IPv4)
    Reverse Domain (IPv6)
    根据实际情况选择,这里选择Standard Domain(正解域)

  • Domain Name *

    zxjr.com

  • Description

    zxjr.com domain

Domain Server Groups

注意:一定要勾选域服务器组

default – Default Nameserver Group

Start of Authority Record
  • Email Administrator Address *

    Email Administrator Address *

  • Domain Serial *

    2019073101

  • Refresh Timer *

    21600

  • Refresh Retry Timeout *

    3600

  • Expiry Timer *

    604800

  • Default Record TTL *

    60
    注意:这里配置SOA记录最后一个参数值没有按套路出牌,配置的并不是否定应答超时时间(NegativeAnswerTTL),而是默认资源记录的过期时间

Save Changes

 方法二: 自动添加域

Import Domain(自动导入)

  • Import Source

    Bind 8/9 Compatible Zonefile

  • Zone File

    选择文件zxjr.com.txt

导入一个正解域

upload,选择文件

附1:zxjr.com.txt   注意:这里可以不用给NS记录和对应的A记录了,会默认生成

$ORIGIN .
$TTL 600    ; 10 minutes
zxjr.com            IN SOA    dns.zxjr.com. 983012***.qq.com. (
                2019073101 ; serial
                10800      ; refresh (3 hours)
                900        ; retry (15 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
$ORIGIN zxjr.com.
$TTL 60    ; 1 minute
zx28                   A    192.168.9.28
zx29                   A    192.168.9.29

Save Changes

点保存进入下一个配置页面

Domain Details

这里可以配置域的信息和描述,我们这里先配一个Standard Domain(正解域)

Start of Authority Record

这里注意SOA记录的最后一个选项Default Record TTL *

Domain Records

检查一下和导入文件里的记录是否一致

Save Changes

先点一次保存

Domain Details

检查一遍域信息和描述

Domain Server Groups

注意:这里一定要勾选服务器组(上个页面没有,这里新出来的选项)

Start of Authority Record

检查一遍SOA记录

Save Changes

最后点一下保存,导入成功

导入一个反解域

upload,选择文件

附2:9.168.192.in-addr.arpa.txt  注意:这里可以不用给NS记录和对应的A记录了,会默认生成

$TTL 600    ; 10 minutes
@                 IN SOA    dns.zxjr.com. 983012***.qq.com. (
                2019073101 ; serial
                10800      ; refresh (3 hours)
                900       ; retry (15 minutes)
                604800     ; expire (1 week)
                86400      ; minimum (1 day)
                )
$ORIGIN 9.168.192.in-addr.arpa.
$TTL 60    ; 1 minute
28            PTR         zx28.zxjr.com.
29            PTR         zx29.zxjr.com.

Save Changes

点保存进入下一个配置页面

Domain Details

注意:

    • Domain Type *应为Reverse Domain (IPv4)
    • IPv4 Network Address *应为192.168.9.0/24

Start of Authority Record

配置SOA记录

Domain Records

检查一下和导入文件里的记录是否一致

Save Changes

先点一次保存

Domain Details

检查一遍域信息和描述

Domain Server Groups

注意:这里一定要勾选服务器组(上个页面没有,这里新出来的选项)

Start of Authority Record

检查一遍SOA记录

Save Changes

最后点一下保存,导入成功

对应的 Zone 里操作资源记录 (增/删/改)

View Domains选项卡

details 按钮

维护domain的基本配置,略

delete 按钮

删除domain,略

domain record(zxjr.com)

配置页面

  • Domain Details

    Domain zxjr.com selected for adjustment

  • Nameserver Configuration

    这里是配置NS记录的配置区,默认会生成一条

TypeTTLName/OriginContent-
NS 120 host.com dns-manager.od.com -
  • Mailserver Configuration

    略,暂不配置MX记录

  • Host Records Configuration

    这里是配置重点,A记录、CNAME记录、TXT记录等都在这个里配置
    因为是从文件导入的域,默认会有记录

TypeTTLNameContentReversePTR-
A 60 zx28 192.168.9.28 delete
A 60 zx29 192.168.9.29 delete

Save Changes

domain record(9.168.192.in-addr.arpa)

配置页面

  • Domain Details

    Domain 7.4.10.in-addr.arpa selected for adjustment

  • Nameserver Configuration

    这里是配置NS记录的配置区,默认会生成一条

TypeTTLName/OriginContent-
NS 120 9.168.192.in-addr.arpa dns.zxjr.com -
  • Mailserver Configuration

    略,暂不配置MX记录

  • Host Records Configuration

    这里是配置重点,A记录、CNAME记录、TXT记录等都在这个里配置
    因为是从文件导入的域,默认会有记录

TypeTTLNameContent-
PTR 60 28 zx28.zxjr.com delete
PTR 60 29 zx29.zxjr.com delete

Save Changes

返回Name Servers选项卡

查看页面DNS服务器状态

  • Logging Status
    status_synced
  • Zonefile Status
    status_synced

全部变绿且为status_synced即为正常

查看服务器上配置文件(都是由namedmanager服务自动生成)


cat /etc/named.namedmanager.conf 
    //
    // NamedManager Configuration
    //
    // This file is automatically generated any manual changes will be lost.
    //
    zone "zxjr.com" IN {          // 正向解析
        type master;            // 类型为主DNS
        file "zxjr.com.zone";       // 正向解析文件位置
        allow-update { none; };      // 允许自动更新
    };
    zone "9.168.192.in-addr.arpa" IN {  // 反向解析
        type master;
        file "9.168.192.in-addr.arpa.zone";
        allow-update { none; };
    };
    
cat /var/named/zxjr.com.zone 
$ORIGIN zxjr.com.
$TTL 60
@        IN SOA dns.zxjr.com. 983012386.qq.com. (
            2019080501 ; serial
            21600 ; refresh
            3600 ; retry
            604800 ; expiry
            60 ; minimum ttl
        )

; Nameservers

zxjr.com.    120 IN NS dns.zxjr.com.

; Mailservers


; Reverse DNS Records (PTR)


; CNAME


; HOST RECORDS

zx28    60 IN A 192.168.9.28
zx29    60 IN A 192.168.9.29


cat /var/named/9.168.192.in-addr.arpa.zone 
    $ORIGIN 9.168.192.in-addr.arpa.
    $TTL 60
    @        IN SOA dns.zxjr.com. 983012386.qq.com. (
                2019080501 ; serial
                21600 ; refresh
                3600 ; retry
                604800 ; expiry
                60 ; minimum ttl
            )

    ; Nameservers

    9.168.192.in-addr.arpa.    120 IN NS dns.zxjr.com.

    ; Mailservers


    ; Reverse DNS Records (PTR)

    28    60 IN PTR zx28.zxjr.com.
    29    60 IN PTR zx29.zxjr.com.

    ; CNAME

    ; HOST RECORDS

检查资源记录解析是否生效


dig -t A zx28.zxjr.com @192.168.9.28 +short
    192.168.9.28
dig -t A zx29.zxjr.com @192.168.9.28 +short
    192.168.9.29
dig -x 192.168.9.28 @192.168.9.28 +short
    zx28.zxjr.com.

使用NamedManager管理zone文件后主从不同步


主从不同步初步排查

检查主从服务器上zone文件中的 serial 值, 从服务器上的serial大于主服务器上的值时, 主从不同步;

将主服务器上的 serial 值改成大于 从服务器上的;

此处通过namedmanager管理后出现主从不同步

// namedmanager管理named后, 在namedmanager配置文件 config-bind.php 中指定的 zone文件的路径

# vim /etc/namedmanager/config-bind.php
... ...
$config["bind"]["config"]       = "/etc/named.namedmanager.conf";   // configuration file to write bind config too
... ...

// 配置named.namedmanager.conf 文件, 
# vim /etc/named.namedmanager.conf
... ...
zone "zxjr.com" IN {
    type master;
    file "zxjr.com.zone";
    allow-update { none; };
};
zone "9.168.192.in-addr.arpa" IN {
    type master;
    file "9.168.192.in-addr.arpa.zone";
    allow-update { none; };
};

// 在namd.conf中添加上面配置文件
# vim /etc/named.conf
... ...
include "/etc/named.namedmanager.conf";
... ...

// 检测dns配置文件报 zone 冲突
/etc/named.namedmanager.conf:6: zone 'zxjr.com': already exists previous definition: /etc/named.rfc191
/etc/named.namedmanager.conf:8: writeable file 'zxjr.com.zone': already in use: /etc/named.rfc1912.zon
/etc/named.namedmanager.conf:11: zone '9.168.192.in-addr.arpa': already exists previous definition: /ezones:49
/etc/named.namedmanager.conf:13: writeable file '9.168.192.in-addr.arpa.zone': already in use: /etc/na:51

// 以前的配置中手动在 named.rfc1912.zone 中添加过 zxjr.com 和 9.168.192.in-addr.arpa, 所以此处处理方法有两个
// 方法一: 不需要上面修改 named.conf 文件, 添加 named.namedmanager.conf 行, 而是修改 config-bind.php 文件中, 指定zone文件到/etc/named.rfc1912.zone; 重启supervisord和named
// 方法二: 将/etc/named.rfc1912.conf 的 zxjr.com 和 9.168.192.in-addr.arpa 域删掉, 重启named

配置客户端DNS


vim /etc/resolv.conf
    # Generated by NetworkManager
    search tian.com
    nameserver 192.168.9.28
    nameserver 192.168.9.29

用户系统及操作审计功能


用户系统

 可以创建不同的管理员用户

User Management 选项卡

该页面下可以查看所有的系统用户, 并可以进行用户管理

Create a new User Account

User Details

User Password

  • password *

    123456

  • password_confirm *

    123456

Save Changes

User Permissions 用户权限

    • disabled

      勾上,用户不生效
      不勾,用户生效
      这里不勾

    • admin(超级管理员)

      勾上,可以创建用户管理用户权限
      不勾,不可以创建用户管理用户权限
      这里不勾

    • namedadmins(管理员)

      勾上,dns管理员,可以管理zone和资源记录
      不勾,不可以管理zone和资源记录
      这里勾选

Save Changes

delete

删除用户,略

details

这里可以配置用户的基本信息

User Password

超级管理员可以帮助用户修改密码

User Options

  • option_shrink_tableoptions

    Automatically hide the options table when using defaults
    默认勾选,高级查询框显示与否

  • option_debug

    Enable debug logging - this will impact performance a bit but will show a full trail of all functions and SQL queries made
    默认不勾,勾选上可以在页面显示debug日志,建议部署时使用,投产后关闭

  • option_concurrent_logins

    Permit this user to make multiple simultaneous logins
    默认不勾,允许该用户在多点同时登录,应该严格禁止(审计)

使用用户tian登录

可以进行DNS服务管理,但无法管理用户

审计

使用 tian 用户在页面增加一条资源记录

Changelog选项卡

  可以看到所有用户的操作记录,实现审计功能,做到操作可溯

Tips

  • 生产上强烈建议新生成一个超级管理员用户并将setup用户删除!
  • 超级管理员用户应只有一个且不要轻易外泄,可以创建多个管理员账户。(一般根据业务而定,每个管理员负责一个子域)
  • 管理员账户创建好后,应由各人自行登录修改密码。
  • 超级管理员用户密码的复杂度要足够高,定期更换超级管理员用户密码。
原文地址:https://www.cnblogs.com/haorong/p/11289655.html