歡迎光臨
每天分享高質量文章

Linux DNS 服務器安裝、配置和維護

每個 IP 地址都可以有一個主機名,主機名由一個或多個字串組成,字串之間用小數點隔開。有了主機名,就不要死記硬背每台 IP 設備的 IP 地址,只要記住相對直觀有意義的主機名就行了。這就是 DNS 協議所要完成的功能。

今天我們將討論DNS服務器,特別是Linux DNS服務器,及其如何安裝、配置和維護它。

 

/etc/hosts檔案

 

在沒有DNS服務器的情況下,每個系統在本地網絡上保留其主機名和相應IP地址串列的副本是合理的——特別是在沒有互聯網連接的小型站點上。

 

在Linux系統中,這個串列就是/etc/hosts檔案。 即使你沒有DNS服務器或DNS服務器不可用,該檔案也可以使用/etc/hosts檔案將IP地址轉換為名稱。

 

也許你已經有DNS服務器了,但你也會因為其它原因而想保留這個檔案。例如,系統可能需要在向外部查詢之前在本地查找DNS服務器的IP地址;這意味著系統在查詢DNS服務器之前先檢索該檔案,如果查找到對應的域則無須查詢任何DNS服務器直接將其轉換為IP地址。

 

試試編輯下/etc/hosts檔案,並添加以下信息:127.0.0.1 google.com.

然後,傳回你的瀏覽器,輸入google.com,看看結果如何。如果你的系統上安裝了Apache並且本地主機正在運行,瀏覽器會顯示localhost的索引頁,而不是Google頁面。

 

 

作為確認,你可以將google.com映射到任何網站的任何其他IP地址並查看結果。

 

因此這個檔案所做的是將IP地址轉換成名字,但這僅僅是在同一互相連接的網絡下。 那麼外部網絡和眾多系統的所有記錄是如何維護的呢?

 

每個人都需要維護自己的/etc/hosts檔案並自己更新嗎?

 

更為穩健的域名服務是DNS服務器。

 

域名

 

當你訪問網站時,你可以輸入FQDN(Fully Qualified Domain Name,完全限定域名)或類似likegeeks.com或www.google.com的域名。在域名中從右到左的兩個點之間的每個文本依次是頂級域組件、二級域組件和三級域組件。

 

所以,com是頂級域名組件; google是二級域組件; 而www是三級域名組件。

實際上,當你訪問任何網站時,瀏覽器會預設在域的末尾添加一個不可見的點,因此該域將像www.google.com.一樣。 該點被稱為根域。

 

該點是由一大堆稱為根域名服務器的特殊服務器管理的。截止這篇文章發表前,世界上有13個根域名服務器。 你可以把他們當成互聯網的大腦 – 如果他們失效了,世界上就沒有互聯網了。

 

為什麼是13呢? 因為如果世界的某處地震可能會破壞一個根服務器,所以其他的服務器可以繼續提供服務直到受影響的服務器重新上線。

 

這些根名稱服務器按字母順序命名,名稱如a.root-server.net、b.root-server.net等。

 

頂級域名 (或稱作一級域名 TLDs)

 

我們已經見過頂級域名的組成部分,如 com。可以認為,頂級域名為 DNS 命名空間提供分類組織。

 

頂級域名(TLD)根據地理或功能方面分為幾類。

 

截止本文撰寫時,網上有 800 多個頂級域名。

 

頂級域名類別有:

 

  • 通用的頂級域名如:org, .com, .net, .gov, .edu 等等
  • 國家代碼頂級域名如:.us, .ca 等,分別對應美國和加拿大的國家代碼
  • 新的品牌頂級域名,允許組織創建最多 64 個字符的TLD,如:.linux, .microsoft, .companyname 等
  • 基礎架構頂級域名如: .arpa

子域名

 

當你訪問一個類似 mail.google.com 這樣的網站, 這裡的mail 就是 google.com的子域名.

 

只有mail.google.com 的名稱服務器知道他下麵存在的所有主機,所以Google會回覆是否有一個叫mail 的子域名。根名稱服務器對此並不知情。

DNS服務器的型別

 

一共有三種DNS服務器。

 

主DNS服務器

 

這些服務器上存放了特定域名的配置檔案,並且基於此權威地規定了特定域名的地址。主DNS服務器知道全部在它管轄範圍的主機和子域名的地址。

輔助DNS服務器

 

這些服務器作為主DNS服務器的備份,也承擔一定負載。主服務器知道輔助DNS服務器的存在,並且會向他們推送更新。

快取DNS服務器

 

這些服務器上不存放特定域名的配置檔案。當客戶端請求快取服務器來解析域名時,該服務器將首先檢查其本地快取。如果找不到匹配項便會詢問主服務器。接著這條響應將被快取起來。您也可以輕鬆地將自己的系統用作快取服務器。

 

搭建 Linux DNS 服務器

 

Linux 下有很多實現了 DNS 功能的包,不過我們只關註 BIND DNS 服務器。它用於世界上大多數 DNS 服務器。

 

如果你在使用基於 Red Hat 發行版的 Linux,比如 CentOS,可以像這樣安裝:$ dnf -y install bind

 

如果你使用基於 Debian 的操作系統,比如 Ubuntu:$ apt-get install bind9

安裝完成之後就可以啟動它並讓它在計算機啟動的時候一併啟動起來。

 

$ systemctl start named

$ systemctl enable named

 

配置 BIND

 

這個服務使用 /etc/named.conf 作為配置檔案。

 

BIND 在那個檔案中使用像下麵這樣的一些陳述句:

 

  • options: 用於全域性 BIND 配置。
  • logging: 配置哪些需要記錄,哪些需要忽略。我推薦你看看 Linux syslog server。
  • zone: 定義 DNS 區域。
  • include: 在 named.conf 中包含另一個檔案。

在 options 陳述句中可以看到 BIND 的工作目錄在 /var/named。

 

zone 陳述句可用於定義 DNS 區域,比如域名 google.com,它包含子域名 mail.google.com 和 analytics.google.com。

 

上述三個域名(主域名和子域名) 都有一個由 zone 陳述句定義的區域。

 

定義一個主域服務器

 

我們知道 DNS 服務器型別有主域名服務器、輔助域名服務器和快取域名服務器。不同於快取域名服務器,主域名服務器和輔助域名服務器在應答過程中是處於同等地位的。

 

在 /etc/named.conf 的配置檔案中,你可以使用如下語法定義一個主域服務器:

 

zone    “likegeeks.com” {

type master;

file likegeeks.com.db

};

 

包含主要區域信息的檔案存放在 /var/named 目錄下,從 options 可知,這是一個工作目錄。

 

註意:軟體服務器或者托管面板會根據你的域名自動為你創建主域服務器信息的檔案名,因此如果你的域名是 example.org,那麼你主域服務器信息的檔案就為 /var/named/example.org.db。

 

型別為 master,也就是說這是一個主域服務器。

 

定義一個輔助域服務器

 

同定義一個主域服務器一樣,輔助域服務器的定義稍微有些變化:

 

zone    “likegeeks.com” {

type slave;

masters IP Address list; ;

file likegeeks.com.db

};

 

對於輔助域服務器來說,它的域名和主域服務器是一樣的。上述語法里的的slave型別表示這是一個輔助域服務器,“masters IP Address list”表示輔助域服務器中區域檔案內的信息都是通過主域服務器中區域檔案內的信息複製過來的。

 

定義一個快取服務器

 

即使你已經配置了主域或者輔助域服務器,你仍有必要(不是必須)定義一個快取服務器,因為這樣你可以減少DNS服務器的查詢次數。

 

在定義快取服務器之前,你需要先定義三個區域選擇器,第一個:

 

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”;

};

 

定義第三個區域是為了反向查找到本地主機。這種反向查找是把本地的IP地址執向本地主機。

 

zone      “0.0.127.in-addr.arpa” IN {

type master;

file “127.0.0.rev”;

};

 

把這三個區域信息放到/etc/named.conf檔案里,你的系統就可以以快取服務器來工作了。但是如何取用類似likegeeks.com.db, localhost.db, 和 127.0.0.rev這些檔案中的內容呢?

 

這些檔案包含具有某些選項的每個區域的DNS記錄型別。 那麼,這些DNS記錄型別是什麼以及它們是如何寫的?

 

DNS記錄型別

 

資料庫檔案包含諸如SOA、NS、A、PTR、MX、CNAME和TXT在內的記錄型別。

 

我們看看每一種型別都是如何記錄的吧。

 

SOA:起始授權機構記錄

SOA記錄按如下形式開始描述一個站點的DNS條目:

 

example.com.      86400      IN      SOA      ns1.example.com.   mail.example.com.      (

2017012604 ;serial

86400 ;refresh, seconds

7200 ;retry, seconds

3600000 ;expire, seconds

86400 ;minimum, seconds

)

 

第一行以域名example.com開始,以句號結束——該陳述句和/etc/named.conf檔案中的區域定義是一致的。我們要始終記得,DNS配置檔案是極其挑剔的。

 

IN 告訴域名服務器:這是一條網絡記錄。

 

SOA 告訴域名服務器:這是一條起始授權機構記錄。

 

ns1.example.com. 是該檔案所在域的域名服務器的完全合格域名(FQDN: Fully Qualified Domain Name)。

 

mail.host.com. 是域管理員的郵箱地址。你會發現這個郵箱地址沒有“@”標誌,而是被句號所取代,並且末尾還有一個句號。

 

第2行是一個序列碼,它被用來告訴域名服務器檔案是什麼時候升級的。因此,如果你對區域碼做了變更,你必須對這個序列碼進行遞增。這個序列碼的格式是 YYYYMMDDxx ,其中的 xx 是從 00 開始的。

 

第3行是每秒掃清率。這個值被用來告訴第二個域名服務器查詢主服務器中的記錄是否已經被更新的頻率。

 

第4行是每秒重試的頻率。如果第二個服務器多次嘗試連接主域名服務器來進行更新檢測,但無法連接上的時候,第二個服務器就會在每秒內重試指定的數值次數。

 

第5行是超時指示。其目的是為了第二個服務器能將區域資料快取下來。這個值告訴這些服務器如果它們不能連接到主服務器來進行更新,那麼它們就會在這個指定數值秒數之後拋棄這個值。

 

第6行告訴快取服務器,如果它們不能連接到主域名服務器時,它們應該在超時前等待多久。

 

NS: Name Server Records(名稱服務器記錄)

 

NS記錄用於指定哪個名稱服務器維護該域的記錄。

 

你可以這樣編寫的NS記錄:

 

IN           NS         ns1.example.com.

IN           NS         ns2.example.com.

 

並不需要有2個NS記錄,但是通常偏好有備份名稱服務器。

 

A和AAAA: Address Records(地址記錄)

 

A記錄用於提供從主機名到IP地址的映射support IN A 192.168.1.5。

 

如果你在地址為192.168.1.5上的support.example.com上有一個主機,你可以像上面的例子那樣輸入。

 

請註意,我們所寫的主機並沒有句號。

 

PTR: Pointer Records(指標記錄)

 

PTR記錄用於執行反向名稱解析,允許某人指定IP地址然後找出對應的主機名。

 

這與A記錄的功能相反:192.168.1.5 IN PTR support.example.com.

 

在這裡,我們鍵入具有點號的完整主機名。

 

MX: Mail Exchange Records(郵件交換記錄)

 

MX記錄告訴其他站點關於你所在域的郵件服務器地址:example.com. IN MX 10 mail.

 

當然這個域以句號結束。數字10是郵件服務器的重要性標誌,如果你擁有多個郵件服務器,其中較小的數字不太重要。

 

CNAME: Canonical Name Records(權威名稱記錄)

 

CNAME記錄允許你為主機名創建別名。當你想提供一個易於記住的名稱時,這很有用。

 

假設某個站點具有一個主機名為whatever-bignameis.example.com的Web服務器,並且由於系統是Web服務器,因此可以為主機創建一個名為www的CNAME記錄或者別名。

 

你可以創建名為www.example.com的域名創建CNAME記錄:

 

whateverbignameis      IN           A                    192.168.1.5

www                     IN           CNAME                whateverbignameis

 

第一行通知DNS服務器關於別名的位置。第二行創建一個指向www的別名。

TXT記錄

 

您可以將任何信息儲存到TXT記錄中,例如你的聯繫方式或者你希望人們在查詢DNS服務器時可獲得的任意其他信息。

 

你可以這樣儲存TXT記錄:example.com. IN TXT ” YOUR INFO GOES HERE”.

 

此外,RP記錄被創建為對host聯繫信息的顯式容器:example.com. IN RP mail.example.com. example.com。

 

DNS TTL值

 

在/etc/named.conf檔案的頂部,這裡有一個$TTL條目。

 

該條目告訴BIND每個單獨記錄的TTL值(time to live,生存時間值)。

 

它是以秒為單位的數值,比如14,400秒(4個小時),因此DNS服務器最多快取你的域檔案4個小時,之後就會向你的DNS服務器重新查詢。

 

你可以降低這個值,但是預設值通常是合理的。除非你知道你正在做什麼。

 

捕獲配置錯誤

 

當您寫入域檔案時,也許您忘記了一個句號或空格或其他任意錯誤。

 

你可以從日誌診斷Linux DNS服務器錯誤。BIND服務通過/var/log/messages上的錯誤,可以使用tail命令來查看實時錯誤日誌,須使用-f選項:$ tail -f /var /log/messages。

 

因此,當你編寫域檔案或修改/etc/named.config並重新啟動服務時,顯示錯誤之後,你可以從日誌中輕鬆識別錯誤型別。

 

Host命令

 

在你成功添加或修改記錄後,可以使用host命令查看主機是否正確解析。

 

host命令允許你將主機名解析為IP地址:$ host example.com。

 

此外,你可以執行反向查找:$ host 192.168.1.5。

 

你可以this在此篇文章中查看更多關於host和dig命令的信息。

 

Whois命令

 

whois命令用於確定域名的所有權及其擁有者的e-mail地址和聯繫電話:$ whois example.com.

 

Rndc命令

 

rndc工具可用於安全地管理名稱服務器,因為與服務器的所有通信均通過數字簽名進行身份驗證。

 

此工具用於控制名稱服務器和除錯問題。 你可以通過以下方式檢查Linux DNS服務器的狀態:$ rndc status。

 

此外,如果你更改任何域(zone)檔案,您可以重新加載服務,而無須重啟命名服務:$ rndc reload example.com。

 

在這裡,我們重新加載example.com域檔案。 你可以重新加載所有域:$ rndc reload。

 

或者你可以添加新的域或更改服務的配置。 你可以重新加載配置,如下所示:

$ rndc reconfig。

 

Linux DNS解析器

 

我們已經知道Linux DNS服務器的工作原理以及如何配置它。另一部分當然是與DNS服務器交互的(正在與DNS服務器通信以將主機名解析為IP地址的)客戶端。

 

在Linux上,解析器位於DNS的客戶端。要配置解析器,可以檢查/etc/resolv.conf這個配置檔案。

 

在基於Debian的發行版上,可以查看/etc/resolvconf/resolv.conf.d/目錄。

/etc/resolv.conf檔案中包含客戶端用於獲取其本地DNS服務器地址所需的信息。

 

第一個表示預設搜索域,第二個表示主機名稱服務器(nameserver)的IP地址。

名稱服務器行告訴解析器哪個名稱服務器可使用。 只要你的BIND服務正在運行,你就可以使用自己的DNS服務器。

 

使用Linux DNS服務器非常簡單。 我希望你發現這篇文章很有用,並且很容易理解。

 

文:dzone,譯者:開源中國   

https://www.oschina.net/translate/linux-dns-server-installation-amp-configuration-am?print

    赞(0)

    分享創造快樂