1. 程式人生 > >Linux高階篇--DNS服務和BIND.md

Linux高階篇--DNS服務和BIND.md

Linux高階篇–DNS服務和BIND

本章概要

  • DNS服務
  • 實現主從伺服器
  • 實現子域
  • 實現view
  • 編譯安裝
  • 壓力測試
  • DNS排錯

一、 DNS服務

1.1 DNS服務相關

DNS服務

  • DNS:Domain Name Service 應用層協議   C/S,53/udp, 53/tcp
  • BIND:Bekerley Internat Name Domain   ISC (www.isc.org
  • 本地名稱解析配置檔案:hosts   /etc/hosts   %WINDIR%/system32/drivers/etc/hosts     122.10.117.2 www.magedu.com     93.46.8.89
    www.google.com

DNS域名

  • 根域
  • 一級域名:Top Level Domain: tld   com, edu, mil, gov, net, org, int,arpa   分為三類:組織域、國家域(.cn, .ca, .hk, .tw)、反向域
  • 最多127級域名
  • ICANN(The Internet Corporation for Assigned Names and Numbers)網際網路名稱與數字地址分配機構,負責在全球範圍內對網際網路通用頂級域名(gTLD)以及國家和地區頂級域名(ccTLD)系統的管理、以及根伺服器系統的管理

DNS域名結構 在這裡插入圖片描述

DNS解析

  • DNS查詢型別:   遞迴查詢:主機向本地域名伺服器的查詢一般都是採用遞迴查詢。   所謂遞迴查詢就是:如果主機所詢問的本地域名伺服器不知道被查詢的域名的IP地址,那麼本地域名伺服器就以DNS客戶的身份,向其它根域名伺服器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢。因此,遞迴查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。   迭代查詢:本地域名伺服器向根域名伺服器的查詢的迭代查詢。   迭代查詢的特點:當根域名伺服器收到本地域名伺服器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地伺服器:“你下一步應當向哪一個域名伺服器進行查詢”。然後讓本地伺服器進行後續的查詢。根域名伺服器通常是把自己知道的頂級域名伺服器的IP地址告訴本地域名伺服器,讓本地域名伺服器再向頂級域名伺服器查詢。頂級域名伺服器在收到本地域名伺服器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地伺服器下一步應當向哪一個許可權域名伺服器進行查詢。最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機。

  • 名稱伺服器:域內負責解析本域內的名稱的主機   根伺服器:13組伺服器 知識擴充套件: ipv4 dns根伺服器,全球共有13個,其中10個在美國,2個在荷蘭,1個在日本 ipv6 根伺服器全球共有25個,其中中國有1主3從

  • 解析型別:   FQDN --> IP   IP --> FQDN

  • 注意:正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹

  • 一次完整的查詢請求經過的流程:   Client -->hosts檔案 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根–> 頂級域名DNS–>二級域名DNS…

  • 解析答案:   肯定答案:對請求給予答覆   否定答案:請求的條目不存在等原因導致無法返回結果   權威答案:由專門負責該域的伺服器回覆的結果   非權威答案:與權威答案相反,由不是負責該域的伺服器給出的答覆

DNS伺服器型別

  • DNS伺服器的型別:   主DNS伺服器   從DNS伺服器   快取DNS伺服器(轉發器)
  • 主DNS伺服器:管理和維護所負責解析的域內解析庫的伺服器
  • 從DNS伺服器:從主伺服器或從伺服器“複製”(區域傳輸)解析庫副本   序列號:解析庫版本號,主伺服器解析庫變化時,其序列遞增   重新整理時間間隔:從伺服器從主伺服器請求同步解析的時間間隔   重試時間間隔:從伺服器請求同步失敗時,再次嘗試時間間隔   過期時長:從伺服器聯絡不到主伺服器時,多久後停止服務
  • “通知”機制:主伺服器解析庫發生變化時,會主動通知從伺服器

區域傳輸

  • 區域傳輸:   完全傳輸:傳送整個解析庫   增量傳輸:傳遞解析庫變化的那部分內容
  • Domain: Fully Qualified Domain Name   正向:FQDN --> IP   反向: IP --> FQDN
  • 負責本地域名的正向和反向解析庫   正向區域   反向區域
1.2 資源記錄

資源記錄

  • 區域解析庫:由眾多RR組成:   資源記錄:Resource Record, RR   記錄型別:A, AAAA, PTR, SOA, NS, CNAME, MX
  • SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
  • A:internet Address,作用,FQDN --> IP
  • AAAA:FQDN --> IPv6
  • PTR:PoinTeR,IP --> FQDN
  • NS:Name Server,專用於標明當前區域的DNS伺服器
  • CNAME : Canonical Name,別名記錄
  • MX:Mail eXchanger,郵件交換器
  • TXT:對域名進行標識和說明的一種方式,一般做驗證記錄時會使用此項,如:SPF(反垃圾郵件)記錄,https驗證等 示例:_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x

資源記錄定義的格式 語法格式:

name   [TTL]      IN           rr_type      value
名字   生命期   internet    資源記錄型別     值

magedu.com域名的SOA記錄寫法: magedu.com. 注意最後要加上"." ,否則系統會在域名後自動補上magedu.com TTL 快取生命期,以秒為單位,該時間統一定義,可以省略不寫 IN:表示internet網路 rr_type:資源記錄型別,如:SOA,A,NS value的各項定義如下: 1、主dns伺服器的名稱;如果有主從dns伺服器,此處寫主dns伺服器的名稱,如:dns1.magedu.com 2、dns管理員的郵箱,在dns軟體中,@符號有特殊含義,它表示本域的域名,用.來代替,因此郵箱格式為:admin.magedu.com 3、資料庫版本號,該版本號是需要手動更新的,如果資料庫內容有所更改,要人為手動更新資料庫版本號 主伺服器負責查詢和修改,從伺服器從主伺服器獲取資料,只負責查詢,不能修改 從伺服器資料庫的更新是根據主伺服器版本號來判斷,如果主伺服器的版本號比從版本號高,那麼從伺服器才會進行更新 4、主從同步時間間隔,預設以秒為單位,可指定時間單位,如一小時1h,一天1d 5、主從同步重試時間間隔,即同步失敗後,隔多久進行再次同步 6、從資料庫過期時長,如果一直同步失敗,從伺服器的資料庫多久之後會過期 7、不存在的記錄的快取時長,把輸入錯誤不存在的域名記錄,如:wwww.magedu.com快取下來,直接告知使用者域名不存在,不再進行查詢,節省流量 這七條記錄中,第1-2條是括號前內容的定義,第3-7條是指括號內的內容定義

SOA記錄

  • name: 當前區域的名字,例如“magedu.com.”
  • value: 有多部分組成 (1) 當前區域的主DNS伺服器的FQDN,也可以使用當前區域的名字; (2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般用.替換 例如:admin.magedu.com (3) 主從服務區域傳輸相關定義以及否定的答案的統一的TTL 例如:
vim /var/named/magedu.com.zone
$TTL 1D            生命期,統一定義
@       IN SOA  magedu.com. admin.magedu.com. (                 @代表本域,  magedu.com.代表主dns伺服器  admin.magedu.com.代表郵件伺服器
                                        20180926        ; serial        版本號,注意該版本號位數不能超過10位
                                        1D      ; refresh               主從同步時間間隔
                                        1H      ; retry                 主從同步重試間隔
                                        1W      ; expire                同步失敗後,資料庫過期時長
                                        3H )    ; minimum               錯誤記錄快取時長
@       NS      dns1.magedu.com.        NS記錄,表示本域的dns伺服器,IN省略不寫,可以從上條記錄繼承
dns1    A       192.168.32.129          主dns伺服器的名字要配合A記錄,把主dns伺服器的名字解析為對應的ip地址
@       MX  10  mailsrv                 MX記錄,表示郵件伺服器,並指定郵件伺服器的優先順序
mailsrv A       192.168.32.100          郵件伺服器的名字要配合A記錄,把郵件伺服器的名字解析為對應的ip地址
websrv1 A       192.168.32.130          
www     CNAME   websrv1                 定義websrv1伺服器的別名為www
注意:如果域名不寫全域字尾,系統會自動補全,如dns1相當於dns1.magedu.com,mailsrv相當於mailsrv.magedu.com等

NS記錄

  • name: 當前區域的名字,也可以用@代替
  • value: 當前區域的某DNS伺服器的名字,例如ns.magedu.com.
  • 注意:一個區域可以有多個NS記錄 例如:
magedu.com.   IN   NS   ns1.magedu.com.
magedu.com.   IN   NS   ns2.magedu.com.
  • 注意: (1) 相鄰的兩個資源記錄的name相同時,後續的可省略 (2) 對NS記錄而言,任何一個ns記錄後面的伺服器名字,都應該在後續有一個A記錄

MX記錄

  • name: 當前區域的名字
  • value: 當前區域的某郵件伺服器(smtp伺服器)的主機名
  • 一個區域內,MX記錄可有多個;但每個記錄的value之前應該有一個數字(0-99),表示此伺服器的優先順序;數字越小優先順序越高 例如:
magedu.com. IN MX 10 mx1.magedu.com.
IN MX 20 mx2.magedu.com.
  • 注意:對MX記錄而言,任何一個MX記錄後面的伺服器名字,都應該在後續有一個A記錄

A記錄

  • 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.$
*.magedu.com.     IN   A   5.5.5.5
magedu.com.       IN   A   6.6.6.6
  • 避免使用者寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
  • 注意:A記錄示例中多種寫法在不同場景有不同作用,在下面會有詳細示例

其他記錄

  • AAAA:是指ipv6格式的A記錄   name: FQDN   value: IPv6
  • PTR:反向解析記錄   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.
  • 注意:網路地址及字尾可省略;主機地址依然需要反著寫

別名記錄

  • CNAME:   name: 別名的FQDN   value: 真正名字的FQDN 例如: www.magedu.com. IN CNAME websrv.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:粘合記錄,父域授權子域的記錄
20.1.3 互聯域名

網際網路域名

  • 域名註冊:   代理商:萬網, 新網, godaddy
  • 註冊完成以後,想自己用專用服務來解析   管理後臺:把NS記錄指向的伺服器名稱,和A記錄指向的伺服器地址

阿里雲DNS 在這裡插入圖片描述

二、 實現主從伺服器

2.1 BIND軟體介紹
  • 在linux中,我們使用bind軟體實現dns服務 BIND安裝
  • BIND的安裝配置:   dns服務程式包:bind,unbound   程式名:named,unbound   程式包:yum list all bind*     bind:伺服器     bind-libs:相關庫     bind-utils:客戶端     bind-chroot: /var/named/chroot/

bind伺服器

  • 服務指令碼和名稱:/etc/rc.d/init.d/named /usr/lib/systemd/system/named.service
  • 主配置檔案:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
  • 解析庫檔案:/var/named/ZONE_NAME.ZONE
  • 注意: (1) 一臺物理伺服器可同時為多個區域提供解析 (2) 必須要有根區域檔案;named.ca (3) 應該有兩個(如果包括ipv6的,應該更多)實現localhost和本地迴環地址的解析庫
  • rndc:remote name domain controller,預設與bind安裝在同一主機,且只能通過127.0.0.1連線named程序,提供輔助性的管理功能;埠號:953/tcp

配置檔案

  • 主配置檔案:   全域性配置:options {};   日誌子系統配置:logging {};   區域定義:本機能夠為哪些zone進行解析,就要定義哪些zone   zone “ZONE_NAME” IN {};
  • 注意:任何服務程式如果期望其能夠通過網路被其它主機訪問,至少應該監聽在一個能與外部主機通訊的IP地址上
  • 快取名稱伺服器的配置:   監聽外部地址即可   dnssec: 建議關閉dnssec,設為no
2.2 主DNS伺服器

配置主DNS伺服器

  • 主DNS名稱伺服器:   (1) 在主配置檔案中定義區域   zone “ZONE_NAME” IN {   type {master|slave|hint|forward};   file “ZONE_NAME.zone”;   };   (2) 定義區域解析庫檔案     出現的內容     巨集定義     資源記錄
  • 主配置檔案語法檢查:   named-checkconf
  • 解析庫檔案語法檢查:   named-checkzone “magedu.com” /var/named/magedu.com.zone
  • rndc status|reload ;service named reload

主區域示例:

$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
websrv  IN  A   172.16.100.11
websrv  IN  A   172.16.100.12
www  IN  CNAME   websrv

測試命令dig

  • dig [-t type] name [@SERVER] [query options]   dig只用於測試dns系統,不會查詢hosts檔案進行解析
  • 查詢選項:   +[no]trace:跟蹤解析過程 : dig +trace magedu.com   +[no]recurse:進行遞迴解析   測試反向解析:   dig -x IP = dig –t ptr reverseip.in-addr.arpa   模擬區域傳送:   dig -t axfr ZONE_NAME @SERVER   dig -t axfr magedu.com @10.10.10.11   dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1   dig -t NS . @114.114.114.114   dig -t NS . @a.root-servers.net

測試命令

  • host [-t type] name [SERVER]   host –t NS magedu.com 172.16.0.1   host –t soa magedu.com   host –t mx magedu.com   host –t axfr magedu.com   host 1.2.3.4
  • nslookup命令: nslookup [-option] [name | -] [server] 互動式模式:   nslookup >   server IP: 指明使用哪個DNS server進行查詢   set q=RR_TYPE: 指明查詢的資源記錄型別   NAME: 要查詢的名稱

實驗:實現magedu.com的主DNS

(1)yum install bind 
(2)vim /etc/named.conf
   listen-on port 53 { localhost; };
    allow-query     { any; };
    
(3)vim /etc/named.rfc1912.zones
zone "magedu.com" {
        type master;
        file "magedu.com.zone"; 
};

(4)vim /var/named/magedu.com.zone 
$TTL 1D
@       IN SOA  dns1.magedu.com. admin.magedu.com. (
                                        2018092528      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns1
dns1    A       192.168.32.7
@       MX      10  mailsrv
mailsrv A       192.168.32.100
websrv1  A      192.168.32.17
www     CNAME   websrv1

(5)更改檔案許可權
chgrp named  /var/named/magedu.com.zone 
(6)重啟服務
rndc reload 

查詢郵件伺服器
dig -t MX magedu.com    查詢magedu.com域的郵件伺服器
dig -t  ns  magedu.com    查詢magedu.com的ns記錄
dig  郵件伺服器域名     可以查詢到郵件伺服器域名對應的ip地址
2.3 反向DNS解析

反向區域

  • 反向區域:   區域名稱:網路地址反寫.in-addr.arpa.   192.168.32. --> 32.168.192.in-addr.arpa. (1) 定義區域   zone “ZONE_NAME” IN {   type {master|slave|forward};   file “網路地址.zone”   }; (2) 定義區域解析庫檔案   注意:不需要MX,以PTR記錄為主 (3)ip地址反向解析為域名   dig -x 192.168.32.129 @192.168.32.129 反向解析   另外一種寫法(不推薦):dig -t ptr 129.32.168.192.in-addr.arpa. @192.168.32.129

示例:

$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.

實驗:搭建反向解析

更改區域的域配置檔案
vim /etc/named.rfc1912.zones
 29 zone "32.168.192.in-addr.arpa" {
 30         type master;
 31         file "192.168.32.zone"; 
 32 };
編輯資料庫檔案,可以參考named.loopback檔案,注意檔案許可權
cp -a named.loopback 192.168.32.zone
[[email protected] named]#cat 192.168.32.zone 
$TTL 1D
@ IN SOA  dns1 admin.magedu.com. (
          0 ; serial
          1D  ; refresh
          1H  ; retry
          1W  ; expire
          3H )  ; minimum
@     NS     dns1               NS記錄,表示dns1是dns伺服器
dns1  A     192.168.32.129   A記錄配合把dns1域名解析為ip地址
129   PTR   dns1.magedu.com.    129後面的資料,系統會自動補全,相當於129.32.168.192.in-addr.apra
100   PTR   www.qq.com.      100相當於100.32.168.192.in-addr.apra
檢查域檔案
named-checkzone 32.168.192.in-addr.arpa 192.168.32.zone
重啟服務
rndc reload

A記錄多種寫法示例:

如果登入www.magedu.com網站時,只寫入magedu.com而不寫www,會出現問題
在區域的域配置檔案中新增一條A記錄
vim /var/named/magedu.com
 15 @       A       192.168.32.130   @相當於magedu.com
注意:該記錄要對應dns伺服器的ip地址
curl  magedu.com


訪問某網站時,寫錯域名也能訪問
如訪問京東:www.jd.com時,寫錯為wwwwww.jd.com也可以訪問
泛域名解析:
vim /var/named/magedu.com.zone 
16 *      A        192.168.32.130   *相當於*.magedu.com
curl aaa.magedu.com


vim /var/named/magedu.com.zone 
17 $GENERATE 1-254 server$ A 3.3.3.$ 
3.3.3.$中的$符號呼叫servce$,而server$的範圍為1-254,也就是說3.3.3.$的範圍是3.3.3.(1-254),該命令可以生成254條記錄
測試:
dig server1.magedu.com
解析地址為3.3.3.1
dig server100.magedu.com
解析地址為3.3.3.100

允許動態更新

  • 指定的zone語句塊中:Allow-update {any;};
  • chmod 770 /var/named
  • setsebool -P named_write_master_zones on
  • nsupdate
    >server 127.0.0.1
    >zone magedu.com
    >update add ftp.magedu.com 88888 IN A 8.8.8.8
    >send
    >update delete www.magedu.com A
    >send
  • 測試:dig ftp.magedu.com @127.0.0.1 ll /var/named/magedu.com.zone.jnl
  • 檢視/var/named/magedu.com.zone檔案
cat /var/named/magedu.com.zone  
zone "magedu.com" {
        type master;
        file "magedu.com.zone";
        allow-upadate {x.x.x.x}    x.x.x.x為允許更新的ip地址                                                               
};
2.5 從DNS伺服器

從伺服器 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";
};

實驗:實現dns伺服器的高可用性,搭建主從dns伺服器 實現dns伺服器的高可用性,搭建主從dns伺服器 主伺服器資料發生變化,向從伺服器推送資料 觸發條件:主伺服器資料發生變化 從伺服器從主伺服器拉取資料 觸發條件:時間,指定每隔多久拉取一次資訊 規劃如下: 192.168.32.129 主伺服器 192.168.32.130 從伺服器 192.168.32.128 測試伺服器

更改配置檔案
/etc/named.conf
//  listen-on port 53 { 127.0.0.1; };
//  allow-query     { localhost; };

配置管理域
/etc/named.rfc1912.zones
zone "magedu.com" {
        type slave;          指定從伺服器型別
        masters { 192.168.32.129; };    指定主伺服器ip地址
        file "slaves/magedu.com.zone.slave"  指定從伺服器的庫檔案
};
注意:從伺服器的庫檔案必須存放在/var/named/slaves目錄下,檔案中slaves/magedu.com.zone.slave是相對路徑,系統會自動找到該檔案

更改主伺服器/var/named/magedu.com.zone
在主伺服器資料庫檔案中新增從伺服器地址
  8 @       NS      dns1          主伺服器NS記錄
  9 @       NS      dns2          從伺服器NS記錄
 10 dns1    A       192.168.32.129   A記錄配合解析主伺服器dns域名
 11 dns2    A       192.168.32.130   A記錄配合解析從伺服器dns域名 
更改後,重啟服務 rndc reload

在從伺服器檢視檔案是否從主伺服器拉取過來
ls /var/named/slaves
magedu.com.zone.slave
注意:此檔案可以從dns伺服器獲取,也可以手動建立

在測試主機網路配置檔案中指定第二個dns地址
DNS1=192.168.32.129
DNS2=192.168.32.130
把主dns伺服器的dns服務關閉,測試從dns伺服器是否能夠啟動
dig www.magedu.com

在主伺服器資料庫檔案中新增一條A記錄,手動更新版本號,測試從伺服器是否能夠拉取主伺服器已經更改的資料
bbs  A   1.1.1.1
在測試主機:
dig  bbs.magedu.com @192.168.32.130   指定從某主機查詢記錄

這樣搭建從dns伺服器存在著安全漏洞,因為從dns伺服器的搭建沒有經過主伺服器的同意就能充當從dns伺服器,連線到主dns伺服器獲取資料。 雖然在主伺服器上/etc/named/magedu.com.zone檔案中配置了一條關於從伺服器NS記錄和A記錄,這兩條記錄只能影響主伺服器向從伺服器推送資料的操作,但並不影響從伺服器向主伺服器拉取資料的操作 解決方法:

在主dns伺服器配置檔案/etc/named.conf中新增策略
vim  /etc/named.conf
allow-transfer  { 192.168.32.130; }; 
此時,仍然能從從dns伺服器抓取資料
在從dns伺服器配置檔案/etc/named.conf中新增策略
vim  /etc/named.conf
allow-transfer  { none; }; 

rndc命令

  • rndc:   rndc --> rndc (953/tcp)   rndc COMMAND
  • COMMAND:   reload: 過載主配置檔案和區域解析庫檔案   reload zonename: 過載區域解析庫檔案   retransfer zonename: 手動啟動區域傳送,而不管序列號是否增加   notify zonename: 重新對區域傳送發通知   reconfig: 過載主配置檔案   querylog: 開啟或關閉查詢日誌檔案/var/log/message   trace: 遞增debug一個級別   trace LEVEL: 指定使用的級別   notrace:將除錯級別設定為 0   flush:清空DNS伺服器的所有快取記錄

三、 實現DNS子域

子域

  • 子域授權:分散式資料庫
  • 正向解析區域子域方法
  • 定義一個子區域:
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
  • 注意:關閉dnssec功能:
dnssec-enable no;
dnssec-validation no;

實驗:子域的搭建 magedu.com的子域搭建

子域搭建的三種方法:
方法1:以子域:zhengzhou.magedu.com為例
如果子域訪問量不大,可以拿一臺伺服器,既當父域magedu.com,又當子域zhengzhou.magedu.com
vim /var/named/magedu.com.zone 
20 www.zhengzhou  A  2.2.2.2   只需新增一條記錄即可
在測試機進行測試:
dig www.zhengzhou.magedu.com
這種方法把www.zhengzhou.magedu.com作為一條A記錄,並沒有用域來實現

方法2:
以子域:shanghai.magedu.com為例
vim /etc/named.rfc1912.zones    在域檔案中新增一個域
 17 zone "shanghai.magedu.com" {
 18         type master;
 19         file "shanghai.magedu.com.zone";                                                     
 20 };

[[email protected] ~]#vim /var/named/shanghai.magedu.com.zone

  1 $TTL 1D
  2 @       IN SOA  dns1  admin.magedu.com. (
  3                                         20180928        ; serial
  4                                         1D      ; refresh
  5                                         1H      ; retry
  6                                         1W      ; expire
  7                                         3H )    ; minimum
  8 @       NS      dns1
  9 dns1    A       192.168.32.129
 10 websrv1 A       3.3.3.3                                                                     
 11 www     CNAME   websrv1
測試:
dig www.shanghai.magedu.com

方法3:
以子域:shenzhen.magedu.com為例
主機:192.168.32.131
當dns伺服器訪問量過大時,需要把dns服務搭建到單獨一臺伺服器上
這種方法稱作子域委派,即把子域委派給某臺伺服器單獨管理                 
在主伺服器上建立委派
vim /var/named/magedu.com.zone
10 shenzhen NS     dns3           增加NS記錄,表示其為子域dns伺服器
13 dns3    A       192.168.32.131  A記錄配合解析域名為ip地址
在192.168.32.131上建立資料庫檔案/var/named/shenzhen.magedu.com.zone
[[email protected] named]#vim shenzhem.magedu.com.zone

$TTL 1D
@       IN SOA  dns1 admin (
                                        20180928        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       192.168.32.131
websrv1 A       5.5.5.5
www     CNAME   websrv1

vim /etc/named.rfc1912.zones   新增域
zone "shenzhen.magedu.com" {
        type master;
        file "shenzhen.magedu.com.zone";
};

轉發伺服器

  • 注意:被轉發的伺服器需要能夠為請求者做遞迴,否則轉發請求不予進行
  • (1) 全域性轉發: 對非本機所負責解析區域的請求,全轉發給指定的伺服器
Options {
       forward first|only;
       forwarders { ip;};
};
  • (2) 特定區域轉發:僅轉發對特定的區域的請求,比全域性轉發優先順序高
zone "ZONE_NAME" IN {
      type forward;
      forward first|only;
      forwarders { ip;};
};
  • 工作模式:forward first|only first:如果使用者的某請求本地dns伺服器沒有,就把請求轉發到指定dns伺服器上,如果指定dns伺服器上也沒有,那麼本地dns伺服器自己到網際網路上尋找 only:如果使用者的某請求本地dns伺服器沒有,就把請求轉發到指定dns伺服器上,如果指定dns伺服器上也沒有,那麼將返回請求結果失敗,不再進行查詢
  • 注意:關閉dnssec功能:
dnssec-enable no;
dnssec-validation no;

實驗:實現DNS轉發功能

三臺主機做模擬:
192.168.32.128
192.168.32.129
192.168.32.131
128主機向129主機查詢wang的域名,129主機上沒有,轉發到131主機,131主機上有wang的域名
在主機192.168.32.131上設定一個新的域:wang.com
/etc/named.rfc1912.conf
zone "wang.com" {
        type master;
        file "wang.com.zone";
};
/var/named/wang.com.zone
[[email protected] named]#vim /var/named/wang.com.zone 

$TTL 1D
@       IN SOA  dns1  admin  (
                                        20180928        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       192.168.32.131
websrv1 A       8.8.8.8
www     CNAME   websrv1
在129主機上設定轉發
vim /etc/named.conf
options{
 21         forward only;          設定only轉發策略
 22         forwards { 192.168.32.131; }   
};
在128主機上查詢:
dig www.wang.com @192.168.32.129
由於轉發策略設定的時foreword only,如果查詢131主機上也不存在的域名,那麼結果將會返回查詢失敗

把129主機上的轉發策略設定為foreword first,並且確定該主機能夠連線網際網路
在128主機上查詢:
dig www.baidu.com @192.168.32.129

rndc flush  清除dns快取

四、 實現view

bind中的ACL

  • bind中基礎的安全相關的配置: acl: 把一個或多個地址歸併為一個集合,並通過一個統一的名稱呼叫
  • 格式:
acl acl_name {
       ip;
       net/prelen;
       ……
};

示例:

acl mynet {
       172.16.0.0/16;
       10.10.10.10;
};
  • bind有四個內建的acl:   none: 沒有一個主機   any: 任意主機   localhost: 本機   localnet: 本機的IP同掩碼運算後得到的網路地址
  • 注意:只能先定義,後使用;因此一般定義在配置檔案中,處於options的前面

訪問控制

  • 訪問控制的指令:   allow-query {}: 允許查詢的主機;白名單   allow-transfer {}:允許區域傳送的主機;白名單   allow-recursion {}: 允許遞迴的主機,建議全域性使用   allow-update {}: 允許更新區域資料庫中的內容

智慧DNS 在這裡插入圖片描述

CDN (Content Delivery Network) 在這裡插入圖片描述

CDN內容網路分發 在這裡插入圖片描述

bind view

  • CDN: Content Delivery Network內容分發網路   服務商:藍汛,網宿,帝聯等
  • 智慧DNS:   dnspod   dns.la
  • view:檢視:實現智慧DNS:   一個bind伺服器可定義多個view,每個view中可定義一個或多個zone   每個view用來匹配一組客戶端   多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫檔案
  • 注意:   (1) 一旦啟用了view,所有的zone都只能定義在view中   (2) 僅在允許遞迴請求的客戶端所在view中定義根區域   (3) 客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
  • 格式:
view VIEW_NAME {
      match-clients { testacl; };
      zone “magedu.com” {
           type master;
           file “magedu.com.zone”; };
      include “/etc/named.rfc1912.zones”;
}

實驗:智慧dns模擬實驗:

規劃:
192.168.32.0/24   模擬 beijing
通過192.168.32.0訪問www.magedu.com  返回6.6.6.6
172.20.0.0/16     模擬 shanghai
通過172.20.0.0訪問www.magedu.com  返回8.8.8.8
通過本地網絡卡訪問,返回192.168.32.130

在192.168.32.129主機上進行配置
注意:該內容一定要寫在檔案最上面(即解除安裝options行上面)
vim /etc/named.conf
acl beijingnet{ 192.168.32.0/24; };   
acl shanghainet{ 172.20.0.0./16; };
acl othernet{ any; };  

};
view  beijingview {
        match-clients { beijingnet; };
        include "/etc/named.rfc1912.zones.beijing";
};
view  shanghaiview {
        match-clients { shanghainet; };
        include "/etc/named.rfc1912.zones.shanghai";
};
view  otherview {
        match-clients { othernet; };
        include "/etc/named.rfc1912.zones";                                                                                                                                                    
};

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

注意:一旦存在view資訊,根域的區域資訊必須存放在view裡,否則,該資訊將會失效
因此把該資訊存放到/etc/named.rfc1912.zones檔案中即可
vim /etc/named.rfc1912.zones
zone "." IN {
        type hint;
        file "named.ca";

cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.beijing -p
cp /etc/named.rfc1912.zones /etc/named.rfc1912.zones.shanghai -p

vim /etc/named.rfc1912.zones.beijing
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.com" {
        type master;
        file "magedu.com.zone.beijing";
};
;

vim /etc/named.rfc1912.zones.shanghai
zone "." IN {
        type hint;
        file "named.ca";
};

zone "magedu.com" {
        type master;
        file "magedu.com.zone.shanghai";
};

vim  /etc/named.rfc1912.zones 
zone "." IN {
        type hint;
        file "named.ca";
};
zone "magedu.com" {
        type master;
        file "magedu.com.zone";                                                                                                                                                                
};


[[email protected] ~]#vim /var/named/magedu.com.zone

$TTL 1D
@       IN SOA  dns1.magedu.com. admin.magedu.com. (
                                        20180928        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       192.168.32.129                                                                                                                                                                 
websrv1 A       192.168.32.130
www     CNAME   websrv1

[[email protected] ~]#vim /var/named/magedu.com.zone.shanghai 
$TTL 1D
@       IN SOA  dns1 admin (
                                        20180928        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       192.168.32.129
mailsrv A       192.168.32.100                                                                                                                                                                 
websrv1 A       8.8.8.8
www     CNAME   websrv1

[[email protected] ~]#vim /var/named/magedu.com.zone.beijing 

$TTL 1D
@       IN SOA  dns1  admin  (
                                        20180928        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       192.168.32.129                                                                                                                                                                 
mailsrv A       192.168.32.100
websrv1 A       6.6.6.6
www     CNAME   websrv1

測試:
在129主機:
dig www.magedu.com @127.0.0.1
在其他主機:
dig www.magedu.com @172.20.129.131    
dig www.magedu.com @192.168.32.129
檢視返回值是否正確

五、 編譯安裝bind

編譯安裝bind

  • 下載bind:
    isc.org:
            bind-9.10
            bind-9.11
            bind-10
  • 編譯安裝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
  • 環境變數:
vim /etc/profile.d/named.sh
    export PATH=/usr/local/bind9/bin:
    /usr/local/bind9/sbin/:$PATH
  • 庫和標頭檔案
vim /etc/ld.so.conf.d/named.conf
    /usr/local/bind9/lib
ldconfig –v
ls -sv /usr/local/bind9/include /usr/include/named
  • man幫助
vim /etc/man.config | /etc/man_db.conf
    MANPATH /usr/local/bind9/share/man
man named.conf
  • 配置/etc/named/named.conf檔案
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;};
    };
  • 區域資料庫
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
  • 配置/var/named/named.loopback檔案
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
  • 設定許可權 chmod 640 /var/named/* chmod 640 /etc/named/named.conf chgrp -R named /var/named/ chgrp named /etc/named/named.conf
  • 啟動服務和測試 man named named -u named -f -g -d 3 前端級別3方式執行 named -u named 後臺執行 killall named ss -tuln tail /var/log/message named -u named
  • 支援rndc rndc reload 觀察錯誤提示 rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key tail /etc/named/rndc.conf >> /etc/named/named.conf killall -SIGHUP named rndc status

六、 壓力測試

壓力測試

  • /root/bind-xxx/contrib/scripts
  • 編譯壓力測試工具 cd /root/bind-xxx/contrib/queryperf ./configure make cp queryperf /usr/local/bind9/bin queryperf -h
  • 開啟日誌功能 rndc querylog rndc status queryperf -d test.txt -s 127.0.0.1 wc -l /var/log/message

七、 DNS排錯

DNS排錯

; <<>> 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.

  可使用dig +trace排錯,可能是網路和防火牆導致

  • NXDOMAIN:The queried name does not exist in the zone.   可能是CNAME對應的A記錄不存在導致
  • REFUSED:The nameserver refused the client’s DNS request due to policy restrictions.   可能是DNS策略導致
  • NOERROR不代表沒有問題,也可以是過時的記錄
  • 檢視是否為權威記錄,flags:aa標記判斷
  • 被刪除的記錄仍能返回結果,可能是因為*記錄存在
  • 如:*.example.com. IN A 172.25.254.254
  • 注意“.”的使用
  • 避免CNAME指向CNAME記錄,可能產生迴環
  • 正確配置PTR記錄,許多服務依賴PTR,如sshd,MTA
  • 正確配置輪詢round-robin記錄