DNS and Bind
·Sockets:
C/S
Client:發起應用請求的程序
Server:響應請求(提供服務)的程序
LISTEN:Socket
傳輸層協議:TCP ,UDP ,SCTP
TCP:Transmission Control Protocol
面向連接的協議:雙方通信之前需要事先建立虛連接
UDP:User Datagram Protocol
無連接的服務:雙方無須通信之前建立虛連接
DNS:Domain Name Service ,應用層協議
·C/S
53/udp ,53/tcp
udp53號端口是用來查詢,tcp53號端口是用來主從復制的
·www.magedu.com :FQDN ( Full Qualified Domain Name )
·tld :Top Level Domain
組織域:.com ,.net ,.org ,.gov ,.edu ,.mil ,.int
國家域:.iq ,.tw ,.hk ,.jp ,.cn
·DNS查詢類型:
遞歸查詢:
DNS服務器與DNS服務器之間
迭代查詢:
主機到DNS服務器之間
·DNS名稱解析方式:
名稱 –> IP:正向解析
IP –> 名稱:反向解析
注意:二者的名稱空間,非為同一個空間,即非為同一顆樹;因此,也不是同一個解析庫
·域:magedu.com
www.magedu.com. 1.1.1.1
ftp.magedu.com. 2.2.2.2
bbs.magedu.com. 3.3.3.3
cloud.magedu.com. 4.4.4.4
·DNS服務器類型:
負責解析至少一個域
主名稱服務器
輔助名稱服務器
不負責域解析:
緩存名稱服務器
·一次完整的查詢請求經過的流程:
Client –> hosts文件 –> DNS Local Cache –> DNS Server (recursion) –> Server Cache –> iteration(迭代) –> 根 –> 頂級域名DNS –> 二級域名DNS …..
自己負責解析的域:直接查詢數據庫并返回答案
不是自己負責解析的域:Server Cache –> iteration (迭代)
解析答案:
肯定答案:
否定答案:不存在查詢的鍵,因此,不存在與其查詢鍵對應的值
權威答案: 由直接負責的DNS服務器返回的答案
非權威答案:
·主-輔DNS服務器:
主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行
從DNS服務器:從主DNS服務器那里或其他的從DNS服務器那里“復制”一份解析庫;但只能進行讀操作;
“復制”操作的實施方式:
序列號:serial,也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增
刷新時間間隔:refresh,從服務器每多久到主服務器查詢序列號更新狀況
重試時間間隔:retry,從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔
過期時間:expire,從服務器始終聯系不到主服務器時,多久之后放棄從主服務器同步數據;停止提供服務
否定答案的緩存時長:返回答案錯誤時,此錯誤答案在本地DNS緩存的時間
主服務器“通知”從服務器隨時更新數據
區域傳送:
全量傳送:axfr,傳送整個數據庫
增量傳送:lxfr,僅傳送變化的<新增的>數據
·區域(zone)和域(domain):
magedu.com域
FQDN –> IP
正向解析庫
IP –> FQDN
反向解析庫
注意:區域并不一定就比域要小
·區域數據庫文件:
資源記錄:Resource Record,簡稱rr
記錄類型有:A ,AAAA ,PTR ,SOA ,NS ,CNAME ,MX
SOA:Start Of Authority,起始授權記錄;一個區域解析庫由其只能有一個SOA記錄,而且必須放在第一條
NS:Name Service,域名服務記錄;一個區域解析庫可以有多個NS記錄;其中一個為主的
A:Address,地址記錄,FQDN –> IPv4
AAAA:地址記錄,FQDN –> IPv6
CNAME:Canonical Name,別名記錄
PTR:Pointer,IP –> FQDN
MX:Mail eXchanger,郵件交換器
優先級:0-99,數字越小優先級越高
·資源記錄的定義格式:
語法: name [TTL] IN RR_TYPE value
·SOA:
name:當前區域的區域名稱;例如“magedu.com.”,或者“2.3.4.in-addr.arpa.”
value:由多部分組成
(1)當前區域的區域名稱(也可以使用主DNS服務器名稱)
(2)當前區域管理員的郵箱地址;但地址紅不能使用@符號,一般使用點來替代
(3)(主從服務器協調屬性的定義以及否定答案的TTL)
例如:
gm.com. 86400 IN SOA gm.com admin.gm.com (
2017010801 ;serial
2H ;refresh
10M ;retry
1W ;erpire
1D ;negative answer ttl
)
·NS:
name:當前區域的區域名稱
value:當前區域的某DNS服務器名稱,例如:ns.magedu.com.
注意:一個區域可以有多個ns記錄
例如:
gm.com. 86400 IN NS ns1.gm.com.
gm.com. 86400 IN NS ns2.gm.com.
·MX:
name:當前區域的區域名稱
value:當前區域某郵件交換器的主機名
注意:MX記錄可以有多個,但是每個記錄的value之前應該有一個數字表示其優先級
例如:
gm.com. IN MX 10 mx1.gm.com.
gm.com. IN MX 20 mx2.gm.com.
·A:
name:某FQDN,例如:www.magedu.com.
value:某IPv4地址
例如:
www.gm.com. IN A 1.1.1.1
www.gm.com. IN A 1.1.1.2
bbs.gm.com. IN A 1.1.1.1
·AAAA:
name:FQDN
value:IPv6
·PTR:
name:IP地址,有特定格式,IP反過來寫,而且加特定后綴;例如:1.2.3.4的記錄應該寫為4.3.2.1.in-addr.arpa.
value:FQDN
例如:
4.3.2.1.in-appr.arpa. IN PTR www.magedu.com.
·CNAME:
name:FQDN格式的別名
value:FQDN格式的正式名字
例如:
web.gm.com. IN CNAME www.gm.com.
·注意:
(1)TTL可以從全局繼承
(2)@表示當前區域的名稱
(3)相鄰的兩條記錄其name相同時,后面的可省略
(4)MS,NS等類型的記錄的value為一個FQDN,此FQDN應該有一個對應的A記錄
BIND的安裝配置:
·BIND:Berkeley Internet Name Domain,ISC.org
dns:協議
bind:dns協議的一種實現
named:bind程序的運行的進程名
·程序包:
bind-libs:被bind和bind-utils包總的程序共同用到的庫文件
bind-utils:bind客戶端程序集,例如:dig,host,nslookup等命令
bind:提供了dns server程序、以及幾個常用的測試程序
bind-chroot:選裝,讓named運行于jail模式下
bind:
·主配置文件:/etc/named.conf
或包含進來其他文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
可以使用include包含進其他文件
·解析庫文件:
/var/named/目錄下:<也是bind工作目錄>
一般名字為:ZONE_NAME.zone
注意:
(1)一臺DNS服務器可同時為多個區域提供解析
(2)必須要有跟區域解析庫文件:named.ca
(3)還必須有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫
正向:named.localhost
反向:named.loopback
·rndc:remote name domain contoller
953/tcp,但默認監聽于127.0.0.1地址,因此僅允許本地使用
·bind程序安裝完成之后,默認即可做緩存名稱服務器使用;如果沒有專門負責解析的區域,直接即可啟動服務
CentOS 6:service named start
CentOS 7:systemctl start named.service
·主配置文件格式:
全局配置段:
options {…};
日志配置段:
logging {…};
區域配置段:
zone {…};
那些由本機負責解析的區域,或轉發的區域
注意:每個配置語句必須以分號結尾
緩存名稱服務器的配置:
監聽能于外部主機通信額地址:
listen-on port 53;
listen-on port 53 { 172.16.100.67; };
學習時,建議關閉dnssec
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
關閉僅允許本地查詢:
//allow-query { localhost; };
允許某機器進行區域傳送<應設置為只對從服務器進行區域傳送>
allow-transfer { IP; }
·檢查配置文件語法錯誤:
named-checkconf [/etc/named.conf]
·檢查配置區域文件語法錯誤:
named-checkzone ZONE_NAME /var/named/ZONE_NAME.zone
·測試工具:
dig,host,nslookup等
dig命令:
dig [-t RR_TYPE] name [@server] [query options]
用于測試dns系統,因此其不會查詢hosts文件
查詢選項:
+[no]trace:跟蹤解析過程
+[no]recurse:進行遞歸解析
注意:反向解析測試
dig -x IP
模擬完全區域傳送:
dig -t axfr DOMAIN [@server]
host命令:
host [-t RR_TYPE] name SERVER_IP
nslookup命令:
nslookup [-options] [name] [server]
交互式模式:
nslookup>
server IP :以指定的IP為DNS服務器進行查詢
set q=RR_TYPE :要查詢的資源記錄類型
name :要查詢的名稱
·配置解析一個正向區域:
以gm.com域為例:
(1)定義區域
在主配置文件中或主配置文件輔助配置文件中實現
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone"
};
注意:區域名字即為域名
(2)建立區域數據文件<主要記錄為A或AAAA記錄>
在/var/named目錄下建立區域數據文件
文件為:/var/named/gm.com.zone
$TTL 3600
$ORIGIN magedu.com.
@ IN SOA ns1.gm.com. admin.gm.com. (
2017092301
1H
10M
3D
1D )
IN NS ns1
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 10.1.143.2
mx1 IN A 10.1.143.2
mx2 IN A 10.1.143.2
www IN A 10.1.143.2
web IN CNAME www
bbs IN A 10.1.143.3
bbs IN A 10.1.143.4
權限及屬組修改:
# chgrp named /var/named/gm.com.zone
# chmod o= /var/named/gm.com.zone
檢測語法錯誤:
# named-checkconf [/etc/named/named.conf]
# named-checkzone ZONE_NAME ZONE_NAME_FILE
(3)讓服務器重載配置文件和區域數據文件
# rndc reload 或
# systemctl reload named.service
·配置解析一個反向區域:
(1)定義區域
在主配置文件中或主配置文件輔助配置文件中實現
zone "ZONE_NAME" IN {
type {master|slave|hint|forword};
file "ZONE_NAME.zone"
};
注意:
區域名
反向區域的名字
反寫的網段地址.in-addr.arpa
143.1.10.in-addr.arpa
(2)建立區域數據文件<主要記錄為PTR>
在/var/named目錄下建立區域數據文件
注意:在反向解析區域數據文件中,不能有MX的記錄
文件為:/var/named/10.1.143.zone
$TTL 3600
$ORIGIN 143.1.10.in-addr.arpa.
@ IN SOA ns1.gm.com. admin.gm.com. (
2016092301
1H
10M
3D
1D )
IN NS ns1
2 IN A ns1.gm.com.
2 IN A mx1.gm.com.
2 IN A mx2.gm.com.
3 IN A bbs.gm.com.
4 IN A bbs.gm.com.
2 IN A www.gm.com.
權限及屬組修改:
# chgrp named /var/named/10.1.143.zone
# chmod o= /var/named/10.1.143.zone
檢測語法錯誤:
# named-checkconf [/etc/named/named.conf]
# named-checkzone ZONE_NAME ZONE_NAME_FILE
(3)讓服務器重載配置文件和區域數據文件
# rndc reload 或
# systemctl reload named.service
·主從服務器:
注意:從服務器是區域級別的概念
1、應該為一臺獨立的名稱服務器
2、主服務器的區域解析庫文件中必須有一條NS記錄指向從服務器
3、從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置于/var/named/slaves/目錄中
4、主服務器得允許從服務器作區域傳送
5、主從服務器時間應該同步,可通過ntp進行:ntpdate命令
6、bind 程序的版本應該保持一致;否則,應該從高,主低
配置一個從區域
On Slave
(1)定義區域
定義一個從區域:
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP };
};
配置文件語法錯誤檢測:named-checkconf
(2)重載配置文件
# rndc reload
# systemctl reload named.service
On Master<每次修改了主服務器后,序列號要加1,從服務器才能同步數據>
(1)在主服務器上的正向區域解析文件中追加2條記錄
從服務器的NS記錄:
magedu.com. IN NS ns2.magedu.com.
從服務器NS記錄的A記錄
ns2 IN A SLAVE_IP<從服務器的IP>
·rndc命令:named服務器控制命令
rndc –> rndc (953/tcp)
rndc COMMAND
COMMAND:
reload:重載主配置文件和區域解析庫文件
reload zone:重載區域解析庫文件
retransfer zone:手動啟動區域傳送過程,而不管序列號是否增加
notify zone:重新對區域傳送發通知
reconfig:重載主配置文件
querylog:開啟或關閉查詢日志文件/var/log/message
trace:遞增debug 一個級別
trace LEVEL:指定使用的級別
notrace:為將調試級別設置為 0
flush:清空DNS服務器的所有緩存記錄
·子域授權:
注意:關閉dnssec功能:
dnssec-enable no;
dnssec-validation no;
正向解析區域授權子域的方法:<添加在正向區域解析文件中的數據>
ops.gm.com. IN NS ns1.ops.gm.com.
ops.gm.com. IN NS ns2.ops.gm.com.
ns1.ops.gm.com. IN NS IP.AD.DR.ESS
ns2.ops.gm.com. IN NS IP.AD.DR.ESS
在子域服務器上在配置/etc/named.conf文件和/var/named/目錄下的區域文件,格式大致同主服務器
提醒:此時的子域的域名是ops.gm.com
·轉發服務器:
注意:關閉dnssec功能:
dnssec-enable no;
dnssec-validation no;
定義轉發:
注意:被轉發的服務器必須允許為當前服務做遞歸,否則轉發請求不予進行
(1)區域轉發:僅轉發對某些特定區域的解析請求
zone "ZONE_NAME" IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
}
first:首先轉發;轉發器不響應時,自行去迭代查詢
only:只轉發;轉發器不響應時,就放棄查詢
(2)全局查詢:針對凡本地沒有通過zone定義的區域查詢請求,通通轉發給某轉發器
options {
…..
forward {first|only};
forwarders { SERVER_IP; };
…..
};
·bind中的安全相關的配置:
acl:訪問控制列表;把一個或多個地址歸并成一個命名的集合,隨后通過此名稱即可對此集合內所有的主機實現統一調用
acl acl_name{
ip;
net/prelen;
};
示例:
acl mynet {
172.16.0.0/16;
127.0.0.0/8;
};
bind中有四個內置的acl:
none:沒有一個主機
any:任意主機
local:本機
localnet:本機所在的IP所屬的網絡
注意:只能先定義,后使用 ;因此一般 定義在 配置文件中,處于options的前面
訪問控制指令:
allow-query {}; 允許查詢的主機;白名單
allow-transfer {}; 允許向那些主機做區域傳送;默認為向所有主機;應該配置僅允許從服務器可以傳送
allow-recursion {}; 允許那些主機向當前DNS服務器發起遞歸查詢請求
allow-update {}; DDNS,運行動態更新區域數據庫文件中內容
·bind view:<視圖>
一個bind服務器可定義多個view,每個view中可定義一個或多個zone
每個view用來匹配一組客戶端
多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件
view VIEW_NAME {
match-clients { };
zone …
zone …
….
};
例如:
view internal {
match-clients { 172.16.0.0/8; };
zone "gm.com" IN {
type "master";
file "gm.com/internal.zone";
};
};
view external {
match-clients { any; };
zone "gm.com" IN {
type "master";
file "gm.com/external.zone";
};
};
注意:
(1)一旦啟用了view,所有的zone都只能定義在view中
(2)僅在允許遞歸請求的客戶端所在view中定義根區域
(3)客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/49107