Linux DNS 伺服器安裝、配置和維護
英文:dzone,譯者:開源中國
https://www.oschina.net/translate/linux-dns-server-installation-amp-configuration-am?print
每個 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伺服器。
域名
所以,com是頂級域名組件; google是二級域組件; 而www是三級域名組件。
該點是由一大堆稱為根域名伺服器的特殊伺服器管理的。截止這篇文章發表前,世界上有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
子域名
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
安裝完成之後就可以啟動它並讓它在計算機啟動的時候一併啟動起來。
$systemctlstartnamed
$systemctlenablenamed
配置 BIND
這個服務使用 /etc/named.conf 作為配置文件。
BIND 在那個文件中使用像下面這樣的一些語句:
options: 用於全局 BIND 配置。
logging: 配置哪些需要記錄,哪些需要忽略。我推薦你看看 Linux syslog server。
zone: 定義 DNS 區域。
include: 在 named.conf 中包含另一個文件。
在 options 語句中可以看到 BIND 的工作目錄在 /var/named。
上述三個域名(主域名和子域名) 都有一個由 zone 語句定義的區域。
定義一個主域伺服器
我們知道 DNS 伺服器類型有主域名伺服器、輔助域名伺服器和緩存域名伺服器。不同於緩存域名伺服器,主域名伺服器和輔助域名伺服器在應答過程中是處於同等地位的。
在 /etc/named.conf 的配置文件中,你可以使用如下語法定義一個主域伺服器:
zone"likegeeks.com"{
typemaster;
};
包含主要區域信息的文件存放在 /var/named 目錄下,從 options 可知,這是一個工作目錄。
注意:軟體伺服器或者託管面板會根據你的域名自動為你創建主域伺服器信息的文件名,因此如果你的域名是 example.org,那麼你主域伺服器信息的文件就為 /var/named/example.org.db。
類型為 master,也就是說這是一個主域伺服器。
定義一個輔助域伺服器
同定義一個主域伺服器一樣,輔助域伺服器的定義稍微有些變化:
zone"likegeeks.com"{
typeslave;
mastersIPAddresslist;;
};
對於輔助域伺服器來說,它的域名和主域伺服器是一樣的。上述語法里的的slave類型表示這是一個輔助域伺服器,「masters IP Address list」表示輔助域伺服器中區域文件內的信息都是通過主域伺服器中區域文件內的信息複製過來的。
定義一個緩存伺服器
即使你已經配置了主域或者輔助域伺服器,你仍有必要(不是必須)定義一個緩存伺服器,因為這樣你可以減少DNS伺服器的查詢次數。
在定義緩存伺服器之前,你需要先定義三個區域選擇器,第一個:
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";
};
定義第三個區域是為了反向查找到本地主機。這種反向查找是把本地的IP地址執向本地主機。
zone"0.0.127.in-addr.arpa"IN{
typemaster;
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條目:
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)。
第2行是一個序列碼,它被用來告訴域名伺服器文件是什麼時候升級的。因此,如果你對區域碼做了變更,你必須對這個序列碼進行遞增。這個序列碼的格式是 YYYYMMDDxx ,其中的 xx 是從 00 開始的。
第3行是每秒刷新率。這個值被用來告訴第二個域名伺服器查詢主伺服器中的記錄是否已經被更新的頻率。
第4行是每秒重試的頻率。如果第二個伺服器多次嘗試連接主域名伺服器來進行更新檢測,但無法連接上的時候,第二個伺服器就會在每秒內重試指定的數值次數。
第5行是超時指示。其目的是為了第二個伺服器能將區域數據緩存下來。這個值告訴這些伺服器如果它們不能連接到主伺服器來進行更新,那麼它們就會在這個指定數值秒數之後拋棄這個值。
第6行告訴緩存伺服器,如果它們不能連接到主域名伺服器時,它們應該在超時前等待多久。
NS: Name Server Records(名稱伺服器記錄)
NS記錄用於指定哪個名稱伺服器維護該域的記錄。
你可以這樣編寫的NS記錄:
INNSns1.example.com.
INNSns2.example.com.
並不需要有2個NS記錄,但是通常偏好有備份名稱伺服器。
A和AAAA: Address Records(地址記錄)
A記錄用於提供從主機名到IP地址的映射support IN A 192.168.1.5。
請注意,我們所寫的主機並沒有句號。
PTR: Pointer Records(指針記錄)
PTR記錄用於執行反向名稱解析,允許某人指定IP地址然後找出對應的主機名。
在這裡,我們鍵入具有點號的完整主機名。
MX: Mail Exchange Records(郵件交換記錄)
MX記錄告訴其他站點關於你所在域的郵件伺服器地址:example.com. IN MX 10 mail.
當然這個域以句號結束。數字10是郵件伺服器的重要性標誌,如果你擁有多個郵件伺服器,其中較小的數字不太重要。
CNAME: Canonical Name Records(權威名稱記錄)
CNAME記錄允許你為主機名創建別名。當你想提供一個易於記住的名稱時,這很有用。
whatever-bignameisINA192.168.1.5
wwwINCNAMEwhatever-bignameis
第一行通知DNS伺服器關於別名的位置。第二行創建一個指向www的別名。
TXT記錄
您可以將任何信息存儲到TXT記錄中,例如你的聯繫方式或者你希望人們在查詢DNS伺服器時可獲得的任意其他信息。
你可以這樣保存TXT記錄:example.com. IN TXT 」 YOUR INFO GOES HERE」.
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。
※當年學C語言的過程
※Android 資源與屬性備忘單
※SSH 協議埠號 22 背後的故事
※程序員如何寫出更好的代碼?
※優化SQL查詢:如何寫出高性能SQL語句
TAG:程序源 |
※Linux DNS 伺服器安裝、配置和維護,一文看全~
※如何在 Linux 上安裝、配置 NTP 伺服器和客戶端?
※Linux平台安裝、配置ODBC數據源
※Nginx 安裝配置
※Python安裝與配置
※安裝配置MariaDB資料庫
※Scala 安裝及環境配置
※如何在 Linux 中安裝、配置和使用 Fish Shell?
※Linux LVM配置
※Python虛擬環境的安裝與配置
※Git 安裝配置
※mac神器iTrem2安裝配置及優化
※淺談Linux系統MySQL安全配置
※Linux安裝jdk1.8和配置環境變數 原
※Centos7安裝JDK8以及環境配置
※linux下mariadb安裝、配置
※Centos 7 二進位安裝配置 MariaDB資料庫
※Linux中Postfix郵件安裝配置(二)
※Windows下BVLC Caffe的安裝與配置
※ELK 架構之 Logstash和Filebeat 安裝配置