BIND軟件:
BIND軟件的主要rpm包:
bind:主程序包,包括:
DNS服務程序(named)
解析庫
檢測工具;
bind-libs:Bind軟件的共享庫程序包;
bind-utils:通用工具包,包括各種服務測試工具,如:dig, host, nslookup等;
bind-chroot:設置僞根,啓用監牢模式;bind-9+版本中出現的安全功能實現;
應用層協議是DNS協議;DNS,Domain Name System;
DNS的應用程序實現:BIND;
BIND程序的服務主程序:named;
53/TCP:完成區域傳送;
53/UDP:完成主機名的解析查詢;
953/TCP:rndc程序的監聽端口;
IETF:dnssec標準;dnssec,DNS安全擴展插件;
Bind軟件的組成:
主配置文件:/etc/named.conf
輔助配置文件:可以在主配置文件中利用include命令包含其他配置文件;
/etc/named.rfc1912.zones:聲明瞭區域;
安全認證密鑰文件:
/etc/named.iscdlv.key
/etc/named.root.key
主程序:/usr/sbin/named
遠程管理程序:/usr/sbin/rndc
配置文件檢測工具:
/usr/sbin/named-checkconf
區域文件檢測工具:
/usr/sbin/named-checkzone
日誌文件:
/var/log/named.log
區域文件的存放目錄:
/var/named
存放輔助區域文件的目錄:
/var/named/slaves
主配置文件:/etc/named.conf
文件格式:
格式特點:分段式配置格式;
1.配置行的註釋方式:
//:單行註釋;
/*...*/:任意內容註釋;
#:單行註釋;
2.主配置文件中的常用配置段:
1) 訪問控制列表配置段:
acl string { address_match_element; ... };
2) 全局選項配置段:
options { statements; ... };
3) 日誌配置段:
logging { statements; ... };
4) 區域配置段:
zone string optional_class { statements; ... };
5) 視圖配置段:
view string optional_class { statements; ... };
6) include命令:
include /PATH/TO/SOME_CONFIG_FILE;
全局配置段:
options {
listen-on port 53 { 127.0.0.1; 172.16.72.2; };
//在啓動DNS服務時,named進程所監聽的套接字;
directory "/var/named";
//定義解析庫(區域數據庫文件)的根目錄;在主配置文件中添加此配置語句之後,可以在後面定義區域數據庫時使用相對路徑;
allow-query { localhost; };
//訪問控制語句,意思是允許本服務器處理哪些主機發送來的解析查詢請求;默認爲localhost,即:只允許本機以127.0.0.1發送查詢請求;
recursion yes;
//允許本服務器爲所有查詢請求做遞歸查詢;
allow-recursion { 172.16.72.1/16; };
訪問控制指令,允許爲哪些客戶端做遞歸查詢;
pid-file "/run/named/named.pid";
//定義存放主進程pid文件的路徑;
};
rndc命令:Remote Name Domain Controller, 遠程名稱域控制器;
953/TCP
常用的子命令:
status:查看服務器端的允許狀態;
reload:通知服務器重載配置文件和區域文件,無需重新啓動服務;
flush:清空服務器端的DNS緩存;
stop:較安全的停止DNS服務;
區域配置段:
zone "FQDN" IN {
//聲明一個區域名稱;此名稱要是有FQDN表示;如:qhdlink.com
type master;
區域的類型:
master:主區域;
slave:輔助區域;
hint:提示區域,僅能在根域上設置;
forward:轉發區域;
file "named.localhost";
存放與該域有關的解析信息的數據庫文件的路徑;如果是相對路徑,則相對於主配置文件的全局配置段中的"directory"指令所定義的目錄而言;
注意:文件的所有權和權限設置必須能夠讓named用戶有讀取權限;
allow-update { none; };
訪問控制指令,允許哪些客戶端對數據庫內容進行動態更新;主要用於DDNS;
allow-transfer { 172.16.72.1; };
訪問控制指令,允許哪些主機能夠從當前服務器進行區域傳送;
allow-query { address_match_element; ... };
訪問控制指令,允許哪些主機進行區域內的解析查詢;
allow-notify { address_match_element; ... };
訪問控制指令,允許哪些主服務器向當前服務器發送區域變更通知;
};
正向查找區域聲明示例:
zone "ytc.com" IN {
type master;
file "ytc.zone";
allow-update { none; };
allow-transfer { none; };
};
創建數據庫文件,修改權限並添加相應資源記錄;
/var/named/ytc.zone
檢測區域文件的語法格式:
named-checkzone FQDN /PATH/TO/ZONE_FILE
例:# named-checkzone ytc.com /var/named/ytc.zone
對主配置文件或區域數據庫文件進行修改之後,並不會立即生效;只有在重載配置文件和區域文件之後,配置才生效;重載配置文件的方法:
1.systemctl reload named.service
2.rndc reload
3.systemctl restart named.service(不推薦)
4.service named reload(CentOS 6-)
注意:對於應用程序服務進程重載配置文件的操作,如果能使用reload,就使用reload,不要輕易執行restart命令;
客戶端測試工具:dig, host, nslookup
dig命令:
dig - DNS lookup utility
格式:
dig [@server] [-t type] [-x addr] [queryopt...]
@server:表示此次查詢請求使用指定的DNS服務器,而不使用/etc/resolve.conf文件中定義的nameserver;
-t RR_type:指定此次查詢的資源記錄的類型;
-x addr:進行反向解析查詢時,用於指定IP地址;
queryopt:查詢選項:
+[no]recurse:要求目標服務器必須[不]以遞歸方式進行查詢;
+[no]trace:[不]跟蹤顯示整個查詢請求的解析過程;
模擬區域傳送:
dig -t axfr|ixfr DOMAIN_NAME_FQDN
host命令:
host - DNS lookup utility
格式:
host [-t RR_type] {name} [server]
示例:
~]# host -t A www.ytc.com 172.16.1.12
nslookup命令:
交互式命令;
server IP_ADDR:指定使用哪個DNS服務器進行查詢;
set q=RR_type:指定此次查詢的資源記錄的類型及相關答案;
set type=RR_type:功能同set q=RR_type;
FQDN | IP_ADDR:根據FQDN進行正向查詢解析或根據IP_ADDR進行反向查詢解析;
命令行工具;
nslookup FQDN NS_SRV
示例:
~]# nslookup www.ytc.com 172.16.72.2
配置反向解析區域:
反向域的FQDN:172.16.0.0/16網段的反向域名:
16.172.in-addrp.arpa.
反向查找區域示例:
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.local";
allow-transfer { none; };
};
正向區域庫文件配置示例:
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041101;
1H;
20M;
2W;
1D);
IN NS ns1.ytc.com.
IN MX 10 mail.ytc.com.
ns1 IN A 172.16.1.11
mail IN A 172.16.1.11
www IN A 172.16.100.100
www IN A 172.16.100.101
web.ytc.com. IN CNAME www.ytc.com.
ftp.ytc.com. IN CNAME web.ytc.com.
反向區域配置示例:
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041102;
2H;
10M;
2W;
5H);
IN NS ns1.ytc.com.
11.1 IN PTR ns1.ytc.com.
11.1 IN PTR mail.ytc.com.
50.50 IN PTR www.ytc.com.
51.50 IN PTR www.ytc.com.
主從DNS服務器:(主輔)
注意:
1.主服務器和輔助服務器都是域級別的概念;
2.必須保證主輔服務器之間的網絡通信的順暢以及時間同步;
3.爲了確保所有的名稱服務器都能被識別和使用,需要在區域數據庫中爲所有的名稱服務器添加NS資源記錄;
4.區域數據庫中每條NS資源記錄都必須有A記錄與之對應;
5.從服務器上可以默認將複製而來的數據庫文件保存至/var/name/slaves目錄中;
6.在主服務器上應該通過訪問控制指令允許從服務器進行區域傳送;同時從服務器要指定主服務器;
從服務器配置示例:
zone "ytc.com" IN {
type slave;
masters { 172.16.1.12; };
file "slaves/ytc.slave.zone";
allow-transfer { none; };
};
zone "16.172.in-addr.arpa" IN {
type slave;
masters { 172.16.1.12; };
file "slaves/172.16.slave.local";
allow-transfer { none; };
};
轉發器:
全局轉發:
對於凡是不能由本服務器管理的域的請求,全部以轉發的方式由指定的服務器進行遞歸查詢;
在bind的主配置文件的全局配置段中定義;
options {
forward first;
forwarders { FORWARD_SERVER_IP_ADDR; };
};
在A服務器上定義ytc.com域;
zone "ytc.com" IN {
type master;
file "ytc.zone";
allow-transfer { 172.16.1.12; } ;
};
配置庫文件:
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com.(
2018041111;
1H;
10M;
3D;
4H);
IN NS ns1
ns1 IN A 172.16.1.11
www IN A 1.1.1.2
在B服務器上,僅僅在全局配置段添加轉發器;
zone "ytc.com" IN {
type forward;
forward only;
forwarders { 172.16.1.11; };
};
再用客戶端測試:
dig @172.16.1.12 -t A www.ytc.com
區域轉發:
專門針對於某個特定的域的請求,如果不能給出權威答案,則轉發至指定的服務器進行遞歸查詢;
在bind的主配置文件的區域配置段中定義;
區域轉發配置示例:
在A服務器上定義ytc.com.cn域;
zone "ytc.com.cn" IN {
type master;
file "ytc.cn.zone";
allow-transfer { none; };
};
還需要定義該域的區域數據庫:/var/name/ytc.cn.zone
在B服務器上定義qhdlink.com.cn域的區域轉發器:
zone "ytc.com.cn" IN {
type forward;
forward only;
forwarders { 172.16.1.11; };
};
forward first|only;
first:首先轉發,當轉發器中指定的服務器無響應時,再自行迭代查找;
only:只使用轉發器中指定的服務器進行遞歸查詢,如果無法獲得答案,則直接返回否定答案;自身不再迭代查找;
注意:任何形式的請求轉發,都必須依靠被指定的服務器允許自身做遞歸查詢;
子域委派授權:
將子域的管理權授權給子域中的名稱服務器;父域中不保存任何子域數據庫中資源記錄;但爲了能夠成功授權,需要添加一條NS記錄,指向子域的名稱服務器;
子域委派授權的示例:
在A服務器上維護父域ytc.org域;
在A服務器上的ytc.org域的數據庫中添加NS記錄,以實現委派授權;
$ORIGIN ytc.org.
$TTL 86400
@ IN SOA ns1.ytc.org. root.ytc.org. (
2018041103;
2H;
5M;
5D;
1D);
IN NS ns1.ytc.org.
qhd.ytc.org. IN NS ns1.qhd.ytc.org.
ns1 IN A 172.16.1.11
ns1.qhd.ytc.org. IN A 172.16.1.12
www IN A 1.2.1.1
在B服務器上維護子域qhd.ytc.org域;
在B服務器上聲明子域並創建數據庫文件:
zone "qhd.ytc.org" IN {
type master;
file "qhd.ytc.org.zone";
allow-transfer { none; };
};
$ORIGIN qhd.ytc.org.
$TTL 86400
@ IN SOA ns1.ytc.org. root.qhd.ytc.org. (
201801104;
2H;
2M;
5D;
10H);
IN NS ns1
ns1 IN A 172.16.1.12
www IN A 11.11.22.22
注意:子域的委派授權,實際上是爲客戶端提供迭代查詢機制;
Bind中的基礎安全相關的配置:
1.訪問控制列表:
acl,Access Control List,將一個或多個IP地址,歸併爲一個集合,隨後可以通過實現定義好的名稱對集合中的多個IP地址進行統一調用或設置;
bind內部有四個內置的acl:
any:包括所有的IP地址,整個IP地址棧中的所有有效IP地址;
none:不包括任何一個IP地址;
local:僅包含本地已經配置生效的所有IP地址;
localnet:包含本機所有已經配置並生效的IP地址所在的網段的IP地址;
定義acl的語法格式:
acl acl_name {
[!] ip_addr;
[!] network/prefix;
};
示例:
acl myacl {
172.16.0.0/16;
! 172.16.100.100;
172.17.100.101;
};
注意:
1.在調用ACL之前,確保事先已經定義了指定的ACL;
2.通常在主配置文件/etc/named.conf中定義ACL,建議將自定義的ACL放置在配置文件的最前面,以保證後面的操作可以成功調用到此ACL;
所有的allow*語句,都是可以調用ACL的,包括:
allow-update { acl_name; };
allow-transfer { acl_name; };
allow-recursion { acl_name; };
allow-query { acl_name; };
allow-notify { acl_name; };
...
視圖的配置:View;
實現智能DNS解析服務;根據客戶端發送的請求報文中的某個封裝信息,判斷客戶端的網絡類型和服務類型,從而能夠提供最適合此用戶使用的解析結果;
定義視圖:
view VIEW_NAME {
match_clients { acl; };
zone "DOMAIN1" IN {
...
};
zone "DOMAIN2" IN {
...
};
...
};
注意:一旦在Bind中啓用視圖功能,在所有的zone的聲明必須都設置在視圖中;
配置示例:
1.給DNS服務器配置兩個不同網段的IP地址;
eno16777736:172.16.72.2/16
eno16777736:0:100.100.100.1/24
2.修改主配置文件:
1) 創建一個intranet的ACL;
acl intranet {
172.16.0.0/16;
192.168.1.0/24;
10.1.1.0/24;
};
2) 定義視圖:將所有的zone放置到視圖中;
view intranet {
match-clients { intranet; };
zone "." IN {
type hint;
file "named.ca";
};
zone "ytc.com" IN {
type master;
file "ytc.intra.zone";
allow-update { none; };
allow-transfer { 172.16.1.11; };
};
};
view internet {
match-clients { any; };
zone "ytc.com" IN {
type master;
file "ytc.inter.zone";
allow-update { none; };
allow-transfer { 172.16.1.11; };
};
};
/var/named/qhdlink.intra.zone
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018040701;Serial
1H;Refresh
15M;Retry
1W;Expire
1D);Minimal TTL
IN NS ns1.ytc.com.
ns1 IN A 172.16.1.12
www IN A 172.16.100.100
/var/named/ytc.inter.zone
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018040701;Serial
1H;Refresh
15M;Retry
1W;Expire
1D);Minimal TTL
IN NS ns1.ytc.com.
IN MX 10 mail.ytc.com.
ns1 IN A 100.100.100.1
www IN A 61.72.178.82
利用不同的客戶端進行測試:
client1:172.16.1.11/16 --> www.ytc.com ==> 172.16.100.100
cleint2:100.100.100.100/24 --> www.ytc.com ==> 61.72.178.82
總結:www.ytc.com域名的解析過程:
客戶端首選DNS服務器的名稱解析過程:
1.客戶端請求解析的內容是服務器管理和維護的內容:
client --> First DNS --> client
答案:權威答案;
2.客戶端請求解析的內容不是服務器管理和維護的內容:
1) 如果此服務器能夠爲客戶端實施遞歸查詢:
client --> First DNS --> NS(.) --> FirstDNS {NS(com)}
First DNS --> NS(com) --> FirstDNS {NS(ytc)}
First DNS --> NS(ytc) --> Answer(www.ytc.com)
First DNS --> client
迭代查詢的過程;
2) 如果此服務器不能爲客戶端實施遞歸查詢:
直接返回否定答案;