天天看點

DNS服務搭建(隻有我搭建不好的服務)

DNS伺服器在企業中應用也是十分廣泛的,搭建環境中,主機數量偏多,IP管理的話不好進行,是以就需要用主機名稱來管理,為了處理IP與主機名的一一對應關系,這時候便用到了DNS服務,下面我們來一起了解一下這個服務吧。

DNS的英文全名叫Domain Name Service,或者Domain Name System ,它是處在應用層的協定,是基于C/S,伺服器/用戶端結構體系的,它占用UDP和TCP的53端口,普通使用者去查一條解析記錄,走UDP的53端口,而區域傳輸需要同時使用UDP和TCP的53端口,包括主從複制也需要,這一點我們後面再談。

一般用來實作DNS解析用到的軟體是BIND,它是一款老牌的提供DNS服務的軟體,曆史悠久,同時這個公司也提供DHCP服務的軟體。

BIND的英文全名叫Bekerley Internat Name Domain ISC 這是它的官網,有興趣可以去看看:www.isc.org.

在Linux中,本身提供本地名稱解析配置檔案是hosts,它在在/etc/hosts檔案中;

在Windows中,他存放在%WINDIR%/system32/drivers/etc/hosts 中,%WINDIR%表示的是你裝系統時候的系統盤,比如C槽,D盤

對于DNS伺服器的類型,主要有以下幾種:

  • 主DNS伺服器

    管理和維護所負責解析的域内解析庫的伺服器

  • 從DNS伺服器

    從主伺服器或從伺服器“複制”(區域傳輸)解析庫副本

    在解析庫裡面有以下幾項關鍵内容

    • 序列号:解析庫版本号,主伺服器解析庫變化時,其序列遞增
    • 重新整理時間間隔:從伺服器從主伺服器請求同步解析的時間間隔
    • 重試時間間隔:從伺服器請求同步失敗時,再次嘗試時間間隔
    • 過期時長:從伺服器聯系不到主伺服器時,多久後停止服務  “通知”機制:主伺服器解析庫發生變化時,會主動通知從伺服器
  • 緩存DNS伺服器(轉發器)

    這種DNS伺服器就相當于小區裡的DNS,為用戶端提供傳遞解析請求,同時也可以緩存DNS記錄,可以加快使用者通路速度,減短解析時間。

一次完整的查詢請求經過的流程是下面這樣的:

Client -->hosts檔案 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(疊代) --> 根–> 頂級域名DNS–>二級域名DNS…

而在傳回解析結果的時候,會有以下幾種内容(例如dig查詢):

  • 肯定答案:得到的解析結果
  • 否定答案:請求的條目不存在等原因導緻無法傳回結果
  • 權威答案:直接得到的解析結果
  • 非權威答案:通過轉發,一步一步查詢得到的結果

而對于BIND來說,它的具體内容和配置檔案有以下:

  • 服務腳本和名稱:/etc/rc.d/init.d/named #CentOS6
  • /usr/lib/systemd/system/named.service #CentOS7
  • 主配置檔案:
    • /etc/named.conf
    • /etc/named.rfc1912.zones
    • /etc/rndc.key
  • 解析庫檔案:/var/named/ZONE_NAME.ZONE
  • 注意:
    • 一台實體伺服器可同時為多個區域提供解析
    • 必須要有根區域檔案;named.ca
    • 應該有兩個(如果包括ipv6的,應該更多)實作localhost 和本地回環位址的解析庫
  • rndc: remote name domain controller, 預設與bind安裝在同一主機,且隻能通過127.0.0.1連接配接

    named程序,使用TCP的953端口提供輔助性的管理功能,比如:

    • rndc reload 不用重新啟動BIND,使配置檔案生效
    • rndc flush 清楚DNS緩存

rndc後面加:

reload: 重載主配置檔案和區域解析庫檔案

reload zonename: 重載區域解析庫檔案

retransfer zonename: 手動啟動區域傳送,而不管序列号是否增加

notify zonename: 重新對區域傳送發通知

reconfig: 重載主配置檔案

querylog: 開啟或關閉查詢日志檔案/var/log/message

trace: 遞增debug一個級别

trace LEVEL: 指定使用的級别

notrace:将調試級别設定為 0 flush:清空DNS伺服器的所有緩存記錄

主配置檔案内容:

  • 主配置檔案: 全局配置:options {};
  • 日志子系統配置:logging {};
  • 區域定義:本機能夠為哪些zone進行解析,就要定義哪些zone

    zone “ZONE_NAME” IN {};

    這裡需要特别強調,由于BIND軟化曆史悠久,它的配置檔案文法是C語言風格,每一句話,隻要換行必須加分号";",注釋也不再是"#",而是"//"

  • 注意:任何服務程式如果期望其能夠通過網絡被其它主機通路 ,至少應該監聽在一個能與外部主機通信的IP位址上
  • 緩存名稱伺服器的配置: 監聽外部位址即可

    dnssec: 建議關閉dnssec,設為no

主DNS名稱伺服器:

  • 在主配置檔案/etc/named.conf中定義區域

    zone “ZONE_NAME” IN {

    type {master|slave|hint|forward};

    type有四種類型,我們後面再講

    file “ZONE_NAME.zone”;

    allow-update { none; };

    這裡這一項,它的具體作用後面再講,不加也可以,不是必須的

    };

  • 定義區域解析庫檔案

    出現的内容

    宏定義

    資源記錄

  • 主配置檔案文法檢查: named-checkconf
  • 解析庫檔案文法檢查:

    named-checkzone “yangyang.host” /var/named/yangyang.host.zone

  • 配置檔案重新加載:

    rndc status|reload

    service named reload

說了這麼多,也不如實實在在的搭建一個服務來的明白,那我們下面就來具體搭建一個DNS服務吧!

一.正向yangyang.host解析

1.安裝包bind

yum install -y bind

2.vim /etc/named.conf

修改這個主配置檔案,需要知道,如果下面兩項沒有修改,會造成用戶端無法連接配接你的DNS伺服器。

第一項:

listen-on port 53 { localhost;};

這一項的意思是,監聽自己回環IP的53端口,預設是127.0.0.1 這樣是把端口綁定到了127.0.0.1IP上,隻有你自己通過127.0.0.1才能連接配接到伺服器,其他人不可以,而且你在伺服器上使用自己的真正IP也不行,隻能使用這個回環IP。這一項也可以使用//注釋掉。

第二項:

allow-query { any;};

這一項不開的話,其他人還是不能通路,預設是localhost,隻允許自己的IP來通路,這也失去了DNS伺服器的意義。是以需要把它改為any,允許任何人通路,這裡你也可以改成具體IP:192.168.1.20,或者改為網段:192.168.1.0/24,這一項也可以使用//注釋掉。

好啦,到這裡,主配置檔案就修改好了,在許多教程中,會在主配置檔案下面來添加區域檔案,但是這樣不友善管理,容易亂,需要注意在主配置檔案最下面有這樣一句話:include “/etc/named.rfc1912.zones”;

它的意思就是這路徑下的檔案也可以定義,它是包含在主配置檔案裡的,是以我們就在這裡設定區域檔案,友善統一管理。

3.vim /etc/named.rfc1912.zones

修改這個檔案配置區域檔案,在裡面找個地方加入下面内容,切記不能忘了分号";"

zone "yangyang.host" IN {
        type master;  //聲明是主DNS伺服器,因為它有主從之分
        file "yangyang.host.zone"; //聲明區域資料庫檔案路徑,這裡寫的是相對路徑,系統知道他應該在/var/named/下面找
};
           

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

修改區域資料庫檔案,這裡十分關鍵,為核心内容,格式也十分重要,為什麼DNS叫“隻有我搭建不好的服務”,原因就在這。

首先,這個檔案實在/var/named/目錄下建立的,但是進去會發現沒有這個檔案,是以需要你拷貝模闆,并且重新命名,自己修改,模版也在這個目錄下,叫:named.localhost

cp -a /var/named/named.localhost yangyang.host.zone

這裡的yangyang.host.zone是上一步在zone "yangyang.host"裡面的file “yangyang.host.zone” 裡面的内容,是以名稱必須統一,為你要解析的域名。

$TTL 1D
@       IN SOA dnssrv1 admin.yangyang.host. (
                                        0       ; serial
                                        1H      ; refresh
                                        600     ; retry
                                        1D      ; expire
                                        3H )    ; minimum

        NS      dnssrv1
dnssrv1  A    192.168.218.100
websrv1  A    6.6.6.6
www     CNAME  websrv1
@       MX  10 mailsrv
mailsrv A  192.168.218.101
           

這裡我們主要說一下這個解析資料庫裡面的每一項含義:

區域解析庫是由衆多RR(Resource Record)組成:

  • 資源記錄:Resource Record, RR
  • 記錄類型:A, AAAA, PTR, SOA, NS, CNAME, MX
    • SOA:Start Of Authority,起始授權記錄;一個區域解析庫有 且僅能有一個SOA記錄,必須位于解析庫的第一條記錄
    • A:internet Address,作用,域名(QFDN) --> IPv4
    • AAAA: 域名(QFDN) --> IPv6
    • PTR: PoinTeR,IP --> FQDN
    • NS: Name Server,專用于标明目前區域的DNS伺服器
    • CNAME:Canonical Name,别名記錄
    • MX: Mail eXchanger,郵件交換器

資源記錄SOA定義的格式:

文法:name [TTL] IN RR_type value

  • 注意:
    • (1) TTL可從全局繼承
    • (2) @可用于引用目前區域的名字
    • (3) 同一個名字可以通過多條記錄定義多個不同的值;此時 DNS伺服器會以輪詢方式響應
    • (4) 同一個值也可能有多個不同的定義名字;通過多個不同的 名字指向同一個值進行定義;此僅表示通過多個不同的名字可 以找到同一個主機
  • name: 目前區域的名字,例如“yangyang.host.”
  • value: 有多部分組成
    • (1) 目前區域的主DNS伺服器的FQDN,也可以使用目前區域的名字;
    • (2) 目前區域管理者的郵箱位址;但位址中不能使用@符号,一般用.替換 ,例如[email protected]. 等價linuxedu.yangyang.host.
    • (3) 主從服務區域傳輸相關定義以及否定的答案的統一的TTL

對于這個區域資料庫檔案:

TTL是生存時間,也就說DNS緩存時間 1D是一天,以此類推1H 一小時,1W 一周,預設不寫字母為秒,例如:10 是10秒

@表示本伺服器的域,也就是yangyang.host.

這裡有一點需要十分注意!!!

這裡有一點需要十分注意!!!

這裡有一點需要十分注意!!!

在區域資料庫檔案裡,你的域名隻要後面沒加".",系統會預設給你補全,他認為你這不全,比如:@可以寫成yangyang.host. 但是你要是寫yangyang.host,他就會認為你應該是yangyang.host.yangyang.host. 是以你的配置檔案就出了問題。

其實它的思路很簡單,比如:

NS      dnssrv1
dnssrv1  A       192.168.218.100
websrv1  A       6.6.6.6
www      CNAME   websrv1
           

第一步,你肯定得先把伺服器的IP表示出來對吧,因為在之前SOA記錄了定義了伺服器的名稱dnssrv1,還有郵箱名稱admin.yangyang.host.

@ IN SOA dnssrv1 admin.yangyang.host.

是以,因為有繼承機制, NS dnssrv1這一行前面不用寫,系統也知道是聲明@為DNS伺服器,而@不就是yangyang.host.嗎?

第二步,因為你聲明了DNS伺服器,但是還沒有IP,是以

才有了dnssrv1 A 192.168.218.100,IP與伺服器對應。

第三步,websrv1解析了位址6.6.6.6,但是我們都習慣www,是以把www聲明為websrv1的别名,

是以這就都出來了.

在SOA中,以下需要注意:

0 ; serial 是判斷主DNS資料庫變化的标準

修改資料庫後需要手動加一

1D ; refresh

從伺服器一天拉取一次資料庫

1H ; retry

如果拉取失敗,一小時以後再次嘗試

1W ; expire

資料庫資訊存活時間為一周

一周以後失效

3H ) ; minimum

3小時之内不需要查詢上次沒查到的記錄

5.systemctl start named

啟動服務

之前啟動過的也可以使用

rndc reload

重新加載配置檔案

6.測試

使用dig

這裡使用dig需要下載下傳bind-utils軟體包,

yum install -y bind-utils

裡面也還有nslookup和host等其他測試指令

dig www.yangyang.host @DNS伺服器IP

NF記錄

  • name: 目前區域的名字
  • value: 目前區域的某DNS伺服器的名字,例如

    ns.yangyang.host.

  • 注意:一個區域可以有多個NS記錄

    例如:

    • yangyang.host. IN NS
    • yangyang.host. IN NS
  • 注意:

    ns1.yangyang.host. ns2.yangyang.host.

    • 相鄰的兩個資源記錄的name相同時,後續的可省略
    • 對NS記錄而言,任何一個ns記錄後面的伺服器名字 ,都應該在後續有一個A記錄

MX記錄

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

A記錄

  • name: 某主機的FQDN,例如www.yangyang.host.
  • value: 主機名對應主機的IP位址
  • 例如:
www.yangyang.host.	IN	A	 1.1.1.1
www.yangyang.host. 	IN 	A    2.2.2.2
mx1.yangyang.host. 	IN 	A    3.3.3.3
mx2.yangyang.host. 	IN 	A    4.4.4.4
$GENERATE 1-254 HOST$ 	A    1.2.3.$
*.yangyang.host. 	IN 	A    5.5.5.5
yangyang.host. 		IN 	A    6.6.6.6
           

注意:

這裡

$GENERATE 1-254 HOST$ A 1.2.3.$

$GENERATE用來實作一一對應

類似:server1 - 1.2.3.1 server100 - 1.2.3.100

避免使用者寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定位址 比如上面的*.yangyang.host.

其他記錄

  • AAAA:
    • 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.yangyang.host.

      如1.2.3為網絡位址,可簡寫成:

      4 IN PTR www.yangyang.host.

    • 注意:網絡位址及字尾可省略;主機位址依然需要反着寫
  • CNAME:
    • name: 别名的FQDN
    • value: 真正名字的FQDN
    • 例如:

      www.yangyang.host. IN CNAME websrv.yangyang.host.

二.反向解析192.168.218.101

有了前面的基礎,後面就好了解,我這裡隻叙述重要的關鍵點。

反向解析的zone檔案需要把IP倒過來寫

zone "218.168.192.in-addr.arpa"{
        type master;
        file "192.168.218.zone";
};
           

區域資料庫檔案

模版為/var/named/named.loopback

$TTL 1D
@	IN SOA	master admin.yangyang.host. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
		NS	master
master	A	127.0.0.1
100     PTR master.yangyang.host.
101		PTR	www.yangyang.host.
           

其中的@代表:

218.168.192.in-addr.arpa. IP域

也可以這樣寫

直接解析master或者把master解析到回環IP,再由回環IP傳回對應IP是同樣的道理,都可以

$TTL 1D
@       IN SOA  master admin.yangyang.host. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      master
master  A       192.168.218.100
100		PTR		master.yangyang.host.
101     PTR     www.yangyang.host.
2       PTR     @
           

最後的可以解析192.168.218.2來檢視@代表的意思

dig -x IP @DNS主機IP 實作反向解析

或者

dig -t ptr 101.218.168.192.in-addr.arpa. @伺服器IP 也可以

dig -t axfr 抓取DNS資料庫 域名 @DNS伺服器IP

三.主從DNS伺服器

1.主伺服器的配置同上,隻不過需要再多加一句話:

vim /etc/named.conf

allow-transfer { 從伺服器的IP;};

這句話的作用是不允許随便的伺服器當DNS的從伺服器,因為從伺服器可以拉取主伺服器的解析庫,不安全

2.從伺服器的配置

zone "yangyang.host" {
        type slave;	//聲明這是從伺服器
        masters {主伺服器IP;};
        file "slaves/magedu.com.zone"; //需要聲明相對路徑,slaves/在 /var/named/目錄下
};
           

3.從伺服器的配置同上 ,隻不過需要在配置檔案中多加一句

vim /etc/named.conf

allow-transfer { none;}; 這是聲明自己是最後的從伺服器了,在:主->從->從->從 結構體系中處于最下端,保護解析資料庫安全,放在有人抓取從資料庫。

四.遠端更新資料庫

之前提到allow-update { none; };語句的作用,這裡來談

它是用于遠端更新資料庫的

指定的zone語句塊中:

allow-update {any;}; //為了安全這裡需要指定IP,這裡是實驗,是以是any,意思是任何人都可以遠端修改資料庫。

  • 修改 /var/named權限,使它可寫

    chmod 770 /var/named

  • 如果開了SE Linux設定這一項:

    setsebool -P named_write_master_zones on

  • nsupdate 這個指令來進行互動寫入

    • >server DNS伺服器IP

    • >zone 修改的zone域 例如:zone yangyang.host

    • >update add ftp. yangyang.host 88888 IN A 8.8.8.8

    • >send

    • >update delete www. yangyang.host A 删除記錄

    • >send

  • 測試:dig ftp. yangyang.host @伺服器IP

    ll /var/named/ yangyang.host.zone.jnl

    cat /var/named/ yangyang.host.zone

五.DNS委派

子域實作普通DNS一樣,隻不過父域需要在解析資料庫聲明子域DNS和它的IP,這樣就實作了DNS委派

子域授權:每個域的名稱伺服器,都是通過其上級名稱伺服器在解析庫進行授權

類似根域授權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
           

舉個例子:

$TTL 86400
.		IN SOA	dns1 admin (
				4          ; serial
				86400      ; refresh
				3600       ; retry
				604800     ; expire
				10800      ; minimum
				)
				NS	dns1
host			NS	dns2
dns1			A	192.168.218.100
dns2			A	192.168.218.102
           

其中,父域"."DNS為dns1,子域"host"為dns2

不過有一點需要注意:

修改配置檔案

vim /etc/named.conf

設定

dnssec-enable no;

dnssec-validation no;

六.DNS轉發

DNS轉發分為兩種:

1.全局轉發:

對非本機所負責解析區域的請求,全轉發給指定的伺服器

修改配置檔案

vim /etc/named.conf

在Options括号裡添加兩句話

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

例如:

forward first;

forwarders {192.168.27.103;}; //這裡聲明轉發到哪個DNS伺服器,例如:192.168.27.103**

2.特定區域轉發

僅轉發對特定的區域的請求,比全局轉發優先級高

修改配置檔案

vim /etc/named.rfc1912.zones

在zone區域括号裡添加兩句話

zone "yangyang.host" {
        type forward;
        forward first;
        forwarders {192.168.218.103;};
};
           

這裡說明一下first 與only的差別:

forward first|only

  • first 先轉發到forwarders設定的DNS伺服器,如果實在找不到這台伺服器,比如它down機了,就轉發到網際網路上去找根DNS
  • only 轉發到forwarders設定的DNS伺服器,如果找不到這台伺服器,那就到此為止了,不再去尋找根伺服器**
  • recursion 設為 no 是取消遞歸,不再轉發網際網路去查找DNS

注意:關閉dnssec功能:

dnssec-enable no;

dnssec-validation no;

七.智能DNS

BIND 通過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”;
};
           

其中testacl是一種提前定義

是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的前面,而且限制範圍小的要比限制範圍大的排在前。

舉個例子:

acl beijingnet {192.168.218.0/24; };

acl shanghainet {172.18.0.0/16;10.0.0.0/8;};

acl othernet {any;};

具體實作:

vim /etc/named.conf

acl beijingnet {192.168.27.0/24; }; 
acl shanghainet {172.18.0.0/16;10.0.0.0/8;};
acl othernet {any;};

view beijingview {
        match-clients  {beijingnet;};
        zone "yangyang.host" {
                type master;
                file "yangyang.host.zone1";
        };
        include "/etc/named.rfc1912.zones";
};
view shanghaiview{
        match-clients  {shanghainet;};
        zone "yangyang.host" {
                type master;
                file "yangyang.host.zone2";
        };
include "/etc/named.rfc1912.zones";
};
view otherview {
        match-clients  {othernet;};
        zone "yangyang.host" {
                type master;
                file "yangyang.host.zone1";
        };
include "/etc/named.rfc1912.zones";
};
include "/etc/named.root.key";
           

然後再在具體的yangyang.host.zone1檔案裡來定義具體的解析資料庫。

八.源碼編譯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
  • 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
           
  • 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

  • 壓力測試

    • vim test.txt

    www.yangyang.host A

    yangyang.host NS

    yangyang.host MX

    pop3.yangyang.host A

    web.yangyang.host A

    • queryperf -d test.txt -s 127.0.0.1  打開日志功能

    • rndc querylog

    • rndc status

    • queryperf -d test.txt -s 127.0.0.1 • wc -l /var/log/message

十.DNS排錯

#dig A example.com 傳回以下結果

• ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A

example.com

• ;; global options: +cmd

• ;; Got answer:

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

• …

• SERVFAIL:The nameserver encountered a problem while

processing the query.

• 可使用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記錄,可能産生回環 test.example.com. IN CNAME lab.example.com. lab.example.com. IN CNAME test.example.com.

• 正确配置PTR記錄,許多服務依賴PTR,如sshd,MTA

• 正确配置輪詢round-robin記錄