本文包括理解 DNS 所需的基礎知識及 Linux DNS 服務器的安裝、配置和維護具體操作相關(guān)知識。 一、DNS域名結(jié)構(gòu)與域名服務器域名系統(tǒng)DNS(Domain Name System)是因特網(wǎng)使用的命名系統(tǒng),用來把便于人們使用的機器名字轉(zhuǎn)換成為IP地址。域名系統(tǒng)其實就是名字系統(tǒng)。為什么不叫“名字”而叫“域名”呢?這是因為在這種因特網(wǎng)的命名系統(tǒng)中使用了許多的“域(domain)”,因此就出現(xiàn)了“域名”這個名詞。“域名系統(tǒng)”明確地指明這種系統(tǒng)是應用在因特網(wǎng)中。1、域名結(jié)構(gòu) 在了解DNS服務器之前,需要先了解因特網(wǎng)上的域名空間結(jié)構(gòu),具體如下圖所示: 頂級域名是域名的最后一個部分,即是域名最后一點之后的字母,例如在http:// 這個域名中,頂級域是.com(或.COM),大小寫視為相同。 二級域名是域名的倒數(shù)第二個部分,例如在http:// 這個域名中,二級域名是example。以此類推。 2、域名服務器 因特網(wǎng)上的DNS服務器按照層次安排,根據(jù)不同層次的域名服務器所起的作用,可以把域名服務器分為4種不同的類型。 【根域名服務器】 最高層次的域名服務器(就好像國家總理一樣),也是最重要的域名服務器。全球有13個根域名服務器名稱,分別是(它們是按照字母排列命名的):
當然,并不是一個名字對應一臺物理服務器的地址,一個根服務器的名字可以作為入口對應一組服務器集群來提供域名解析服務。 【頂級域名服務器】 就好像國家總理下面的各個省長,管轄省級單位。在DNS中,它們負責管理在該頂級域名服務器注冊的下一級域名(二級域名)。所有頂級域名服務器的名稱和IP地址是在根服務器注冊的,也就是說,根域名服務器知道所有的頂級域名服務器的名稱和IP地址。 【 權(quán)威域名服務器】 負責一個區(qū)的域名服務器,就好像省長以下的那些市長、鎮(zhèn)長、鄉(xiāng)長等行政官。頂級域名服務器也可以算作是權(quán)威域名服務器,只不過由于其特殊性,我們專門把它劃分為一類。因此權(quán)威域名服務器通常是指頂級域名以下的管理二級、三級、四級等域名的服務器。 上面三種服務器的關(guān)系可以用這張圖表示: 【本地域名服務器】 這類服務器不屬于上面的層次結(jié)構(gòu),當一個主機(個人電腦)發(fā)出DNS請求時,查詢請求就被發(fā)送到本地域名服務器,本地域名服務器負責回答這個查詢,或者代替主機向域名空間中不同層次的權(quán)威域名服務器查詢,再把查詢的結(jié)果返回給主機。 下面的圖示表示了一個域名的解析過程以及各個類型的域名服務器所處的位置。 3、為什么要使用DNS服務器 域名服務器提供了從域名到IP地址的解析服務,因特網(wǎng)上的域名數(shù)量極大,不可能所有的域名信息都保存在一個域名服務器中,也不能上述每個節(jié)點都采用一個域名服務器。在實際的公網(wǎng)DNS系統(tǒng)中,域名服務器采用劃分區(qū)的方式來管理。 一個服務器所負責管轄的范圍叫做區(qū)(zone),如果我們把域名空間結(jié)構(gòu)中的根比作國家,頂級域名比作省級行政單位,二級域名看作是市級單位、三級、四級看作是鎮(zhèn)和鄉(xiāng),那么自然地,我們會想到管轄國家的是總理,管轄省級單位的是省長,下面還有市長、鎮(zhèn)長等等。 假設一個域http:// 的層次結(jié)構(gòu)如圖分布。 如果采用(a)的方式,那么整個從abc這個節(jié)點以下的子樹成為一個區(qū),它們由一個(通常是1組)域名服務器管理,就好像http:// 是一個北京市,下面所有事務都有北京市長說了算; 如果采用(b)的方式,那么abc節(jié)點以下的字數(shù)分成了兩個區(qū):x節(jié)點以下的部分的子樹和y節(jié)點以下的子樹,這兩棵子樹分別有x和y對應的域名服務器管理,就好像http:// 是一個福建省,x是福州市,y是廈門市,福建省的省長只管理福州市和廈門市的市長,但不會直接管理福州市和廈門市以下的單位。福州市和廈門市以下的單位分別給福州市市長和廈門市市長來管轄。 像這種把一個域中的一部分子樹分給另一個域名服務器管轄,叫做“授權(quán)委托”,做了“授權(quán)委托”以后的域名服務器很顯然管理的范圍就小了,它的子節(jié)點由被委任的下一級域名服務器管理了。 因特網(wǎng)上的域名結(jié)構(gòu)呈樹狀分布,因此DNS服務器也是對應的樹形結(jié)構(gòu),每一個DNS服務器能夠提供部分域名(它管轄的域名)到IP地址的解析。 4、DNS查詢 查詢方式 遞歸查詢:客戶機向自己的DNS服務器請求解析的方式 迭代查詢:服務器向服務器查詢的方式 主機向本地域名服務器的查詢一般都是采用遞歸查詢。所謂遞歸查詢就是:如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那么本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續(xù)發(fā)出查詢請求報文(即替主機繼續(xù)查詢),而不是讓主機自己進行下一步查詢。因此,遞歸查詢返回的查詢結(jié)果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址。 本地域名服務器向根域名服務器的查詢的迭代查詢。迭代查詢的特點:當根域名服務器收到本地域名服務器發(fā)出的迭代查詢請求報文時,要么給出所要查詢的IP地址,要么告訴本地服務器:“你下一步應當向哪一個域名服務器進行查詢”。然后讓本地服務器進行后續(xù)的查詢。根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器,讓本地域名服務器再向頂級域名服務器查詢。頂級域名服務器在收到本地域名服務器的查詢請求后,要么給出所要查詢的IP地址,要么告訴本地服務器下一步應當向哪一個權(quán)限域名服務器進行查詢。最后,知道了所要解析的IP地址或報錯,然后把這個結(jié)果返回給發(fā)起查詢的主機。 下圖給出了這兩種查詢的差別 DNS解析的順序:(由/etc/nsswitch.conf決定) 1. 本機緩存 2. 本機/etc/hosts文件 a) 格式:IP FQDN Alais 3. 指定的DNS服務器緩存 a) 清空緩存:rhdc flush 4. 指定的DNS服務器(/etc/resolv.conf) a) 格式: # search # nameserver 202.103.24.68 # nameserver 202.103.149.50 DNS查詢命令 1. gethostip a)是syslinux包的組成部分 b)通過hosts文件和DNS解析主機名到IP c)把IP計算成8位的16進制在PXE中有特殊用途 2. host a)僅通過DNS查詢 b)查詢主機名到IP的解析 3. nslookup a)windows的解析工具,linux中通用,目前較少使用 b)提供簡單的正反和反向解析查詢 4. dig a)linux中功能強大的查詢工具,可以查詢更加詳細的信息,使用最廣泛 b)可以追蹤到非權(quán)威的DNS 5、DNS 服務器的類型 一共有三種 DNS 服務器。 主 DNS 服務器 這些服務器上存放了特定域名的配置文件,并且基于此權(quán)威地規(guī)定了特定域名的地址。主 DNS 服務器知道全部在它管轄范圍的主機和子域名的地址。 輔助 DNS 服務器 這些服務器作為主 DNS 服務器的備份,也承擔一定負載。主服務器知道輔助 DNS 服務器的存在,并且會向他們推送更新。 緩存 DNS 服務器 這些服務器上不存放特定域名的配置文件。當客戶端請求緩存服務器來解析域名時,該服務器將首先檢查其本地緩存。如果找不到匹配項便會詢問主服務器。接著這條響應將被緩存起來。您也可以輕松地將自己的系統(tǒng)用作緩存服務器。 二、Linux DNS 服務器安裝、配置和維護 1、搭建 Linux DNS 服務器 Linux 下有很多實現(xiàn)了 DNS 功能的包,不過我們只關(guān)注 BIND DNS 服務器。它用于世界上大多數(shù) DNS 服務器。 如果你在使用基于 Red Hat 發(fā)行版的 Linux,比如 CentOS,可以像這樣安裝:$ dnf -y install bind 如果你使用基于 Debian 的操作系統(tǒng),比如 Ubuntu:$ apt-get install bind9 安裝完成之后就可以啟動它并讓它在計算機啟動的時候一并啟動起來。 $ systemctl start named $ systemctl enable named 2、配置 BIND 這個服務使用 /etc/named.conf 作為配置文件。 BIND 在那個文件中使用像下面這樣的一些語句:
在 options 語句中可以看到 BIND 的工作目錄在 /var/named。 zone 語句可用于定義 DNS 區(qū)域,比如域名 google.com,它包含子域名 mail.google.com 和 analytics.google.com。 上述三個域名 (主域名和子域名) 都有一個由 zone 語句定義的區(qū)域。 3、定義一個主域服務器 我們知道 DNS 服務器類型有主域名服務器、輔助域名服務器和緩存域名服務器。不同于緩存域名服務器,主域名服務器和輔助域名服務器在應答過程中是處于同等地位的。 在 /etc/named.conf 的配置文件中,你可以使用如下語法定義一個主域服務器: zone '' { type master; file .db }; 包含主要區(qū)域信息的文件存放在 /var/named 目錄下,從 options 可知,這是一個工作目錄。 注意:軟件服務器或者托管面板會根據(jù)你的域名自動為你創(chuàng)建主域服務器信息的文件名,因此如果你的域名是 example.org,那么你主域服務器信息的文件就為 /var/named/example.org.db。 類型為 master,也就是說這是一個主域服務器。 4、定義一個輔助域服務器 同定義一個主域服務器一樣,輔助域服務器的定義稍微有些變化: zone '' { type slave; masters IP Address list; ; file .db }; 對于輔助域服務器來說,它的域名和主域服務器是一樣的。上述語法里的的 slave 類型表示這是一個輔助域服務器,“masters IP Address list” 表示輔助域服務器中區(qū)域文件內(nèi)的信息都是通過主域服務器中區(qū)域文件內(nèi)的信息復制過來的。 5、定義一個緩存服務器 即使你已經(jīng)配置了主域或者輔助域服務器,你仍有必要(不是必須)定義一個緩存服務器,因為這樣你可以減少 DNS 服務器的查詢次數(shù)。 在定義緩存服務器之前,你需要先定義三個區(qū)域選擇器,第一個: zone '.' IN {type hint;file 'root.hint';}; zone '.' IN {type hint;file 'root.hint';}; zone '.' IN {type hint;file 'root.hint';}; zone 'localhost' IN {type master;file 'localhost.db';}; 定義第三個區(qū)域是為了反向查找到本地主機。這種反向查找是把本地的 IP 地址指向本地主機。 zone '0.0.127.in-addr.arpa' IN { type master; file '127.0.0.rev'; }; 把這三個區(qū)域信息放到 / etc/named.conf 文件里,你的系統(tǒng)就可以以緩存服務器來工作了。但是如何引用類似 .db, localhost.db, 和 127.0.0.rev 這些文件中的內(nèi)容呢? 這些文件包含具有某些選項的每個區(qū)域的 DNS 記錄類型。那么,這些 DNS 記錄類型是什么以及它們是如何寫的? 6、DNS 記錄類型 數(shù)據(jù)庫文件包含諸如 SOA、NS、A、PTR、MX、CNAME 和 TXT 在內(nèi)的記錄類型。 我們看看每一種類型都是如何記錄的吧。 SOA:起始授權(quán)機構(gòu)記錄 SOA 記錄按如下形式開始描述一個站點的 DNS 條目: . 86400 IN SOA ns1.. mail.. ( 2017012604 ;serial 86400 ;refresh, seconds 7200 ;retry, seconds 3600000 ;expire, seconds 86400 ;minimum, seconds ) 第一行以域名 開始,以句號結(jié)束——該語句和 / etc/named.conf 文件中的區(qū)域定義是一致的。我們要始終記得,DNS 配置文件是極其挑剔的。 IN 告訴域名服務器:這是一條網(wǎng)絡記錄。 SOA 告訴域名服務器:這是一條起始授權(quán)機構(gòu)記錄。 ns1.. 是該文件所在域的域名服務器的完全合格域名(FQDN: Fully Qualified Domain Name)。 mail.host.com. 是域管理員的郵箱地址。你會發(fā)現(xiàn)這個郵箱地址沒有 “@” 標志,而是被句號所取代,并且末尾還有一個句號。 第 2 行是一個序列碼,它被用來告訴域名服務器文件是什么時候升級的。因此,如果你對區(qū)域碼做了變更,你必須對這個序列碼進行遞增。這個序列碼的格式是 YYYYMMDDxx ,其中的 xx 是從 00 開始的。 第 3 行是每秒刷新率。這個值被用來告訴第二個域名服務器查詢主服務器中的記錄是否已經(jīng)被更新的頻率。 第 4 行是每秒重試的頻率。如果第二個服務器多次嘗試連接主域名服務器來進行更新檢測,但無法連接上的時候,第二個服務器就會在每秒內(nèi)重試指定的數(shù)值次數(shù)。 第 5 行是超時指示。其目的是為了第二個服務器能將區(qū)域數(shù)據(jù)緩存下來。這個值告訴這些服務器如果它們不能連接到主服務器來進行更新,那么它們就會在這個指定數(shù)值秒數(shù)之后拋棄這個值。 第 6 行告訴緩存服務器,如果它們不能連接到主域名服務器時,它們應該在超時前等待多久。 NS: Name Server Records(名稱服務器記錄) NS 記錄用于指定哪個名稱服務器維護該域的記錄。 你可以這樣編寫的 NS 記錄: IN NS ns1.. IN NS ns2.. 并不需要有 2 個 NS 記錄,但是通常偏好有備份名稱服務器。 A 和 AAAA: Address Records(地址記錄) A 記錄用于提供從主機名到 IP 地址的映射 support IN A 192.168.1.5。 如果你在地址為 192.168.1.5 上的 support. 上有一個主機,你可以像上面的例子那樣輸入。 請注意,我們所寫的主機并沒有句號。 PTR: Pointer Records(指針記錄) PTR 記錄用于執(zhí)行反向名稱解析,允許某人指定 IP 地址然后找出對應的主機名。 這與 A 記錄的功能相反:192.168.1.5 IN PTR support.. 在這里,我們鍵入具有點號的完整主機名。 MX: Mail Exchange Records(郵件交換記錄) MX 記錄告訴其他站點關(guān)于你所在域的郵件服務器地址:. IN MX 10 mail. 當然這個域以句號結(jié)束。數(shù)字 10 是郵件服務器的重要性標志,如果你擁有多個郵件服務器,其中較小的數(shù)字不太重要。 CNAME: Canonical Name Records(權(quán)威名稱記錄) CNAME 記錄允許你為主機名創(chuàng)建別名。當你想提供一個易于記住的名稱時,這很有用。 假設某個站點具有一個主機名為 whatever-bignameis. 的 Web 服務器,并且由于系統(tǒng)是 Web 服務器,因此可以為主機創(chuàng)建一個名為 www 的 CNAME 記錄或者別名。 你可以創(chuàng)建名為 www. 的域名創(chuàng)建 CNAME 記錄: whatever-bignameis IN A 192.168.1.5 www IN CNAME whatever-bignameis 第一行通知 DNS 服務器關(guān)于別名的位置。第二行創(chuàng)建一個指向 www 的別名。 TXT 記錄 您可以將任何信息存儲到 TXT 記錄中,例如你的聯(lián)系方式或者你希望人們在查詢 DNS 服務器時可獲得的任意其他信息。 你可以這樣保存 TXT 記錄:. IN TXT ” YOUR INFO GOES HERE”. 此外,RP 記錄被創(chuàng)建為對 host 聯(lián)系信息的顯式容器:. IN RP mail.. 。 7、DNS TTL 值 在 / etc/named.conf 文件的頂部,這里有一個 $TTL 條目。 該條目告訴 BIND 每個單獨記錄的 TTL 值(time to live,生存時間值)。 它是以秒為單位的數(shù)值,比如 14,400 秒(4 個小時),因此 DNS 服務器最多緩存你的域文件 4 個小時,之后就會向你的 DNS 服務器重新查詢。 你可以降低這個值,但是默認值通常是合理的。除非你知道你正在做什么。 8、捕獲配置錯誤 當您寫入域文件時,也許您忘記了一個句號或空格或其他任意錯誤。 你可以從日志診斷 Linux DNS 服務器錯誤。BIND 服務通過 / var/log/messages 上的錯誤,可以使用 tail 命令來查看實時錯誤日志,須使用 - f 選項:$ tail -f /var /log/messages。 因此,當你編寫域文件或修改 / etc/named.config 并重新啟動服務時,顯示錯誤之后,你可以從日志中輕松識別錯誤類型。 9、Host 命令 在你成功添加或修改記錄后,可以使用 host 命令查看主機是否正確解析。 host 命令允許你將主機名解析為 IP 地址:$ host 。 此外,你可以執(zhí)行反向查找:$ host 192.168.1.5。 你可以 this 在此篇文章 https:///linux-network-commands/ 中查看更多關(guān)于 host 和 dig 命令的信息。 10、Whois 命令 whois 命令用于確定域名的所有權(quán)及其擁有者的 e-mail 地址和聯(lián)系電話:$ whois . 11、Rndc 命令 rndc 工具可用于安全地管理名稱服務器,因為與服務器的所有通信均通過數(shù)字簽名進行身份驗證。 此工具用于控制名稱服務器和調(diào)試問題。你可以通過以下方式檢查 Linux DNS 服務器的狀態(tài):$ rndc status。 此外,如果你更改任何域 (zone) 文件,您可以重新加載服務,而無須重啟命名服務:$ rndc reload 。 在這里,我們重新加載 域文件。你可以重新加載所有域:$ rndc reload。 或者你可以添加新的域或更改服務的配置。你可以重新加載配置,如下所示:$ rndc reconfig。 12、Linux DNS 解析器 我們已經(jīng)知道 Linux DNS 服務器的工作原理以及如何配置它。另一部分當然是與 DNS 服務器交互的(正在與 DNS 服務器通信以將主機名解析為 IP 地址的)客戶端。 在 Linux 上,解析器位于 DNS 的客戶端。要配置解析器,可以檢查 / etc/resolv.conf 這個配置文件。 在基于 Debian 的發(fā)行版上,可以查看 / etc/resolvconf/resolv.conf.d / 目錄。 /etc/resolv.conf 文件中包含客戶端用于獲取其本地 DNS 服務器地址所需的信息。 第一個表示默認搜索域,第二個表示主機名稱服務器 (nameserver) 的 IP 地址。 名稱服務器行告訴解析器哪個名稱服務器可使用。只要你的 BIND 服務正在運行,你就可以使用自己的 DNS 服務器。 |
|
來自: yi321yi > 《網(wǎng)絡》