一、DNS介紹
DNS是計算機域名系統(Domain Name System 或Domain Name Service) 的縮寫,它是由域名解析器和域名服務器組成的。域名服務器是指保存有該網絡中所有主機的域名和對應IP地址,並具有將域名轉換爲IP地址功能的服務器。其中域名必須對應一個IP地址,一個IP地址可以有多個域名,而IP地址不一定有域名。域名系統採用類似目錄樹的等級結構。域名服務器通常爲客戶機/服務器模式中的服務器方,它主要有兩種形式:主服務器和轉發服務器。將域名映射爲IP地址的過程就稱爲“域名解析”。
DNS所監聽的端口: 53/UDP,53/TCP(默認)。 一般情況下僅使用UDP協議進行訊通,若網絡出現連接問題會自動轉爲TCP協議通訊
傳輸層協議: TCP, UDP, SCTP
TCP: Transmission Control Protocol
面向連接的協議:雙方通信之前需要事先建立虛連接;
UDP:User Datagram Protocol
無連接的協議:雙方無須通信之前需要事先建立虛連接;
二、DNS域的組成
根域:爲DNS根節點服務器,用"."表示
全球有13組DNS根服務器
頂級域:top level domain
分類:
組織域:.com, .org, gov, .edu, mil
國家域:.tw, .hk, .cn
反向域:.in-addr.arpa
頂級域是由根域劃分,由各種組織或商業公司代理
二級域:
二級域就是我們常見的網站名,例如taobao.com就是一個二級域的域名,www.taobao.com是taobao.com這個域中的某個主機
三、FQDN
FQDN:(Fully Qualified Domain Name)完全合格域名/全稱域名,是指主機名加上全路徑,全路徑中列出了序列中所有域成員。全域名可以從邏輯上準確地表示出主機在什麼地方,也可以說全域名是主機名的一種完全表示形式。從全域名中包含的信息可以看出主機在域名樹中的位置。DNS解析流程:首先查找本機HOSTS表,有的直接使用表中定義,沒有查找網絡連接中設置的DNS 服務器由他來解析。
例如,acmecompany公司的Web服務器的全域名可以是 acmecompany.,而若sales主機是在銷售部子域,則它的全域名可以是sales.acmecompany。當給出的名字像acmecompany而不是acmecompany.時,他們通常是指主機名,而名字後邊帶有點號(“.”是指根域名服務器)的則認爲是全域名。這種區別在理解和控制解析過程時是非常重要的。點號實際上指出了域名樹的根
四、DNS查詢
DNS查詢分爲:遞歸查詢和迭代查詢
(1)遞歸查詢: recursion
遞歸查詢是一種DNS 服務器的查詢模式,在該模式下DNS 服務器接收到客戶機請求,必須使用一個準確的查詢結果回覆客戶機。如果DNS 服務器本地沒有存儲查詢DNS 信息,那麼該服務器會詢問其他服務器,並將返回的查詢結果提交給客戶機。
(2)迭代查詢: iteration
DNS 服務器另外一種查詢方式爲迭代查詢,DNS 服務器會向客戶機提供其他能夠解析查詢請求的DNS 服務器地址,當客戶機發送查詢請求時,DNS 服務器並不直接回複查詢結果,而是告訴客戶機另一臺DNS 服務器地址,客戶機再向這臺DNS 服務器提交請求,依次循環直到返回查詢的結果
爲止。
兩種過程的示意圖:
個人總結:
DNS遞歸:內網區域(客戶端---->服務器,服務器找到符合條件的內容---->客戶端)
DNS迭代:外網區域(客戶端---->服務器,服務器找不到,讓客戶端找根)
五、DNS名稱解析方式:
名稱 --> IP:正向解析
IP --> 名稱:反向解析
注意:二者的名稱空間,非爲同一個空間,即非爲同一棵樹;因此,也不是同一個解析庫;
六、DNS一次完整的查詢請求經過的流程:
Client --> hosts文件 --> DNS Local Cache --> DNS Server (recursion) -->
自己負責解析的域:直接查詢數據庫並返回答案;
不是自己負責解析域:Server Cache --> iteration(迭代)
1、當客戶端要解析一個域名時,客戶端首先分析本地hosts文件,若無對應的主機條目,就去分析
本地緩存,若沒有答案,則向本地DNS服務器發起請求 。
2、DNS服務器接收到請求,首先分析服務器本地的緩存,看是否存在要解析的答案,有則直接返回,沒有則向根發起請求
3、根接收到請求,但根並不負責任何遞歸性的回答,所以,根會返回www.taobao.com的頂級域.com所在的主機地址給本地DNS服務器
4、本地DNS服務收到根的指向性答覆,然後去找負責.com的DNS服務器
5、負責.com的DNS服務器發現taobao.com是自己的管理的區域,但自己並不負責做遞歸性的答覆
所以返回負責解析taobao.com的DNS服務器地址給本地DNS服務器
6、本地DNS服務器向負責解析taobao.com這個域的DNS服務器發起請求
7、負責解析johnson.com這個二級域的DNS服務器接收到解析www.johnson.com請求後,分析自己的區域數據庫文件,發現存在www主機,給本地DNS服務器返回答案
8、本地DNS服務器收到答覆,將答案返回給客戶端,域名解析過程完成
七、DNS服務器類型和配置
主DNS服務器:維護所負責解析的域數據庫的那臺服務器;讀寫操作均可進行;
從DNS服務器:從主DNS服務器那裏或其它的從DNS服務器那裏“複製”一份解析庫;但只能進行讀操作;
“複製”操作的實施方式:
序列號:serial, 也即是數據庫的版本號;主服務器數據庫內容發生變化時,其版本號遞增;
刷新時間間隔:refresh, 從服務器每多久到主服務器檢查序列號更新狀況;
重試時間間隔:retry, 從服務器從主服務器請求同步解析庫失敗時,再次發起嘗試請求的時間間隔;
過期時長:expire,從服務器始終聯繫不到主服務器時,多久之後放棄從主服務器同步數據;停止提供服務;
否定答案的緩存時長:
主服務器“通知”從服務器隨時更新數據;
區域傳送:
全量傳送:axfr, 傳送整個數據庫;
增量傳送:ixfr, 僅傳送變量的數據;
主從服務器配置:
注意:從服務器是區域級別的概念;
配置一個從區域:
(1) 定義區域
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
配置文件語法檢查:named-checkconf
(2) 重載配置
CentOS 6 ~]# rndc reload
CentOS 7 ~]# systemctl reload named.service
配置一個主區域:
(1) 確保區域數據文件中爲每個從服務配置NS記錄,並且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A後面的地址爲真正的從服務器的IP地址;
注意:時間要同步;
ntpdate命令
八、區域數據庫文件
8.1 區域(zone)和域(domain)
magedu.com域:
FQDN --> IP
正向解析庫;區域
IP --> FQDN
反向解析庫;區域
8.2 資源記錄: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,數字越小優先級越高;
8.3 資源記錄的定義格式:
語法:name [TTL] IN RR_TYPE value
name:資源名稱,不同資源類型名稱不同
[ttl]: 緩存有效期,可省略,可以在宏中定義
IN: Internet,固定格式
RRtype: 資源類型
value:資源對應的值
8.4 記錄類型
SOA:只能有一個
(1) 當前區域的區域名稱(也可以使用主DNS服務器名稱);
(2) 當前區域管理員的郵箱地址;但地址中不能使用@符號,一般使用點號來替代;
(3) (主從服務協調屬性的定義以及否定答案的TTL)
例如:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. (
2017010801 ; serial(爲數據庫的版本號,十進制格式,不能超過10位)
2H ; refresh(從服務器到主服務器的更新間隔)
10M ; retry(更新失敗重試時間,應該小於refresh time)
1W ; expire(重試多久後,依然沒有聯繫到主DNS,自己拒絕提供服務的時間)
1D ; negative answer ttl(否定答案緩存時間)
)
NS:可以有多條
name: 當前區域的區域名稱
value:當前區域的某DNS服務器的名字,例如ns.magedu.com.;
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
MX:記錄可以有多個;但每個記錄的value之前應該有一個數字表示其優先級;
name: 當前區域的區域名稱
value:當前區域某郵件交換器的主機名;
優先級:0-99,數字越小,優先級越高
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
A:
name:某FQDN,例如www.magedu.com.
value:某IPv4地址;
例如:
www.magedu.com. IN A 1.1.1.1
www.magedu.com. IN A 1.1.1.2
bbs.magedu.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:FQND
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.com.
CNAME:
name:FQDN格式的別名;
value:FQDN格式的正式名字;
例如:
web.magedu.com. IN CNAME www.magedu.com.
注意:
(1) TTL可以從全局繼承;
(2) @表示當前區域的名稱;
(3) 相鄰的兩條記錄其name相同時,後面的可省略;
(4) 對於正向區域來說,各MX,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模式
創建新的DNS主配置文件:
主配置文件:/etc/named.conf
或包含進來其它文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
解析庫文件:
/var/named/目錄下;
一般名字爲: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; };
檢查配置文件語法錯誤:
named-checkconf [/etc/named.conf]
測試工具:
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:要查詢的名稱;
rndc命令:named服務控制命令
rndc status
rndc flush
bind view:
視圖:
view VIEW_NAME {
zone
zone
zone
}
view internal {
match-clients { 172.16.0.0/8; };
zone "magedu.com" IN {
type master;
file "magedu.com/internal";
};
};
view external {
match-clients { any; };
zone "magecdu.com" IN {
type master;
file magedu.com/external";
};
};
十一、正向和反向區域配置
配置解析一個正向區域:
以taobao.com域爲例:
(1) 定義區域
在主配置文件中或主配置文件輔助配置文件中實現;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:區域名字即爲域名;
(2) 建立區域數據文件(主要記錄爲A或AAAA記錄)
在/var/named目錄下建立區域數據文件;
文件爲:/var/named/taobao.com.zone
$TTL 3600
$ORIGIN magedu.com.
@ IN SOA ns1.taobao.com. dnsadmin.taobao.com. 2017041201
1H
8M
4D
2D )
IN NS ns1
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 172.16.100.67
mx1 IN A 172.16.100.68
mx2 IN A 172.16.100.69
www IN A 172.16.100.67
web IN CNAME www
bbs IN A 172.16.100.70
bbs IN A 172.16.100.71
權限及屬組修改:
~]# chgrp named /var/named/taobao.com.zone
~]# chmod o= /var/named/taobao.com.zone
檢查語法錯誤:
~]# named-checkzone ZONE_NAME ZONE_FILE
~]# named-checkconf
(3) 讓服務器重載配置文件和區域數據文件
~]# rndc reload 或
~]# systemctl reload named.service
配置解析一個反向區域
(1) 定義區域
在主配置文件中或主配置文件輔助配置文件中實現;
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
注意:反向區域的名字
反寫的網段地址.in-addr.arpa
100.16.172.in-addr.arpa
(2) 定義區域解析庫文件(主要記錄爲PTR)
示例,區域名稱爲100.16.172.in-addr.arpa;
$TTL 3600
$ORIGIN 100.16.172.in-addr.arpa.
@ IN SOA ns1.magedu.com. nsadmin.magedu.com. (
2017041201
1H
8M
4D
2H )
IN NS ns1.magedu.com.
67 IN PTR ns1.magedu.com.
68 IN PTR mx1.magedu.com.
69 IN PTR mx2.magedu.com.
70 IN PTR bbs.magedu.com.
71 IN PTR bbs.magedu.com.
67 IN PTR www.magedu.com.
權限及屬組修改:
~]# chgrp named /var/named/172.16.100.zone
~]# chmod o= /var/named/172.16.100.zone
檢查語法錯誤:
~]# named-checkzone ZONE_NAME ZONE_FILE
~]# named-checkconf
(3) 讓服務器重載配置文件和區域數據文件
~]# rndc reload 或
~]# systemctl reload named.service
十二、主從服務器配置:
注意:從服務器是區域級別的概念;
配置一個從區域:
(1) 定義區域
zone "ZONE_NAME" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
配置文件語法檢查:named-checkconf
(2) 重載配置
CentOS 6 ~]# rndc reload
CentOS 7 ~]# systemctl reload named.service
配置一個主區域:
(1) 確保區域數據文件中爲每個從服務配置NS記錄,並且在正向區域文件需要每個從服務器的NS記錄的主機名配置一個A記錄,且此A後面的地址爲真正的從服務器的IP地址;
注意:時間要同步;
ntpdate命令;
十二、子域授權:
正向解析區域授權子域的方法:
ops.magedu.com. IN NS ns1.ops.magedu.com.
ops.magedu.com. IN NS ns2.ops.magedu.com.
ns1.ops.magedu.com. IN A IP.AD.DR.ESS
ns2.ops.magedu.com. IN A IP.AD.DR.ESS
定義轉發:
注意:被轉發的服務器必須允許爲當前服務做遞歸;
(1) 區域轉發:僅轉發對某特定區域的解析請求;
zone "ZONE_NAME" IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
};
first:首先轉發;轉發器不響應時,自行去迭代查詢;
only:只轉發;
(2) 全局轉發:針對凡本地沒有通過zone定義的區域查詢請求,通通轉給某轉發器;
options {
... ...
forward {only|first};
forwarders { SERVER_IP; };
.. ...
};