概述
互聯網訪問絕大多數都是基于域名的訪問,互聯網訪問的基礎是基于IP來實現的,因此,需要有一種將域名解析成IP的機制,讓用戶在利用域名訪問時,自動將域名轉換成為對應的IP,這就是DNS的功能,本章將介紹一些DNS相關的內容,具體分為:
1、DNS的基礎概念
2、配置DNS作為緩存DNS服務器
3、DNS的正向解析區域
4、DNS的反向解析區域
5、主從DNS實現
6、子域授權
7、區域轉發
8、DNS安全相關的配置(ACL及安全配置項)
9、智能DNS(DNS的view)
第一章 DNS的基礎概念
1、DNS:Domain Name Service,基于C/S模式的域名解析服務,應用層協議
監聽在53/udp,53/tcp端口
TCP用來區域傳送
UDP用來解析
2、域名分類
根域 .
TLD(top level domain頂級域):
組織域:.com、.net、.org、.gov、.mil
國家域:.iq、.tw、.hk、.jp、.cn……
二級域:就是在頂級域上個人或組織申請的名稱
所謂注冊域名實際是在某個頂級域內注冊的某個二級域
如:nwc.com.
然后在申請到的域內的建自己的各個子域名
www.nwc.com.
test.nwc.com.
ftp.nwc.com.
….
3、DNS的查找過程:
遞歸查詢:
客戶端向自己所指定的DNS服務器請求的過程,是遞歸的,也就是說客戶端向服務器請求時,服務器返回的必須是一個明確的結果,要么找到,要么找不到
迭代查詢:
是指當客戶端請求到達直接指定的DNS服務器后,如果該服務器上沒有緩存相關的條目,則需要向根域請求,根域返回給DNS服務器一個頂級域的地址,然后DNS服務器又根據返回的頂級域地址去找,頂級域又返回一個二級域的地址,而后,DNS服務器又向二級域去請求,追蹤返回出一個明確的解析結果給DNS服務器,這個DNS一級一級去查找的過程就是迭代查詢
4、DNS的名稱解析方式:
名稱 –> IP 正向解析
正向解析時,給的地址是,如:www.nwc.com.
IP –> 名稱 反向解析
反向解析時,給的地址是,如:4.3.2.1.in-addr.arpa.
解析的實際地址是1.2.3.4
注意:正向解析和反向解析的名稱空間,不是同一個空間,也就是不是同一顆樹形結構;因此也不是同一個解析庫
5、DNS服務器的類型:
負責解析至少一個域的服務器
主名稱服務器:新增的解析條目只能通過主服務器
輔助名稱服務器:可以接受解析請求并響應,但新增的解析條目只能在主服務器上新增。主服務器故障后,從服務器也不向外提供解析服務了
不負責域解析的服務器:緩存名稱服務器
6、DNS解析的答案類型:
肯定答案:有解析出來的結果
否定答案:不存在查詢的鍵,因此,不存在與其查詢的鍵對應的值
對于肯定答案和否定答案都可以進行緩存,也都可以指定緩存時長
權威答案:由直接負責的DNS服務器給出的答案,也就是給出的結果是自己負責解析域時,給出的答案
非權威答案:給出的答案是緩存中的緩存下來的條目,此時因為緩存還在有效期,而后端真實的結果可能已經改變,但是由于有緩存,則依然用緩存響應請求,此時返回的就是非權威答案
7、DNS一次完整的查詢請求所經過的流程:
Client一旦希望以主機名與對方主機通信,此時就需要名稱解析,其會先查本地的hosts文件
如果host文件中沒有對應的名稱和地址的對應關系,則客戶端會查DNS服務的本地緩存
如果本地DNS服務的緩存沒有命中,則客戶端會向客戶端所指向的DNS服務器(可能是緩存DNS服務器,也可能是負責具體解析的某DNS主名稱服務器)發送查詢請求,此時的請求是遞歸請求(recursion請求)
DNS服務器收到請求后,
如果客戶端請求的就是自己負責的域,則直接查詢數據庫,并返回答案
如果客戶端請求的不是自己負責解析的域,則先找服務器自己的緩存,如果緩存沒命中,則基于迭代的方式先找根域,然后再找頂級域,然后找二級域,一步一步完成查詢請求,并最終返回答案給客戶端
8、主-輔DNS服務器:
主DNS服務器:維護所負責解析的域的數據庫的那臺服務器;讀寫操作均可進行
從DNS服務器:從主DNS服務器那里,或其他的從DNS服務器那里同步或復制一份解析庫,但是只能進行讀操作
復制或同步操作的實施方式:
序列號:serial
也就是解析數據庫的版本號,一旦主服務器的數據庫內容發生改變時,其版本號遞增。從服務器會每隔一段時間,就向主服務器請求其版本號,如果發現版本號與其不匹配,則執行同步
刷新時間間隔:refresh
從服務器每隔多久到主服務器或其他從服務器上檢查序列號,用于判斷更新的狀況
重試時間間隔:retry
當從服務器嘗試與主服務器進行通信,獲取其序列號時,發現無法聯系上主服務器,則進行重試,兩次重試之間的時間間隔
故重試時間間隔應該小于刷新時間間隔,而且要遠小于刷新時間間隔
過期時長:expire
從服務器始終聯系不上主服務器時,多久之后,放棄從主服務器同步數據;從服務器也就停止提供服務
否定答案的緩存時長:
當結果是明確的無法解析到時,此類否定答案緩存多長時間
主服務器"通知"從服務器隨時更新數據
9、區域(zone)和域(domain):區域是物理概念,域是邏輯概念
比如:nwc.com.這個域
FQDN–>IP:
正向解析庫和正向解析的功能,就是一個正向解析區域
IP–>FQDN:
反向解析庫和反向解析的功能,就是一個反向解析區域
一般而言,一個域分為正向解析區域和反向解析區域,但是單純的域卻不一定比區域大,因為父域的區域,可能就比子域的域要大
10、區域傳送:
全量傳送:axfr,傳送整個數據庫;一般在從服務器第一次向主服務器同步數據時
增量傳送:lxfr,進傳送變化的數據
11、區域數據庫文件:主要由資源記錄(RR,resource record)組成
常見資源記錄類型:A、AAAA、PTR、SOA、NS、CNAME、MX
SOA:start of authority,起始授權記錄,一個區域解析庫有且只能有一個SOA記錄,且必須放在所有資源記錄的第一條
NS:name service,域名服務記錄,一個區域解析庫可以有多個NS記錄,一個NS記錄表示一臺DNS服務器,其中一個為主的,其余的為輔的
A:address,地址記錄,也就是從FQDN–>IPv4
AAAA:address,地址記錄,從FQDN–>IPv6
CNAME:別名記錄
PTR:pointer,主要用于實現IP–>FQDN
MX:mail exchanger,郵件交換器,用于標明域內郵件服務器的地址的記錄,MX記錄可以有多個,其MX記錄有優先級的概念
優先級 0-99,數字越小,優先級越高
12、資源記錄的定義格式:
語法:NAME [TTL] IN RR_TYPE VALUE
SOA記錄:
NAME:當前區域的名字,例如:nwc.com. 或者如果是反向區域,則 1.168.192.in-addr.arpa.
VALUE:有多部分組成
<1>當前區域的區域名稱(也可以使用主DNS服務器名稱);
<2>當前區域的管理員的郵箱地址,但地址中不能使用@符號,一般用點號.來替代;
<3>主從服務的協調屬性的定義以及否定答案的緩存時長,整個內容要用()括號括起來,每行內容之后可以用;分號表示后面的都是注釋信息
完整的SOA記錄定義示例:
nwc.com. 86400 IN SOA nwc.com. admin.nwc.com (
2016091801 //代表序列號,不能超過10位
2H //代表從服務器向主服務器同步數據的刷新時間間隔,此處表示2小時
10M //表示聯系不上主服務器時,從服務器再次聯系主服務器時的間隔時間,10分鐘
1W //表示過期時間,也就是服務器始終聯系不上主服務器時的最長等待時間,也就是此時間一過,就判定主服務器故障,然后從服務器也停止服務,1周
1D //表示否定答案的緩存時長,1天
)
NS記錄:可有多個NS記錄,一個NS記錄對應一個DNS服務器,每個NS記錄應該有一個對應的A記錄
NAME:當前區域的區域名稱
VALUE:當前區域的某DNS服務器的名字,例如ns1.nwc.com
例如:
nwc.com. 86400 IN NS ns1.nwc.com.
nwc.com. 86400 IN NS ns2.nwc.com.
MX記錄:MX記錄可以有多個,一個MX記錄對應一個郵件服務器,每個記錄的VALUE之前應該有一個數字,用于表示其優先級,數字越小,優先級越高。每個MX記錄應該有一個對應的A記錄
NAME:當前區域的區域名稱
VALUE:當前區域某郵件服務器的主機名
例如:
nwc.com. IN MX 5 mail1.nwc.com.
nwc.com. IN MX 20 mail2.nwc.com.
A記錄:FQDN–>IPv4
NAME:某FQDN,如:web.nwc.com.
VALUE:某IPv4地址
例如:
web.nwc.com. IN A 1.1.1.1
web.nwc.com. IN A 1.1.1.2
bbs.nwc.com. IN A 1.1.1.2
一個主機名額可以有多個IP,一個IP也可以有多個主機名
*.nwc.com. IN A 10.1.32.1
表示將前面沒有單獨定義的都解析到10.1.32.1
nwc.com. IN A 10.1.32.1
表示當用戶訪問域名前不帶任何字符時,也即是直接訪問nwc.com.時解析到的地址是10.1.32.1
$GENERATE 1-254 server$ IN A 1.1.1.$
表示將server1.nwc.com. 解析的地址為1.1.1.1
server2.nwc.com. 解析的地址為1.1.1.2
server3.nwc.com. 解析為1.1.1.3
….
server254.nwc.com. 解析為1.1.1.254
同理:
$GENERATE 5-20 test$ IN A 1.1.1.2$
表示將test5.nwc.com. 解析的地址為1.1.1.25
test6.nwc.com. 解析的地址為1.1.1.26
test7.nwc.com. 解析為1.1.1.27
….
test20.nwc.com. 解析為1.1.1.220
AAAA記錄FQDN–>IPv6地址,定義方式與A記錄類似
PTR記錄:反向解析記錄
NAME:IP地址,有特定格式,IP反過來寫,而且要加特定后綴,如:192.168.1.2的記錄應該寫成2.1.168.192.in-addr.arpa。
VALUE:為FQDN
例如:
2.1.168.192.in-addr.arpa. IN PTR bbs.nwc.com.
CNAME記錄:別名記錄
NAME:FQDN格式的別名;
VALUE:FQDN格式的正式名稱
例如:
web.nwc.com. IN CNAME www.nwc.com.
表示web.nwc.com.是www.nwc.com.的別名
注意:
<1>TTL值可以從全局繼承,不用每個記錄都單獨定義
<2>@可以用來表示當前的區域的名字
<3>相鄰的兩條記錄,其NAME相同時,后面那條記錄的NAME可以省略
<4>任何MX、NS等類型的記錄的value為一個FQDN,此FQDN應該有一個A記錄
13、測試DNS的工具:dig、host、nslookup
dig工具:用于測試DNS系統,因此其不會查詢hosts文件
dig -t RR_TYPE NAME @SERVER [QUERY_OPTIONS]
表示測試哪種資源記錄類型,NAME表示需要測試的地址或反向測試時的IP,@SERVER表示通過那個DNS服務器進行解析
常見查詢選項:
+[no]trace 跟蹤或不跟蹤解析過程
+[no]recurse 進行遞歸解析
如果不寫@SERVER,則表示通過本機測試
如:
dig -t A www.baidu.com
dig -t A www.nwc.com @10.1.32.11
反向解析:dig -x IP
如:dig -x 119.75.222.17
有正向解析不一定有反向解析的記錄
dig命令模擬完全區域傳送:
dig -t axfr DOMAIN [@SERVER]
host工具:
host -t A www.baidu.com
表示解析www.baidu.com這個域名的A記錄,也就是其對應的IP
host -t NS baidu.com
表示解析baidu.com的NS記錄,也就是看baidu.com這個域內,有哪些DNS服務器
host -t MX baidu.com
表示解析baidu.com的MX記錄,也就是看baidu.com這個域內,有哪些郵件服務器
host -t PTR 119.75.222.17
表示解析 119.75.222.17這個IP對應的域名是什么
注意,以上使用方式中,可以在命令后面加上SERVER_IP表示利用指定的DNS服務器進行測試,而不是使用本機測試
nslookup工具:
nslookup [-OPTIONS] [NAME] [SERVER]
有兩種工作模式,一種是交互式模式,一種是命令行模式,命令行模式與上述的工具類似,交互式則直接在命令行中輸入nslookup然后回車即可
交互式模式下的命令:
server IP 表示以指定的IP作為DNS服務器進行查詢
set q=RR_TYPE 表示要查詢的資源記錄類型
NAME 表示查詢的名稱(各種資源記錄類型對應的NAME是不一樣的)
14、rndc的使用
rndc是DNS遠程管理的工具,默認只監聽在本地的127.0.0.1的953端口,只能在本機使用,如果要遠程主機上管理,需要在/etc/named.conf配置文件中修改相關的配置選項,不過為了安全考慮,不建議用rndc命令在遠程主機上管理,在本地管理即可
rndc status 可顯示DNS服務器的狀態信息
rndc stats 可顯示DNS的統計數據
rndc stop 可停止DNS服務
rndc flush 表示清空DNS服務器的DNS緩存條目
rndc reload 表示重新裝載DNS服務的配置文件和區域數據庫文件
第二章 配置DNS作為緩存DNS服務器
1、BIND的安裝包:
BIND是dns協議的一種實現
BIND的程序運行時的進程名為named
2、BIND的程序包:bind
bind 提供DNS服務器端程序,和解析庫文件,以及幾個常用的測試程序
bind-libs 被bind的主程序和bind-utils包中的程序共同用到的庫文件
bind-utils bind客戶端程序集,提供了如dig、host、nslookup等工具
bind-chroot 可選裝的程序包,讓bind程序能運行在一個子shell中,萬一bind程序被劫持,不會影響外面的shell的程序
3、bind安裝完成后,生成了許多文件,其中:
/etc/named.conf 是其主配置文件,其內部用include指令包含進來了很多其他的文件,如
/etc/named.rfc1912.zones 區域定義文件
/etc/named.iscdlv.key
/etc/named.root.key
/var/named/ 是區域解析庫文件的存放位置,也就是named的工作目錄,該目錄下文件名一般為ZONE_NAME.zone
/usr/sbin/rndc 是DNS的遠程控制工具程序,其工作在tcp/953端口,默認只監聽在127.0.0.1的地址,因此僅允許本地使用
注意:
<1>1臺DNS服務器可同時為多個區域提供解析
<2>在/etc/named/目錄下,必須要有根域的解析庫文件,在centos上一般為name.ca
<3>在/etc/named/目錄下,還應該有兩個區域解析庫文件:localhost和127.0.0.1的正向和反向解析的解析庫文件,正向為named.localhost、反向為named.loopback文件
bind程序安裝完成后,默認即可作為緩存名稱服務器使用,可以讓其他客戶端將DNS指向該主機,作為其DNS服務器,當該DNS服務器中沒有相應的緩存,或不是自己負責解析的區域后,也能夠向根域發起迭代的查詢請求,從而能夠返回給客戶端答案
如果安裝完成bind后,如果沒有專門負責解析的區域,將配置文件中的監聽地址由120.0.0.1改為可與外部通信的地址,關閉dnssec功能,然后直接啟動服務即可
4、主配置文件格式:
全局配置段:
options {
…
}
日志配置段:
logging {
…
}
區域配置段:定義由本機負責解析的區域,或轉發的區域
zone {
…
}
可單獨定義在/etc/named.rfc1912.zones文件中
注意:
每個配置語句必須以分號;結尾,否則為語法錯誤
注釋的風格為C語言風格,//表示注釋單行,/* */表示注釋多行
5、修改相關配置
修改全局配置段中的監聽地址為可與外部通信的地址:
listen-on port 53;表示監聽本機所有地址的53端口
listen-on port 53 { 10.1.32.11; }; 表示監聽本機10.1.32.11這個IP的53端口,多個IP用分號間隔,{}兩段有空格
學習時,建議關閉dnssec功能:
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
關閉僅允許本地查詢:
注釋掉該行,// allow-query { localhost; };
6、檢查配置文件語法錯誤
named-checkconf /etc/name.conf
7、啟動服務
centos6 : service named start
centos7 : systemctl start named.service
第三章 DNS的正向解析區域
1、定義區域
在主配置文件中或主配置文件的輔助配置文件中實現;
在配置文件中,利用:
zone "ZONE_NAME" IN { 定義區域名稱,就是域名
type master|slave|hint|forward;
指明區域的類型是主|從|根|轉發
file "ZONE_NAME.zone";
指明區域數據文件,如果不指名文件的目錄,則默認會到/var/named/目錄下去找
};
注意:區域名字即為域名
一般不在主配置文件中編輯,而是到其include進來的專門定義區域文件/etc/named.rfc1912.zones中定義
vim /etc/named.rfc1912.zones
zone "nwc.com." IN {
type master;
file "nwc.com.zone";
};
區域名最后那個.可以不用加
2、建立區域數據文件(主要記錄為A記錄或AAAA記錄)
在區域數據庫存放的位置/var/named/目錄下建立區域數據文件
一般數據文件其權限為640,屬主為root,屬組為named
如:vim /etc/named/nwc.com.zone
$TTL 3600
$ORIGIN nwc.com. 表示當域名沒寫完整時,自動補上的部分的內容
@ IN SOA nwc.com. dnsadmin.nwc.com (
2016091801
1H
10M
3D
1D
)
//SOA記錄中的NAME可以寫成域名,也可以寫成該區域內的主DNS服務器的主機名,如此處的"nwc.com."可以用"ns1.nwc.com.替代"
IN NS ns1
//前面沒寫@,是因為兩個相鄰的記錄NAME一樣,則后面不用寫,后面寫ns1是因為利用$ORIGIN定義了之后,會自動補上nwc.com.
IN MX 10 mail1
//表示定義了一個mail1.nwc.com.的郵件服務器,其優先級為10
IN MX 20 mail2
//又定義了一個mail2.nwc.com.的郵件服務器,其優先級為20
ns1 IN A 10.1.32.11
//ns1.nwc.com.的IP地址為10.1.32.11
mail1 IN A 10.1.32.33
//mail1.nwc.com.的IP地址為10.1.32.1
mail2 IN A 10.1.32.55
//mail2.nwc.com.的IP地址為10.1.32.55
www IN A 10.1.32.1
//www.nwc.com.的IP地址為10.1.32.1
www IN A 10.1.32.2
//www.nwc.com.的IP地址為10.1.32.2
web IN CNAME www
//web.nwc.com.是www.nwc.com.的別名
bbs IN A 10.1.32.1
//bbs.nwc.com.的IP為10.1.32.1
修改區域數據文件的屬主為root,屬組為named,并修改其權限為640
3、檢查配置文件語法和區域數據文件語法
named-checkconf /etc/named.conf
named-checkzone nwc.com. /var/named/nwc.com.zone
指明區域名稱,和區域數據文件的位置
4、讓服務器重載配置文件和區域數據文件即可
用rndc reload命令即可實現
如果是centos7,也可以用:
systemctl reload named.service
5、用rndc status查看DNS服務器的狀態,然后利用相關DNS測試工具進行測試dig、host、nslookup
第四章 DNS的反向解析區域
1、定義區域
在主配置文件中或主配置文件的輔助配置文件中實現;
在配置文件中,利用:
zone "ZONE_NAME" IN { 定義區域名稱,就是域名
type master|slave|hint|forward;
指明區域的類型是主|從|根|轉發
file "ZONE_NAME.zone";
指明區域數據文件,如果不指名文件的目錄,則默認會到/var/named/目錄下去找
};
注意:反向區域的名字的格式為:
網段地址反寫.in-addr.arpa.
如本例為:32.1.10.arpa.
一般不在主配置文件中編輯,而是到其include進來的專門定義區域文件/etc/named.rfc1912.zones中定義
vim /etc/named.rfc1912.zones
zone "32.1.10.arpa." IN {
type master;
file "32.1.10.zone";
};
區域名最后那個.可以不用加
2、定義區域解析庫文件:(反向解析庫的主要記錄為PTR記錄)
在區域數據庫存放的位置/var/named/目錄下建立區域數據文件
一般數據文件其權限為640,屬主為root,屬組為named
vim /var/named/32.1.10.zone
$TTL 3600
$ORIGIN 32.1.10.in-addr.arpa.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com (
2016091801
1H
10M
3D
12H
)
IN NS ns1.nwc.com.
//域內的NS記錄,表示DNS服務器為ns1.nwc.com.
11 IN PTR ns1.nwc.com.
//ns1.nwc.com.的IP為10.1.32.11
1 IN PTR www.nwc.com.
2 IN PTR www.nwc.com.
1 IN PTR bbs.nwc.com.
注意:
反顯區域數據文件中補充的是32.1.10.in-addr.arpa.,故其中的域名就不能與正向解析數據文件中寫成www,bbs之類的,因為自動補充的不是域名,是網絡地址反寫的區域名
反向區域文件中不需要MX記錄的反向解析,也就是不需要對郵箱服務器進行反向解析
不需要為正向解析區域的別名記錄定義反向解析
反向解析也可以有別名記錄,只是別名記錄的意義是ip到ip,相當于兩個IP地址之間的別名
修改該反向解析區域文件的屬主為root,屬組為named,權限為640
3、檢查配置文件語法和區域數據文件語法
named-checkconf /etc/named.conf
named-checkzone 32.1.10.in-addr.arpa /var/named/32.1.10.zone
指明區域名稱,和區域數據文件的位置
4、讓服務器重載配置文件和區域數據文件即可
用rndc reload命令即可實現
如果是centos7,也可以用:
systemctl reload named.service
5、用rndc status查看DNS服務器的狀態,然后利用相關DNS測試工具進行測試dig、host、nslookup
第五章 主從DNS
1、從服務器是區域級別的概念;
如,上述實驗中,我們將ns1.nwc.com這臺服務器,配置成了nwc.com.這個正向區域解析的主DNS服務器,同時也配置成了32.1.10.in-addr.arpa這個反向解析區域的主DNS服務器,但是我們可以在另外一臺服務器上,假設為ns2.nwc.com這臺服務器上,只配置其作為正向區域nwc.com.的從DNS服務器,或者只配置其作為反向區域32.1.10.in-addr.arpa的從DNS服務器,這樣相當于ns2.nwc.com服務器只作為正向的從服務器,或者反向的從服務器
當然,我們也可以將ns2.nwc.com這臺服務器即作為正向區域nwc.com.的從DNS服務器,也作為反向區域32.1.10.in-addr.arpa的從DNS服務器
也可以將ns1.nwc.com這臺服務器做為正向區域的主DNS服務器,但是作為反向區域的從DNS服務器,而ns2.nwc.com這臺服務器作為反向區域的主DNS服務器,正向區域的從DNS服務器
注意:在主從同步時,區域數據文件的復制可以級聯復制
也就是說可以ns1.nwc.com這個服務器作為主服務器,ns2到ns1這臺服務器上進行復制區域數據文件,作為ns1的從服務器,而ns3可以在ns2上同步數據文件,ns3作為ns2的從服務器,這樣一級一級的級聯
2、環境及準備工作
環境:
利用上述實驗中的ns1.nwc.com作為主DNS服務器,其地址為10.1.32.11,添加一臺ns2.nwc.com作為其從DNS服務器,其地址為10.1.32.22
準備工作:
在ns2上安裝bind,然后修改其監聽的地址為10.1.32.22
關掉dnssec的相關功能
關閉僅允許本地查詢:注釋掉該行,// allow-query { localhost; };
3、在從服務器上定義一個區域,其區域類型為slave
在/etc/named.rfc1912.zones中定義:
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters {MASTER_IP;}
};
區域數據文件不用手動建立,因為從服務器會自動的從主服務器去同步數據文件
注意:此處file 指定區域文件的路徑要放在/var/named/目錄下的slaves目錄下的原因是:因為named進程是以named這個用戶的身份運行,而named用戶針對/var/named/這個目錄的權限為r-x,也就是沒有寫權限,因此當從服務器從主服務器那邊同步過來的數據文件,要寫入該目錄時,是無法完成的。但是在/var/named/這個目錄下,專門建了一個目錄為slaves,而named用戶對這個目錄是有寫權限的,故區域數據文件放在該目錄下,則可以完成同步的操作
例如:
vim /etc/named.rfc1912.zones
zone "nwc.com." IN {
type slave ;
file "slaves/nwc.com.slave.zone" ;
masters { 10.1.32.11 ; };
};
4、在從服務器上,檢測配置文件語法檢查:named-checkconfig
5、在從服務器上,啟動服務service named start或重載配置
用rndc reload命令即可實現
如果是centos7,也可以用:
systemctl reload named.service
6、在主服務器上,確保區域數據文件中為每一個從服務器配置了NS記錄,且有對應的A記錄
如,在本例中,我們需要在主服務器的區域數據文件/etc/named/nwc.com.zone中加上一個NS記錄和對應的A記錄:
@ IN NS ns2.nwc.com.
ns2.nwc.com. IN A 10.1.32.22
注意:在配置了主從的結構中,從服務器已經啟動,當我們手動修改了主服務器的區域配置文件后,要將其序列號人為的加1,否則從服務器無法通過判斷主服務器的序列號來進行同步
7、如何讓一部分客戶端用主DNS服務器解析請求,一部分客戶端利用從DNS服務器解析請求
在不同的客戶端上匹配不同的DNS服務器,一部分執行主DNS服務器地址,一部分指向從DNS服務器
8、如果想讓ns2作為ns1上的反向解析區域的從服務器,步驟根上述類似,現在從服務器上定義一個區域,指明區域類型為slave,指明區域文件路徑,指明master為哪個服務器
然后在主服務器上的反向區域的區域數據文件中增加一個NS記錄,指向到ns2上,添加對應的PTR記錄
<1>在從服務器上,添加區域:
vim /etc/named.rfc1912.zones
zone "32.1.10.in-addr.arpa" IN {
type slave ;
file "slaves/32.1.10.zone"
masters { 10.1.32.11 ; };
};
<2>在主服務器上的反向解析的區域數據文件中增加NS記錄和PTR記錄
vim /var/named/32.1.10.zone
增加:
@ IN NS ns2.nwc.com.
22 IN PTR ns2.nwc.com.
注意修改其序列號+1
檢查主服務器配置文件,區域配置文件語法:
named-checkconf /etc/named.conf
named-checkzone 32.1.10.in-addr.arpa /var/named/32.1.10.zone
指明區域名稱,和區域數據文件的位置
重載配置文件:
rndc reload
<3>檢查從服務器匹配文件語法:named-checkconf
<4>重載從服務器配置文件:rndc reload
<5>在從服務器上利用dig、host、nslookup進行測試
9、如果從服務器的區域數據文件沒有從主服務器上正常同步過來,則可以利用dig -t axfr nwc.com. @10.1.32.11測試區域傳送,表示從主服務器10.1.32.11上完全傳送 nwc.com.這個區域數據文件到本機
10、注意:主從服務器的時間要同步,ntpdate命令
第六章 子域授權
假設,在我們之前的nwc.com.這個域中,我們希望建一個子域,子域的域名為:ops.nwc.com.,該子域自己內部有自己的DNS服務器,而針對nwc.com.這個父域有我們之前建的兩個DNS服務器,也就是上述實驗中建的一主一從DNS服務器
如果在父域的DNS服務器上實現,將對子域的解析,都交給子域自己去實現,而不是直接利用父域上添加相應的資源記錄來實現。
環境:
在之前實驗的基礎上,添加對子域的授權,假設子域為 ops.nwc.com. 子域內的DNS服務器為ns1.ops.nwc.com這臺服務器,服務器地址為10.1.32.111,子域的ns1的從DNS服務器ns2.ops.nwc.com,其地址為:10.1.32.222
1、在父域的主DNS服務器上,編輯其區域數據文件,添加對子域的授權NS記錄和A記錄:
vim /var/named/nwc.com.zone
加入:
ops.nwc.com. IN NS ns1.ops.nwc.com.
ops.nwc.com. IN NS ns2.ops.nwc.com.
ns1.ops.nwc.com. IN A 10.1.32.111
ns2.ops.nwc.com. IN A 10.1.32.222
注意:父域的DNS服務器由于有從服務器,且從服務器已經在工作,故修改完配置文件后,要將其序列號+1
檢查配置文件和區域數據文件的語法:
named-checkconfig
named-checkzone nwc.com. /var/named/nwc.com
重載配置文件:rndc reload
在各個頂級域如.com域內,實際上也是用類似的方法授權子域的
2、在子域的主DNS服務器ns1.ops.nwc.com這臺服務器上配置:
<1>安裝bind程序,修改監聽的地址為10.1.32.111,關閉dnssec功能
關閉僅允許本地查詢:注釋掉該行,// allow-query { localhost; };
<2>添加區域的定義:
vim /etc/named.rfc1912.zones
加上:
zone "ops.nwc.com" IN {
type master ;
file "ops.nwc.com";
};
<3>添加區域數據文件:
vim /var/named/ops.nwc.com.zone
$TTL 3600
$ORIGIN ops.nwc.com.
@ IN SOA ns1.ops.nwc.com. dnsadmin.ops.nwc.com. (
2016091801
1H
10M
1D
2H
)
IN NS ns1
IN NS ns2
IN MX 10 mail1
ns1 IN A 10.1.32.111
ns2 IN A 10.1.32.222
www IN A 10.1.32.100
web IN CNAME www
mail1 IN A 10.1.32.100
mail2 IN A 10.1.32.200
修改區域文件的屬主為root,屬組為named,權限為640
<4>檢查配置文件和區域數據文件語法:
named-checkconfig
named-checkzone ops.nwc.com /var/named/ops.nwc.com.zone
<5>啟動服務,或重載配置文件rndc reload
3、定義子域的從DNS服務器
在子域的從DNS服務器上:
<1>安裝bind程序,修改監聽的地址為10.1.32.111,關閉dnssec功能
關閉僅允許本地查詢:注釋掉該行,// allow-query { localhost; };
<2>添加區域的定義:
vim /etc/named.rfc1912.zones
加上:
zone "ops.nwc.com" IN {
type slave ;
file "slaves/ops.nwc.com"
master { 10.1.32.111 ; };
};
<3>檢查配置文件語法:
named-checkconfig
<4>啟動服務,或重載配置文件rndc reload
第七章 區域轉發
在正常情況下,子域是無法直接找到父域內的解析的,因為當子域內的客戶端向子域內的DNS服務器,請求解析某地址時,如果該地址不是子域DNS服務器自己負責解析的區域,則子域的DNS服務器會去找根域,然后根域告訴其找頂級域,頂級域告訴其找二級域,這樣進行迭代查詢。
但是在本實驗中,子域內的主機如果要找的是父域的DNS負責解析的地址,則按照上述的工作模式還是要先去找根域,然后一級一級找到父域,然后解析,這樣不符合實際需求,此時就需要用到定義轉發的概念了
定義轉發有兩種:
<1>區域轉發:表示僅將某特定區域的解析請求進行轉發
<2>全局轉發:表示只要不是本DNS服務器直接負責解析的區域,都進行轉發。相當于針對本地沒有通過zone定義的區域查詢請求,一律轉發到某目標服務器
注意:被轉發的服務器,必須允許為當前定義轉發的服務器對其做遞歸查詢,默認情況下,是允許給任何人遞歸的
1、如何定義某區域轉發:
要在區域定義文件中/etc/named.rfc1912.zones中定義一個區域:區域類型為forward
zone "ZONE_NAME" IN {
type forward ;
forward first|only ;
forwarders { SERVER_IP ; };
};
區域類型為forward
forward 定義轉發的類型,有first和only兩種
first:首先轉發,表示當本DNS服務器解析不了時,就轉發給目標服務器進行解析,當目標服務器由于不在線或其他原因,不響應時,則當前DNS服務器就自己去找根域,然后一步一步迭代查詢
only:只轉發,表示當本地DNS服務器解析不了時,不管轉發的目標服務器有沒有響應,都轉發,沒響應就一直等著
forwarders 定義轉發給誰,轉發的目標服務器的IP(注意:轉發的目標服務器必須要允許本服務器對其發起遞歸查詢請求,默認都是允許的)
如,在上述實驗中,希望子域在解析請求時,先去找父域(父域的主DNS服務器IP為10.1.32.11,父域的從DNS服務器IP為10.1.32.22),如果父域沒響應時,則子域自己去找根域,然后迭代查詢,則可以如下定義:
在子域的主DNS服務器ns1.ops.nwc.com服務器上進行:
vim /etc/named.rfc1912.zones
加入:
zone "nwc.com" IN {
type forward ;
forward first ;
forwarders { 10.1.32.11 ; 10.1.32.22 ; };
};
在實驗環境中,可以將forward類型為only,因為沒有外網環境,無法找到根域
因為父域有主從兩個DNS服務器,兩個DNS服務器都能解析請求,故此處可以定義轉發的目標服務器為兩個
配置完成后檢查配置文件語法:
named-checkconfig
重載配置文件:rndc reload
2、如何定義全局轉發
假設我們在子域上定義,凡是不是子域DNS服務器直接負責解析的,就都轉到父域的DNS服務器上
如果定義全局轉發,就不需要定義區域的方式進行配置,而是要在主配置文件中的全局配置段options中定義
在子域的ns1.ops.nwc.com這臺服務器上:
vim /etc/named.conf
在options段中加入:
forward only|first ;
//根據需要選擇是first還是only
forwarders { 10.1.32.11; 10.1.32.22; };
//選擇轉發的目標服務器地址
這樣定義之后,表示只要不是自己負責的區域,則都轉交給10.1.32.11或10.1.32.22的DNS服務器(注意:前提是目標服務器要允許本機對其發起DNS的遞歸查詢請求,默認是允許的)
配置完成后檢查配置文件語法:
named-checkconfig
重載配置文件:rndc reload
第八章 DNS安全相關的配置
1、acl :
訪問控制列表,可以把一個或多個地址歸并為一個命名的集合,隨后,通過此名稱即可對此集合內的所有主機實現統一調用;
定義方式:
acl ACL_NAME {
IP ;
NET_ADDR/MASK ;
};
如:
acl mynet {
10.1.32.0/24;
127.0.0.0/8;
};
注意:
定義acl的語句,要放在bind主配置文件/etc/named.conf文件最前面,不能放在某個具體配置段中間
acl只能先定義,后使用
bind有4個內置的acl:
none 表示沒有一個主機
any 表示所有任意的主機
local 表示本機上的所有IP地址
loaclnet 表示本機IP所在的網絡的網絡內的所有主機
2、可以調用acl的訪問控制指令
<1>allow-query { };
表示允許查詢的主機,也就是只允許哪些主機對本機的DNS發起查詢請求,括號內填入acl名稱,如果不指定該指令,則默認允許所有的主機進行查詢
此指令可以加在options中,表示對全局生效,也可以加在某個zone的定義中,表示僅對該區域生效
<2>allow-transfer {};
表示允許向哪些主機做區域傳送,默認為向所有主機;為了加強安全性,應該配置為僅允許向自己服務器的從服務器做區域傳送
此指令可以加在options中,表示對全局生效,也可以加在某個zone的定義中,表示僅對該區域生效
如:
vim /etc/named.conf
加入:
acl slaves {
10.1.32.22;
127.0.0.1;
};
定義一個acl叫slaves,其內部的主機為10.1.32.22
然后在options中加入:
allow-transfer { slaves; };
表示所有的區域數據,僅允許對10.1.32.22這個主機進行區域傳送
如果將allow-transfer定義在某個具體的zone中,則可以實現該區域的數據僅向指定的主機傳送
<3>allow-recursion {};
表示允許哪些主機向當前DNS服務器發起遞歸查詢請求,也就是要求本DNS如果沒有解析的內容,本DNS就要一級一級的向根域,頂級域迭代查詢的
如:實現本DNS服務器允許本地的主機對其發起遞歸查詢請求
配置acl,定義本地網絡:
vim /etc/named.conf
加入:
acl mynet {
10.1.32.0/24;
127.0.0.0/8;
};
在options配置段中加入:
allow-recursion { mynet ; };
注意:配置文件中默認有一項 recursion yes;表示允許所有的遞歸請求,如果要實現只對本地的請求進行遞歸,則需要將該項注釋掉
<4>allow-update {};
表示允許動態更新區域數據庫文件中的內容(也就是區域的具體各個資源記錄的內容);一般情況下,除非使用了DDNS,否則需要定義為allow-update { none; };
第九章 智能DNS(view)
1、bind view bind視圖,也就是智能解析
bind視圖的意義是:假設一個主機www.nwc.com這臺服務器上有兩個IP,一個是內網IP,一個是外網IP,或者一個是聯通服務器的IP,一個是電信服務器的IP;那么,我們可以在DNS服務器上定義,當來自內網用戶的訪問,都解析到內網的IP上,通過外網用戶的訪問,都解析到外網的IP上?;蛘邅碜月撏ǖ挠脩粼L問,都解析到聯通的IP上,來自電信的用戶,都解析到電信的IP上,這樣就可以實現來自對同一個域名的請求,根據需要,可以解析到不同的IP上
定義視圖:
view VIEW_NAME {
ZONE1;
ZONE2;
};
2、示例
假設nwc.com.域內有一個主機為www.nwc.com,其有兩個IP地址,一個面向外網,172.16.32.1,一個面向內網,10.1.32.1
實現將來自10.1.32.0/24這個網絡的主機訪問www.nwc.com時,解析到10.1.32.1上
實現將來自172.16.32.0/24這個完了的主機訪問www.nwc.com時,解析到172.1.32.1上
DNS服務器為ns1.nwc.com,IP為10.1.32.11
<1>在DNS服務器上定義區域(要將區域定義在view中)
vim /etc/named.rfc1912.zones
加入:
view inside {
match-client {
10.1.32.0/24;
};
//表示匹配請求的來源的IP地址,可以是acl定義的地址
zone "nwc.com" IN {
type master;
file "nwc.com.inside.zone"
};
};
view outside {
match-client {
172.16.32.0/24;
};
//表示匹配的來源的IP地址,可以是acl定義的地址
zone "nwc.com" IN {
type master;
file "nwc.com.outside.zone"
};
};
<2>配置區域數據文件,將不同的請求解析到不同的IP上
vim /var/named/nwc.com.inside.zone
$TTL 3600
$ORIGIN nwc.com.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com. (
2016091801
1H
10M
1D
1D
)
IN NS ns1
ns1 IN A 10.1.32.11
www IN A 10.1.32.1
vim /var/named/nwc.com.outside.zone
$TTL 3600
$ORIGIN nwc.com.
@ IN SOA ns1.nwc.com. dnsadmin.nwc.com. (
2016091801
1H
10M
1D
1D
)
IN NS ns1
ns1 IN A 172.16.32.11
www IN A 172.16.32.1
view的實現過程實際就是將區域定義在view內部,然后view匹配不同的請求來源地址,然后指向不同的區域數據文件,各個區域數據文件中解析的內容不一樣來實現
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/49376