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記錄的配置區,默認會生成一條

Type TTL Name/Origin Content -
NS 120 host.com dns-manager.od.com -
  • Mailserver Configuration

    略,暫不配置MX記錄

  • Host Records Configuration

    這里是配置重點,A記錄、CNAME記錄、TXT記錄等都在這個里配置
    因為是從文件導入的域,默認會有記錄

Type TTL Name Content ReversePTR -
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記錄的配置區,默認會生成一條

Type TTL Name/Origin Content -
NS 120 9.168.192.in-addr.arpa dns.zxjr.com -
  • Mailserver Configuration

    略,暫不配置MX記錄

  • Host Records Configuration

    這里是配置重點,A記錄、CNAME記錄、TXT記錄等都在這個里配置
    因為是從文件導入的域,默認會有記錄

Type TTL Name Content -
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用戶刪除!
  • 超級管理員用戶應只有一個且不要輕易外泄,可以創建多個管理員賬戶。(一般根據業務而定,每個管理員負責一個子域)
  • 管理員賬戶創建好后,應由各人自行登錄修改密碼。
  • 超級管理員用戶密碼的復雜度要足夠高,定期更換超級管理員用戶密碼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM