每個(gè) IP 地址都可以有一個(gè)主機(jī)名,主機(jī)名由一個(gè)或多個(gè)字符串組成,字符串之間用小數(shù)點(diǎn)隔開(kāi)。有了主機(jī)名,就不要死記硬背每臺(tái) IP 設(shè)備的 IP 地址,只要記住相對(duì)直觀有意義的主機(jī)名就行了。這就是 DNS 協(xié)議所要完成的功能。
今天我們將討論DNS服務(wù)器,特別是Linux DNS服務(wù)器,及其如何安裝、配置和維護(hù)它。
/etc/hosts文件
在沒(méi)有DNS服務(wù)器的情況下,每個(gè)系統(tǒng)在本地網(wǎng)絡(luò)上保留其主機(jī)名和相應(yīng)IP地址列表的副本是合理的——特別是在沒(méi)有互聯(lián)網(wǎng)連接的小型站點(diǎn)上。
在Linux系統(tǒng)中,這個(gè)列表就是/etc/hosts文件。 即使你沒(méi)有DNS服務(wù)器或DNS服務(wù)器不可用,該文件也可以使用/etc/hosts文件將IP地址轉(zhuǎn)換為名稱。
也許你已經(jīng)有DNS服務(wù)器了,但你也會(huì)因?yàn)槠渌蚨氡A暨@個(gè)文件。例如,系統(tǒng)可能需要在向外部查詢之前在本地查找DNS服務(wù)器的IP地址;這意味著系統(tǒng)在查詢DNS服務(wù)器之前先檢索該文件,如果查找到對(duì)應(yīng)的域則無(wú)須查詢?nèi)魏蜠NS服務(wù)器直接將其轉(zhuǎn)換為IP地址。
試試編輯下/etc/hosts文件,并添加以下信息:127.0.0.1 google.com.
然后,返回你的瀏覽器,輸入google.com,看看結(jié)果如何。如果你的系統(tǒng)上安裝了Apache并且本地主機(jī)正在運(yùn)行,瀏覽器會(huì)顯示localhost的索引頁(yè),而不是Google頁(yè)面。
作為確認(rèn),你可以將google.com映射到任何網(wǎng)站的任何其他IP地址并查看結(jié)果。
因此這個(gè)文件所做的是將IP地址轉(zhuǎn)換成名字,但這僅僅是在同一互相連接的網(wǎng)絡(luò)下。 那么外部網(wǎng)絡(luò)和眾多系統(tǒng)的所有記錄是如何維護(hù)的呢?
每個(gè)人都需要維護(hù)自己的/etc/hosts文件并自己更新嗎?
更為穩(wěn)健的域名服務(wù)是DNS服務(wù)器。
域名
當(dāng)你訪問(wèn)網(wǎng)站時(shí),你可以輸入FQDN(Fully Qualified Domain Name,完全限定域名)或類似likegeeks.com或www.google.com的域名。在域名中從右到左的兩個(gè)點(diǎn)之間的每個(gè)文本依次是頂級(jí)域組件、二級(jí)域組件和三級(jí)域組件。
所以,com是頂級(jí)域名組件; google是二級(jí)域組件; 而www是三級(jí)域名組件。
實(shí)際上,當(dāng)你訪問(wèn)任何網(wǎng)站時(shí),瀏覽器會(huì)默認(rèn)在域的末尾添加一個(gè)不可見(jiàn)的點(diǎn),因此該域?qū)⑾駑ww.google.com.一樣。 該點(diǎn)被稱為根域。
該點(diǎn)是由一大堆稱為根域名服務(wù)器的特殊服務(wù)器管理的。截止這篇文章發(fā)表前,世界上有13個(gè)根域名服務(wù)器。 你可以把他們當(dāng)成互聯(lián)網(wǎng)的大腦 – 如果他們失效了,世界上就沒(méi)有互聯(lián)網(wǎng)了。
為什么是13呢? 因?yàn)槿绻澜绲哪程幍卣鹂赡軙?huì)破壞一個(gè)根服務(wù)器,所以其他的服務(wù)器可以繼續(xù)提供服務(wù)直到受影響的服務(wù)器重新上線。
這些根名稱服務(wù)器按字母順序命名,名稱如a.root-server.net、b.root-server.net等。
頂級(jí)域名 (或稱作一級(jí)域名 TLDs)
我們已經(jīng)見(jiàn)過(guò)頂級(jí)域名的組成部分,如 com。可以認(rèn)為,頂級(jí)域名為 DNS 命名空間提供分類組織。
頂級(jí)域名(TLD)根據(jù)地理或功能方面分為幾類。
截止本文撰寫(xiě)時(shí),網(wǎng)上有 800 多個(gè)頂級(jí)域名。
頂級(jí)域名類別有:
通用的頂級(jí)域名如:org,.com,.net,.gov,.edu 等等
國(guó)家代碼頂級(jí)域名如:.us,.ca等,分別對(duì)應(yīng)美國(guó)和加拿大的國(guó)家代碼
新的品牌頂級(jí)域名,允許組織創(chuàng)建最多 64 個(gè)字符的TLD,如:.linux,.microsoft,.companyname 等
基礎(chǔ)架構(gòu)頂級(jí)域名如:.arpa
子域名
當(dāng)你訪問(wèn)一個(gè)類似mail.google.com這樣的網(wǎng)站, 這里的mail就是google.com的子域名.
只有mail.google.com的名稱服務(wù)器知道他下面存在的所有主機(jī),所以Google會(huì)回復(fù)是否有一個(gè)叫mail的子域名。根名稱服務(wù)器對(duì)此并不知情。
DNS服務(wù)器的類型
一共有三種DNS服務(wù)器。
主DNS服務(wù)器
這些服務(wù)器上存放了特定域名的配置文件,并且基于此權(quán)威地規(guī)定了特定域名的地址。主DNS服務(wù)器知道全部在它管轄范圍的主機(jī)和子域名的地址。
輔助DNS服務(wù)器
這些服務(wù)器作為主DNS服務(wù)器的備份,也承擔(dān)一定負(fù)載。主服務(wù)器知道輔助DNS服務(wù)器的存在,并且會(huì)向他們推送更新。
緩存DNS服務(wù)器
這些服務(wù)器上不存放特定域名的配置文件。當(dāng)客戶端請(qǐng)求緩存服務(wù)器來(lái)解析域名時(shí),該服務(wù)器將首先檢查其本地緩存。如果找不到匹配項(xiàng)便會(huì)詢問(wèn)主服務(wù)器。接著這條響應(yīng)將被緩存起來(lái)。您也可以輕松地將自己的系統(tǒng)用作緩存服務(wù)器。
搭建 Linux DNS 服務(wù)器
Linux 下有很多實(shí)現(xiàn)了 DNS 功能的包,不過(guò)我們只關(guān)注 BIND DNS 服務(wù)器。它用于世界上大多數(shù) DNS 服務(wù)器。
如果你在使用基于 Red Hat 發(fā)行版的 Linux,比如 CentOS,可以像這樣安裝:$ dnf -y install bind
如果你使用基于 Debian 的操作系統(tǒng),比如 Ubuntu:$ apt-get install bind9
安裝完成之后就可以啟動(dòng)它并讓它在計(jì)算機(jī)啟動(dòng)的時(shí)候一并啟動(dòng)起來(lái)。
$systemctlstartnamed
$systemctlenablenamed
配置 BIND
這個(gè)服務(wù)使用/etc/named.conf作為配置文件。
BIND 在那個(gè)文件中使用像下面這樣的一些語(yǔ)句:
options: 用于全局 BIND 配置。
logging: 配置哪些需要記錄,哪些需要忽略。我推薦你看看Linux syslog server。
zone: 定義 DNS 區(qū)域。
include: 在named.conf中包含另一個(gè)文件。
在 options 語(yǔ)句中可以看到 BIND 的工作目錄在/var/named。
zone 語(yǔ)句可用于定義 DNS 區(qū)域,比如域名google.com,它包含子域名mail.google.com和analytics.google.com。
上述三個(gè)域名(主域名和子域名) 都有一個(gè)由 zone 語(yǔ)句定義的區(qū)域。
定義一個(gè)主域服務(wù)器
我們知道 DNS 服務(wù)器類型有主域名服務(wù)器、輔助域名服務(wù)器和緩存域名服務(wù)器。不同于緩存域名服務(wù)器,主域名服務(wù)器和輔助域名服務(wù)器在應(yīng)答過(guò)程中是處于同等地位的。
在/etc/named.conf的配置文件中,你可以使用如下語(yǔ)法定義一個(gè)主域服務(wù)器:
zone"likegeeks.com"{
typemaster;
filelikegeeks.com.db
};
包含主要區(qū)域信息的文件存放在/var/named目錄下,從 options 可知,這是一個(gè)工作目錄。
注意:軟件服務(wù)器或者托管面板會(huì)根據(jù)你的域名自動(dòng)為你創(chuàng)建主域服務(wù)器信息的文件名,因此如果你的域名是example.org,那么你主域服務(wù)器信息的文件就為/var/named/example.org.db。
類型為master,也就是說(shuō)這是一個(gè)主域服務(wù)器。
定義一個(gè)輔助域服務(wù)器
同定義一個(gè)主域服務(wù)器一樣,輔助域服務(wù)器的定義稍微有些變化:
zone"likegeeks.com"{
typeslave;
filelikegeeks.com.db
};
對(duì)于輔助域服務(wù)器來(lái)說(shuō),它的域名和主域服務(wù)器是一樣的。上述語(yǔ)法里的的slave類型表示這是一個(gè)輔助域服務(wù)器,“mastersIPAddresslist”表示輔助域服務(wù)器中區(qū)域文件內(nèi)的信息都是通過(guò)主域服務(wù)器中區(qū)域文件內(nèi)的信息復(fù)制過(guò)來(lái)的。
定義一個(gè)緩存服務(wù)器
即使你已經(jīng)配置了主域或者輔助域服務(wù)器,你仍有必要(不是必須)定義一個(gè)緩存服務(wù)器,因?yàn)檫@樣你可以減少DNS服務(wù)器的查詢次數(shù)。
在定義緩存服務(wù)器之前,你需要先定義三個(gè)區(qū)域選擇器,第一個(gè):
zone"."IN{
typehint;
file"root.hint";
};
zone"."IN{
typehint;
file"root.hint";
};
zone"."IN{
typehint;
file"root.hint";
};
zone"localhost"IN{
typemaster;
file"localhost.db";
};
定義第三個(gè)區(qū)域是為了反向查找到本地主機(jī)。這種反向查找是把本地的IP地址執(zhí)向本地主機(jī)。
zone"0.0.127.in-addr.arpa"IN{
typemaster;
file"127.0.0.rev";
};
把這三個(gè)區(qū)域信息放到/etc/named.conf文件里,你的系統(tǒng)就可以以緩存服務(wù)器來(lái)工作了。但是如何引用類似likegeeks.com.db,localhost.db, 和127.0.0.rev這些文件中的內(nèi)容呢?
這些文件包含具有某些選項(xiàng)的每個(gè)區(qū)域的DNS記錄類型。 那么,這些DNS記錄類型是什么以及它們是如何寫(xiě)的?
DNS記錄類型
數(shù)據(jù)庫(kù)文件包含諸如SOA、NS、A、PTR、MX、CNAME和TXT在內(nèi)的記錄類型。
我們看看每一種類型都是如何記錄的吧。
SOA:起始授權(quán)機(jī)構(gòu)記錄
SOA記錄按如下形式開(kāi)始描述一個(gè)站點(diǎn)的DNS條目:
example.com.86400INSOAns1.example.com.mail.example.com.(
2017012604;serial
86400;refresh,seconds
7200;retry,seconds
3600000;expire,seconds
86400;minimum,seconds
)
第一行以域名example.com開(kāi)始,以句號(hào)結(jié)束——該語(yǔ)句和/etc/named.conf文件中的區(qū)域定義是一致的。我們要始終記得,DNS配置文件是極其挑剔的。
IN 告訴域名服務(wù)器:這是一條網(wǎng)絡(luò)記錄。
SOA 告訴域名服務(wù)器:這是一條起始授權(quán)機(jī)構(gòu)記錄。
ns1.example.com. 是該文件所在域的域名服務(wù)器的完全合格域名(FQDN: Fully Qualified Domain Name)。
mail.host.com. 是域管理員的郵箱地址。你會(huì)發(fā)現(xiàn)這個(gè)郵箱地址沒(méi)有“@”標(biāo)志,而是被句號(hào)所取代,并且末尾還有一個(gè)句號(hào)。
第2行是一個(gè)序列碼,它被用來(lái)告訴域名服務(wù)器文件是什么時(shí)候升級(jí)的。因此,如果你對(duì)區(qū)域碼做了變更,你必須對(duì)這個(gè)序列碼進(jìn)行遞增。這個(gè)序列碼的格式是YYYYMMDDxx ,其中的 xx 是從 00 開(kāi)始的。
第3行是每秒刷新率。這個(gè)值被用來(lái)告訴第二個(gè)域名服務(wù)器查詢主服務(wù)器中的記錄是否已經(jīng)被更新的頻率。
第4行是每秒重試的頻率。如果第二個(gè)服務(wù)器多次嘗試連接主域名服務(wù)器來(lái)進(jìn)行更新檢測(cè),但無(wú)法連接上的時(shí)候,第二個(gè)服務(wù)器就會(huì)在每秒內(nèi)重試指定的數(shù)值次數(shù)。
第5行是超時(shí)指示。其目的是為了第二個(gè)服務(wù)器能將區(qū)域數(shù)據(jù)緩存下來(lái)。這個(gè)值告訴這些服務(wù)器如果它們不能連接到主服務(wù)器來(lái)進(jìn)行更新,那么它們就會(huì)在這個(gè)指定數(shù)值秒數(shù)之后拋棄這個(gè)值。
第6行告訴緩存服務(wù)器,如果它們不能連接到主域名服務(wù)器時(shí),它們應(yīng)該在超時(shí)前等待多久。
NS: Name Server Records(名稱服務(wù)器記錄)
NS記錄用于指定哪個(gè)名稱服務(wù)器維護(hù)該域的記錄。
你可以這樣編寫(xiě)的NS記錄:
INNSns1.example.com.
INNSns2.example.com.
并不需要有2個(gè)NS記錄,但是通常偏好有備份名稱服務(wù)器。
A和AAAA: Address Records(地址記錄)
A記錄用于提供從主機(jī)名到IP地址的映射support IN A 192.168.1.5。
如果你在地址為192.168.1.5上的support.example.com上有一個(gè)主機(jī),你可以像上面的例子那樣輸入。
請(qǐng)注意,我們所寫(xiě)的主機(jī)并沒(méi)有句號(hào)。
PTR: Pointer Records(指針記錄)
PTR記錄用于執(zhí)行反向名稱解析,允許某人指定IP地址然后找出對(duì)應(yīng)的主機(jī)名。
這與A記錄的功能相反:192.168.1.5 IN PTRsupport.example.com.
在這里,我們鍵入具有點(diǎn)號(hào)的完整主機(jī)名。
MX: Mail Exchange Records(郵件交換記錄)
MX記錄告訴其他站點(diǎn)關(guān)于你所在域的郵件服務(wù)器地址:example.com. IN MX 10 mail.
當(dāng)然這個(gè)域以句號(hào)結(jié)束。數(shù)字10是郵件服務(wù)器的重要性標(biāo)志,如果你擁有多個(gè)郵件服務(wù)器,其中較小的數(shù)字不太重要。
CNAME: Canonical Name Records(權(quán)威名稱記錄)
CNAME記錄允許你為主機(jī)名創(chuàng)建別名。當(dāng)你想提供一個(gè)易于記住的名稱時(shí),這很有用。
假設(shè)某個(gè)站點(diǎn)具有一個(gè)主機(jī)名為whatever-bignameis.example.com的Web服務(wù)器,并且由于系統(tǒng)是Web服務(wù)器,因此可以為主機(jī)創(chuàng)建一個(gè)名為www的CNAME記錄或者別名。
你可以創(chuàng)建名為www.example.com的域名創(chuàng)建CNAME記錄:
whatever-bignameisINA192.168.1.5
wwwINCNAMEwhatever-bignameis
第一行通知DNS服務(wù)器關(guān)于別名的位置。第二行創(chuàng)建一個(gè)指向www的別名。
TXT記錄
您可以將任何信息存儲(chǔ)到TXT記錄中,例如你的聯(lián)系方式或者你希望人們?cè)诓樵僁NS服務(wù)器時(shí)可獲得的任意其他信息。
你可以這樣保存TXT記錄:example.com. IN TXT ” YOUR INFO GOES HERE”.
此外,RP記錄被創(chuàng)建為對(duì)host聯(lián)系信息的顯式容器:example.com. IN RP mail.example.com. example.com。
DNS TTL值
在/etc/named.conf文件的頂部,這里有一個(gè)$TTL條目。
該條目告訴BIND每個(gè)單獨(dú)記錄的TTL值(time to live,生存時(shí)間值)。
它是以秒為單位的數(shù)值,比如14,400秒(4個(gè)小時(shí)),因此DNS服務(wù)器最多緩存你的域文件4個(gè)小時(shí),之后就會(huì)向你的DNS服務(wù)器重新查詢。
你可以降低這個(gè)值,但是默認(rèn)值通常是合理的。除非你知道你正在做什么。
捕獲配置錯(cuò)誤
當(dāng)您寫(xiě)入域文件時(shí),也許您忘記了一個(gè)句號(hào)或空格或其他任意錯(cuò)誤。
你可以從日志診斷Linux DNS服務(wù)器錯(cuò)誤。BIND服務(wù)通過(guò)/var/log/messages上的錯(cuò)誤,可以使用tail命令來(lái)查看實(shí)時(shí)錯(cuò)誤日志,須使用-f選項(xiàng):$ tail -f /var /log/messages。
因此,當(dāng)你編寫(xiě)域文件或修改/etc/named.config并重新啟動(dòng)服務(wù)時(shí),顯示錯(cuò)誤之后,你可以從日志中輕松識(shí)別錯(cuò)誤類型。
Host命令
在你成功添加或修改記錄后,可以使用host命令查看主機(jī)是否正確解析。
host命令允許你將主機(jī)名解析為IP地址:$ host example.com。
此外,你可以執(zhí)行反向查找:$ host 192.168.1.5。
你可以this在此篇文章中查看更多關(guān)于host和dig命令的信息。
Whois命令
whois命令用于確定域名的所有權(quán)及其擁有者的e-mail地址和聯(lián)系電話:$ whois example.com.
Rndc命令
rndc工具可用于安全地管理名稱服務(wù)器,因?yàn)榕c服務(wù)器的所有通信均通過(guò)數(shù)字簽名進(jìn)行身份驗(yàn)證。
此工具用于控制名稱服務(wù)器和調(diào)試問(wèn)題。 你可以通過(guò)以下方式檢查L(zhǎng)inux DNS服務(wù)器的狀態(tài):$ rndc status。
此外,如果你更改任何域(zone)文件,您可以重新加載服務(wù),而無(wú)須重啟命名服務(wù):$ rndc reload example.com。
在這里,我們重新加載example.com域文件。 你可以重新加載所有域:$ rndc reload。
或者你可以添加新的域或更改服務(wù)的配置。 你可以重新加載配置,如下所示:
$ rndc reconfig。
Linux DNS解析器
我們已經(jīng)知道Linux DNS服務(wù)器的工作原理以及如何配置它。另一部分當(dāng)然是與DNS服務(wù)器交互的(正在與DNS服務(wù)器通信以將主機(jī)名解析為IP地址的)客戶端。
在Linux上,解析器位于DNS的客戶端。要配置解析器,可以檢查/etc/resolv.conf這個(gè)配置文件。
在基于Debian的發(fā)行版上,可以查看/etc/resolvconf/resolv.conf.d/目錄。
/etc/resolv.conf文件中包含客戶端用于獲取其本地DNS服務(wù)器地址所需的信息。
第一個(gè)表示默認(rèn)搜索域,第二個(gè)表示主機(jī)名稱服務(wù)器(nameserver)的IP地址。
名稱服務(wù)器行告訴解析器哪個(gè)名稱服務(wù)器可使用。 只要你的BIND服務(wù)正在運(yùn)行,你就可以使用自己的DNS服務(wù)器。
使用Linux DNS服務(wù)器非常簡(jiǎn)單。 我希望你發(fā)現(xiàn)這篇文章很有用,并且很容易理解。
-
Linux
+關(guān)注
關(guān)注
87文章
11212瀏覽量
208721 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8963瀏覽量
85086 -
瀏覽器
+關(guān)注
關(guān)注
1文章
1009瀏覽量
35230
原文標(biāo)題:Linux DNS 服務(wù)器安裝、配置和維護(hù)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論