DNS 与BIND(第五版)
內容提要:
Bind( Berkeley Internet Name Domain) 是Internet上使用最廣泛的源碼開發的DNS服務器軟件。
?
第一章??
背景
1.2.1 域名系統的歷史
在20世紀70年代,ARPAnet是一個只有幾百臺主機的小型、友好的社區,所以只需要HOSTS.TXT這一個文件,就可以包含連接到ARPAnet的每臺主機的名稱到地址的解析。人們所熟知的UNIX主機表(/etc/hosts)就是由HOSTS.TXT演變而來的。
1.3 DNS簡述
1. 域名系統是一個分布式數據庫。這種結構允許對整體數據庫的各個部分進行本地控制,并且在各個部分中的數據通過客戶端/服務端模式變得對整個網絡都可用。通過復制和緩存等機制,DNS擁有了健壯性和充足的性能。
2. 主機可以擁有一個或多個域名別名(domain name aliases),這些域名別名是從某個域名(別名)指向另一個域名(正式的或規范的域名)的指針。
?
第二章? ?DNS的運行機制
2.1 域名空間
DNS的分布式數據庫通過域名進行索引。每個域名本質上就是一棵大型逆向樹(inverted tree)的一條路徑,而這棵逆向樹又被稱作域命名空間(domain namespace)。這棵樹的頂端有唯一的根,稱為root. 樹的深度最多可達127層。
2.1.2?域
一個域(domain)就是域名空間的一棵子樹,一個域的名稱也就是該域最頂端節點的域名。
域名只是DNS數據庫中的索引
一個域可能會擁有多課子樹,這些子樹被稱為子域(subdomain)
頂級域:top-level domain?
二級域: second-level domain
頂級域是root 的子域
一級域也是root的子域(一級域和頂級域是同一概念)
二級域是一級域的子域,依次類推
?
2.1.3 資源記錄
與域名相關的數據都被包含在資源記錄(resource record, RR)中
2.2.1 頂級域
原始的頂級域將Internet域名空間在組織層面上分成了7個域
com : 商業組織
edu : 教育組織
gov : 政府機構
mil : 軍事組織
net : 原先僅用于提供網絡基礎設施的組織,后開放給商業組織
org : 原僅提供給非營利性組織,后解除該限制
int? : 國際組織
目前,這7個原始域被稱為通用頂級域(generic top-level domains, gTLDs)
"通用"是相對于國家代碼頂級域(country-code top-level domains)而言的
2.3 授權
管理域的組織可以將域進一步劃分成子域,每個子域都可以被授權給其他組織來管理,這意味著這些被授權的組織得負責維護子域中所有的數據。他們可以自由地改變域中的數據,甚至將子域進一步劃分成更多的子域,然后再授權給其他組織管理。父域僅僅保留指向子域數據來源的指針,這樣父域便可將查詢者引到此處。
2.4 名稱服務器和區域
存儲域名空間信息的程序被稱作名稱服務器(nameserver)。名稱服務器通常只擁有域名空間某一部分的完整信息,這一部分我們稱作區域(zone),區域的內容是從文件或者另一個名稱服務器加載而來。加載過后,這個名稱服務器便可稱對該區域具有權威(authority)。一個名稱服務器可以同時對多個區域具有權威。
為什么名稱服務器加載的是區域的數據而不是域的數據?
一個域所包含的信息可能超出了名稱服務器的需要,因為它還包含了已經授權給其他名稱服務器的數據。而區域通過授權已經被劃出了界限,它將不會包含已經被授權出去的數據。
2.5 解析器
解析器(resolver)就是訪問名稱服務器的客戶端程序。當運行在主機上的程序需要從域名空間中獲取信息時就會使用到解析器。解析器的作用為:
1. 查詢名稱服務器
2. 解析響應信息(可能是資源記錄或錯誤)
3. 將信息返回給查詢它的程序
2.6.1 root 名稱服務器
Internet上有13個root 名稱服務器。
2.6.2 遞歸
查詢有兩種形式:遞歸的(recursive) 和迭代的(interative)
在遞歸方式中,解析器向名稱服務器發送關于特定域名信息的遞歸查詢請求。被查詢的名稱服務器必須負責回應對方所查詢的數據,如果查詢的數據類型不存在或租指定的域名不存在,就返回一個錯誤狀態。名稱服務器不能只是將查詢指向另一個名稱服務器,因為這是遞歸查詢
2.6.3 迭代
迭代解析中,名稱服務器之間將它所知道的最佳答案告訴查詢者。它本身不再需要額外的查詢。
2.6.4 如何選擇權威名稱服務器
BIND名稱服務器使用一種稱為往返時間(roundtrip, RTT)的度量方式來對同一區域中的名稱服務器進行選擇。
2.6.5名稱解析的完整過程
2.7.1 生存時間
生存時間就是名稱服務器允許數據在緩存中存放的時間。生存時間一到期,名稱服務器就丟棄原有的緩存數據并從權威名稱服務器獲取新的數據。
?
第三章? 從哪兒開始呢?
3.1 獲得bind
下載地址:
http://ftp.isc.org/isc/bind/9.15.4/
nslookup命令用于查詢DNS的記錄,查看域名解析是否正常,在網絡故障的時候用來診斷網絡問題
nslookup domain [dns-server]3.2.1 注冊員和注冊機構
注冊機構(registry):是負責維護頂級域(實際上是區域)的數據文件的組織,這些數據文件包括了頂級域中各個子域的授權信息。
在目前的Internet結構下,一個給定的頂級域只能有一個注冊機構
注冊員(registrar): 扮演著客戶與注冊機構之間橋梁的角色,提供注冊和增值服務。
注冊(Registration):是某個客戶告訴注冊員,自己將使用哪個名稱服務器來管理被授權的子域以及提供聯絡和計費信息的過程。
3.2.2
whois 服務也能幫助弄明白某個域的用途
3.23
子網絡(subnetwork)
子網(subnet)
CIDR(Classless Inter-Domain Routing, 讀作“cider”) : 無類域間路由
顧名思義,CIDR沒有采用舊的A類,B類和C類網絡的命名方法。它不再用1個字節、2個或3個字節來作為網絡編號,分配者可以使用IP地址中任何相鄰位的數字作為網絡編號。
?
第四章? 建立bind
?4.2 建立區域數據
名稱到地址(name-to-address) 的查詢被稱作正向解析(forward mapping)
地址到名稱(address-to-name)的查詢被稱作逆向解析(reverse mapping)
每個網絡都擁有自己的逆向解析數據文件
4.2.1 區域數據文件
區域數據文件中的大部分條目被稱為DNS資源記錄(DNS resource record),DNS 查詢是不區分大小寫的。
區域數據文件中資源記錄的順序如下:
SOA記錄: 指明該區域的權威
NS 記錄: 列出該區域的名稱服務器
Other 記錄: 有關該區域中主機的數據
本章將會提到的其他記錄包括以下三個:
A : 名稱到地址的映射
PTR: 地址到名稱的映射
CNAME: 規范名稱(將別名映射到規范名稱)
4.2.3 設置區域的默認TTL
查詢BIND的版本信息: named -v
4.2.4 SOA 記錄
root@cdndev:/usr/local/bind-9.15.4/sbin# dig 126.com; <<>> DiG 9.15.4 <<>> 126.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3550 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4000 ;; QUESTION SECTION: ;126.com. IN A;; ANSWER SECTION: 126.com. 112 IN A 123.126.96.210;; Query time: 2 msec ;; SERVER: 10.246.101.34#53(10.246.101.34) ;; WHEN: Sat Oct 12 10:35:35 CST 2019 ;; MSG SIZE rcvd: 52上面的
IN代表Internet, 是一種數據類(class)
A: 代表地址(address)
?
4.2.5 NS記錄
NS 記錄(nameserver)
這些記錄指明了movie.edu 區域有兩個名稱服務器。這兩個名稱服務器分別運行在主機toystory.movie.edu和wormhole.movie.edu
4.2.6 地址和別名記錄
4.3 建立bind 配置文件
默認情況下,bind 的配置文件路徑為/etc/named.conf
4.4.2 @ 符號
如果一個域名和來源相同的話,那么該域名就可以被表示為:@
這最常出現在區域數據文件的SOA記錄中。
4.6.1 BIND 9 工具
named-checkconf :? 用來檢查配置文件的語法錯誤,默認檢查/etc/named.conf 文件
named-checkzone : 用來檢查區域文件的語法錯誤
4.7.1 啟動名稱服務器
/usr/local/bind-9.15.4/sbin/named -c conf-file4.8 運行一個slave 名稱服務器
primary名稱服務器和slave名稱服務器的區別
最關鍵的區別在于服務器從哪里獲取數據的。
primary名稱服務器是從區域數據文件中讀取數據的。而slave名稱服務器則是通過網絡從其他名稱服務器那里加載數據的。這個過程被稱作區域傳輸(zone transfer)
slave 名稱服務器不僅可以通過primary名稱服務器加載區域數據,還能通過其他的slave名稱服務器加載區域數據。
slave名稱服務器的最大好處在于:對于一個區域只需維護一份區域數據文件,也就是primary名稱服務器上的那份文件。不用擔心這些名稱服務器之間的文件同步問題。
4.8.1 建立
啟動slave名稱服務器的命令也是
/usr/local/bind-9.15.4/sbin/named4.8.3 SOA值
序號(serial number) : 這里選擇“1”這個邏輯上的起點作為起始序號。很多時候采用日期格式YYYYMMDDNN來表示。YYYY代表年份,MM代表月份,DD代表天,而NN代表當日區域數據被修改的次數。
當slave名稱服務器聯系其master服務器以獲取區域數據時,會首先請求相關數據的序號。如果slave中該區域的序號比master服務器的小,就表示slave的區域數據過時了。在這種情況下,slave就會下載一份新的區域數據副本。
接下來的4個字段指定了四種時間間隔,默認單位是秒
refresh (更新): 更新間隔時間(refresh interval)用來告知區域的slave名稱服務器,間隔多長時間檢查一次區域的數據是否有更新。需要注意的是,這個功能會對系統負載造成影響。
retry (重試) : 如果slave服務器在更新間隔時間到來后無法訪問其master名稱服務器(主機可能宕機了), 它就會開刪每隔一個重試間隔時間(retry interval)就嘗試重新連接一次。
expire(過期): 如果slave名稱服務器在過期時間到來時仍無法聯系到其master名稱服務器,則slave就會使該區域失效。使一個區域失效意味著salve將不再回答對于該區域的查詢。本質上,這個字段的意義在于:在某個時刻,數據變得太陳舊了,與其提供陳舊的數據還不如不提供的好。
negative caching TTL(否定緩存TTL):TTL代表著生存時間(time to live), 這個值使用于所有來自該區域權威名稱服務器的否定響應。
RFC1537 建議頂級名稱服務器采用如下數值:
第五章 DNS和電子郵件
5.1 MX記錄
DNS使用單一類型的資源記錄來實現增強的郵件路由,那就是MX記錄。
MX記錄:
郵件程序應該把郵件發往優先值最低的郵件交換器,最優先考慮的郵件交換器是優先值最小的。因為優先值是個無符號整數,所有就把“最好”的郵件交換器的優先值設為0.
如果發往優先級最高的郵件交換器的郵件發送失敗,那么郵件程序會按照優先值由小到大的順序,嘗試把郵件發往次優先的郵件交換器。
5.4 MX算法
為了避免路由環路的發生,郵件程序在決定向哪里發送消息前,會先丟棄某些MX記錄。郵件程序會根據優先值對MX記錄列表進行分類,并在其中查找正在運行的主機上的規范域名列表。如果本地主機本身就是一個郵件交換器,那么郵件程序會把代表它本身的那個MX記錄以及所有大于或等于其優先值(也就是優先級相同或者更低的)MX記錄都刪掉。這樣做可以避免郵件程序把消息發送給自己,或是發送給離最終目的地“更遠”的郵件程序。
5.5.1 發件人策略框架
Sender Policy Framework, SPF
它和MX記錄的作用有點相反: MX記錄告訴郵件程序將目的地為特定域名的郵件發往特定的郵件服務器。而SPF信息告訴郵件程序哪些郵件服務器被認可發送地址為特定域名的郵件。
TXT 示例:
特定記錄數據開頭的v=spf1標簽表示這個TXT記錄是一個SPF記錄。
SPF記錄中的4個限定詞:
+ 通過, 相匹配的郵件程序是一個有效的發件人
-? 不通過,?相匹配的郵件程序不是一個有效的發件人
~ 軟故障???相匹配的郵件程序可能不是一個有效的發件人,因此該消息應當被仔細檢查
? 中立, 無效果
-all, 告訴郵件程序應當拒絕(不通過)其他所有發件人的oreilly.com 郵件
SPF TXT 記錄常用機制列表
a? 指定一個郵件服務器的域名,允許此郵件服務器從其地址發送來自于所有者域名的電子郵件
mx? 指定一個域名, 允許其郵件交換器發送來自于所有者域名的電子郵件
ip4? 指定一個郵件服務器的ipv4 地址,允許此郵件服務器發送來自于所有者域名的電子郵件。也可以通過CIDR標記法來指定一個網絡。注意:網絡編號的四個字節組必須全部指定
ipv6 :??指定一個郵件服務器的ipv6 地址,?允許此郵件服務器發送來自于所有者域名的電子郵件。
ptr : 要求發送郵件的服務器的地址上必須存在一個PTR記錄。該PTR記錄必須將地址映射到某個域名,且該域名必須以TXT記錄中的所有者字段的域名結尾,或以冒號后所指定的參數結尾。
第六章? 配置主機
?
?
第12章? nslookup 和dig
12.2 交互式與非交互式
要進入交互式會話,只需輸入nslookup
[root@httpdns ~]# nslookup >退出時,輸入^D (ctrl+D )
對于非交互式查詢,把要查詢的名稱放在命令行里:
[root@httpdns ~]# nslookup headline.m.163.com. Server: 10.246.101.34 Address: 10.246.101.34#53Non-authoritative answer: headline.m.163.com canonical name = headline.m.163.com.wsglb0.com. Name: headline.m.163.com.wsglb0.com Address: 114.230.207.117 Name: headline.m.163.com.wsglb0.com Address: 219.146.68.13 Name: headline.m.163.com.wsglb0.com Address: 61.147.227.96 Name: headline.m.163.com.wsglb0.com Address: 61.164.210.25 Name: headline.m.163.com.wsglb0.com Address: 183.146.213.212 Name: headline.m.163.com.wsglb0.com Address: 122.228.24.221 Name: headline.m.163.com.wsglb0.com Address: 115.223.16.18312.3 選項設置
[root@httpdns ~]# nslookup > set all Default server: 10.246.122.34 Address: 10.246.122.34#53 Default server: 10.246.122.33 Address: 10.246.122.33#53 Default server: 10.246.39.33 Address: 10.246.39.33#53Set options:novc nodebug nod2search recursetimeout = 0 retry = 3 port = 53querytype = A class = INsrchlist = cn.net.ai/n.ai.com.test >[no]debug : 默認情況下,排錯功能是關閉的。如果它被開啟,名稱服務器會顯示超時并顯示回應信息。
[no]search : 默認情況下,如果名稱后面沒有點號,nslookup 會在名稱后面加上搜索列表里的域名(srchlist)
[no]recurse : nslookup 默認為發送遞歸查詢。這需要將查詢信息中的recursion-desired 位設置為1.
[no] vc : nslookup 默認會使用UDP數據包而不是TCP發送查詢。大部分BIND解析器通過UDP發送查詢。
port=53 : 名稱服務器監聽在53端口上。
querytype=A :? 默認情況下,nslookup 查找A資源記錄類型
class=IN : 只有一種類型Internet(IN)
timeout=5?: 如果名稱服務器在5秒內沒有響應,nslookup 會重新發送查詢,并將超時時間加倍
retry=4 : 發送查詢4次才放棄。每次嘗試后,超時時間值都會加倍
?srchlist=cn.net.ai/n.ai.com.test : 如果search選項是打開的,這些域名添加到結尾不是以點號結束的名稱上。這些域名按順序列出以便他們被重試,并用反斜杠分隔。
12.5.1 查找不同類型的記錄
默認的,nslookup 會為域名查找地址,或者為地址查找域名
[root@httpdns ~]# nslookup interface.music.163.com Server: 10.246.122.34 Address: 10.246.122.34#53[root@httpdns ~]# nslookup 59.111.160.197 Server: 10.246.122.34 Address: 10.246.122.34#53** server can't find 197.160.111.59.in-addr.arpa.: NXDOMAIN?
?
?
?
p127
?
?
?
?
總結
以上是生活随笔為你收集整理的DNS 与BIND(第五版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSON、Protobuf、Thrift
- 下一篇: DNS 专有名称