DNS Server根據提供服務内容,可以分為Authoritative授權伺服器和Recursive遞歸伺服器兩種。前者在本地儲存了授權域名的Zone檔案能夠提供針對授權域的權威應答,伺服器角色可以是Master或Slave Server;後者僅對用戶端請求做遞歸查詢并提供緩存服務,通常也稱為CacheOnly Server。
我們在 homelab.pub中建構的DNS Server将會同時配置為授權伺服器和遞歸伺服器,滿足企業内部私有域名解析和外部域名緩存需求。但這種配置在生産環境中可能會因為緩存伺服器向營運商DNS Server頻繁發出DNS請求而觸發服務側的安全機制導緻被暫時性列入RBL,影響内部使用者正常通路,是以建議為本地DNS Server配置多個參考DNS Server,條件允許的話建議配置谷歌或DNSPOD等機構的DNS Server,可以避免此類問題且可以在一定程度上免受DNS污染影響。
本文将介紹DNS服務關鍵術語,區域Zone和資源記錄ResourceRecords(下文簡稱RR)。
0x1 Zone和RRZone和Domain雖然都有“區域”的意思,但在IT語境中卻是兩個不同的術語。Domain是DNS階層化結構中的一個分支,而Zone是DNS結構中的一段連續的名稱空間,即Zone是可以包含多個連續的Domain的,而不連續的Domain是無法構成Zone的。在Zone配置檔案中通過資源記錄RR描述這段連續的名稱空間中授權和位址解析情況。Zone配置檔案格式通過RFC1035定義,是以大多數DNS Server無論其架構和平台都能夠互相相容。
Zone配置檔案示例參考:
$ORIGIN homelab.pub. ;聲明域名空間,必須以點号結尾
$TTL 86400 ;RR生存周期,即可被緩存時間,全局
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. ( ;SOA記錄
2018061801 ;序列号
21600 ;更新時間間隔,也可采用6H表示
3600 ;更新失敗重試時間間隔,也可采用1H表示
604800 ;失效時間,也可采用1W表示
86400 ;TTL生存周期,也可采用1D表示
)
;
IN NS master.homelab.pub. ;NS記錄
IN NS slave.homelab.pub. ;NS記錄
master IN A 192.168.2.250 ;A記錄
slave IN A 192.168.2.251 ;A記錄
Zone配置檔案中的每條記錄(如SOA/NS/A/MX等)就稱為RR資源記錄。
0x2 RR資源記錄類型根據IETF相關文檔定義,RR可以有多種,本文僅介紹我們日常工作經常用到的幾種類型。
1、SOA記錄,Start of Authority Record用途:用于委派授權,即表明目前DNS Server作為指定域的授權伺服器。SOA是Zone檔案的第一條RR,包含多個參數,預設時間機關為秒,也支援H/D/W等便捷表示法;
示例:
$ORIGIN homelab.pub. ;聲明域名空間,必須以點号結尾
$TTL 86400 ;RR生存周期,即可被緩存時間,全局
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. (
2018061801
21600
3600
604800
86400
)
SOA記錄内容說明:
@ 在Zone檔案中“@”符号表示引用#ORIGIN指令,即homelab.pub
IN 表示Internet
SOA 記錄類型
master.homelab.pub. 授權DNS伺服器主機名
xiaomage.homelab.com. 管理者Email位址,因在Zone檔案中“@”符号有其他用途,這裡有件位址中用“.”代替
2018061801 數字格式序列号,用于配置版本控制,slave根據序列号判斷master是否有更新
21600 salve向master請求更新的時間間隔(也可以采用6H表示)
3600 salve向master請求更新失敗後重試時間間隔,如果在過期時間之内master始終沒有響應slave的更新請求,則slave在過期時間後不能再為homelab.pub域提供權威解析(也可以采用1H表示)
604800 過期時間(也可以采用1W表示)
86400 TTL生存周期,即RR可以呗其他伺服器緩存的時間周期(也可以用1D表示)
2、NS記錄,Name Server Record用途:聲明目前域使用的DNS伺服器的FQDN;
示例:
@ IN NS master.homelab.pub.
IN NS slave.homepab.pub.
說明:如果一條RR的第一個字段為空則使用上一條RR的第一個字段補齊;
3、A記錄,IPv4 Address Record用途:将域名映射到IPv4位址
www IN A 192.168.2.205
IN A 192.168.2.206
說明:在正向解析域(即從域名解析IP位址),FQDN域名要以“.”點号表示名稱結束,否則DNS Server會自動将$ORIGIN的值追加到域名後作為FQDN。示例中“www”沒有使用“.”号結束,系統會自動将其補充為“www.homelab.pub.”,如果寫為“www.”就錯了。
4、MX記錄,Mail Exchange Record用途:聲明目前域使用的郵件伺服器的FQDN
示例:
@ IN MX 10 mail1.homelab.pub.
IN MX 20 mail2.homelab.pub.
說明:同一域名可以設定多條同類型的RR以實作負載均攤,MX型RR中增加了優先級列來區分負載均攤的參考權重,權重值越大優先級越低。
5、CNAME記錄,Canonical Name Record用途:别名記錄,将域名映射到另一個域名,但不能映射到另一個别名(防止環路沖突),其他指向FQDN的記錄(NS、MX、PTR)不能指向CNAME記錄;
portal IN CNAME www
說明:這條RR中portal和www都沒有以“.”點号結尾,是以系統會自動将其補充為“portal.homelab.pub. IN CNAME www.homelab.pub.”。
6、PTR記錄,Pointer Resource Record用途:反向解析記錄,用于反向解析域(即從IP位址解析域名),将IP位址映射到域名。
250 IN PTR master.homelab.pub.
說明:反向解析域Zone檔案中IP位址部分僅需填寫最後一組數字,以上示例表示“192.168.2.250是域名master.homelab.pub的IP位址”。
7、TXT記錄,Text Record用途:文本型記錄,多用于垃圾郵件防範的SPF和DKIM,這兩種RR不能視為anti-spam的能力,但可以作為整體方案的組成部分;
homelab.pub. IN TXT "v=spf1 mx ptr -all"
mail1.homelab.pub. IN TXT "v=spf1 mx ptr -all"
mail2.homelab.pub. IN TXT "v=spf1 mx ptr -all"
homelab.pub. IN TXT "v=spf1 ip4:192.168.2.200/24 ip4:192.168.2.201/24 -all"
說明1:SPF Sender Policy Framework發送方政策架構,用以聲明目前域有哪些合法郵件伺服器。SPF記錄可以配置到整個域和域内的每台MX RR,其中“v=spf1”表示版本1,目前隻有版本1,“mx”表示本域對外發送郵件,“ptr”表示本域郵件伺服器具有ptr記錄,“ip4:192.168.2.200/24”表示本域郵件伺服器IPv4位址,有多個郵件伺服器則都要寫全,“-all”表示拒絕其他位址。具體采用哪種寫法要根據DNS Server支援情況來确認,國内的DNS服務商多采用最後一種方式。TXT記錄在企業内部的DNS Server上幾乎用不到,後續如果談到MailServer再詳細解釋。
說明2:DKIM DomainKeys Identified Mail 域名密鑰識别郵件(标準),用以驗證發送方伺服器合法性。大體流程是MailServer建立了非對稱密鑰對,并将共鑰資訊添加到了DNS伺服器的TXT記錄中,發件方伺服器在發送郵件時會在郵件頭中加入基于私鑰的簽名資訊,收件伺服器在接收到郵件請求後會向DNS伺服器請求發件伺服器域名TXT記錄中的公鑰資訊用以驗證簽名是否有效,若有效則進入郵件接收流程,否則則進入垃圾郵件處理流程。
一句話簡單了解SPF和DKIM:SPF聲明了目前域合法的MailServer的IP位址,而收件方MailServer則可以通過DKIM對這些位址進行驗證。
8、SRV記錄,Service Location Record用途:服務定位記錄,用以辨別指定伺服器提供了哪些服務,常用于Windows活動目錄中。
_http._tcp.homelab.pub. IN SRV 0 5 8081 www.homelab.pub.
說明:SRV記錄字段構成:srvce.prot.name. IN SRV pri weight port target
srvce:服務類型,以下橫行開頭,如:_http表示WEB服務,_ftp表示FTP服務,_ldap表示LDAP服務等;
prot:協定類型,以下橫行開頭,如:_tcp表示TCP協定,_udp表示UDP協定;
name:本域域名;
SRV:記錄類型;
pri:優先級,同MX記錄中優先級功能相同,數值越小優先級越高;
weight:權重,用于在具有相同優先級的多條SRV記錄之間實作負載均攤,數值越大被負載的幾率越高;
port:服務端口,此處可以填寫自定義端口,比如運作于8081端口的WEB服務;
target目标伺服器,提供該服務的伺服器FQDN。