如何在 Ubuntu 16.04 服務(wù)器上配置內(nèi)網(wǎng) DNS 服務(wù)

DNS

1. 簡(jiǎn)介

??本文使用 BIND9,用盡量少的步驟,搭建出一個(gè)可用的內(nèi)網(wǎng) DNS 服務(wù)。另外要說(shuō)明的一點(diǎn)是,本文不僅適用于 Ubuntu 16.04,也使用其后的 Ubuntu 系統(tǒng)(截止到目前位置,最新的 Ubuntu server 版本是 18.04,之后的版本無(wú)法保證)。

2. 配置極簡(jiǎn)內(nèi)網(wǎng) DNS 服務(wù)

2.1 安裝 BIND9

??先更新 APT,之后再安裝 BIND9 相關(guān)的軟件包:

$ sudo apt update
$ sudo apt install bind9 bind9utils bind9-doc

2.2 配置 BIND9 的 IPv4 模式

??這步是要將 BIND9 設(shè)置為只支持 IPv4 地址,如果需要用到 IPv6 地址的話(huà),可以跳過(guò)這步。
??我們需要修改 BIND9 的 systemd unit file:

$ sudo systemctl edit --full bind9

??當(dāng)然我們也可以直接用文件編輯器修改文件:

$ sudo vim /etc/systemd/system/multi-user.target.wants/bind9.service

??文件內(nèi)容如下,在 ExecStart 這行的最后加上 -4 就可以了。

...
[Service]
...
ExecStart=/usr/sbin/named -f $OPTIONS -4
...

??修改配置后,需要重啟 BIND9,因?yàn)?systemd 的 unit file 也變了,所以需要重新載入:

$ sudo systemctl daemon-reload
$ sudo systemctl restart bind9

2.3 修改配置文件 named.conf.options

??該文件(/etc/bind/named.conf.options)需要修改三處:

  • acl 部分:acl 是控制哪些客戶(hù)端可以連接到這個(gè) DNS 上的,支持子網(wǎng)掩碼方式,例子中我把 10.19.250.0/24 網(wǎng)段中的所有 IP 都設(shè)為了可訪問(wèn)。
  • recursion 字段:設(shè)置成 yes,表示允許遞歸 DNS 查詢(xún)。
  • allow-recursion 字段:允許遞歸查詢(xún)的客戶(hù)端范圍,這里設(shè)置成了之前在 acl 中聲明的 trusted。
  • listen-on 字段:表示 DNS 服務(wù)監(jiān)聽(tīng)在哪個(gè)地址上,填寫(xiě)本地 IP 即可。
  • allow-transfer 字段:設(shè)置成 none 表示不允許其他 DNS 服務(wù)器從本 DNS 服務(wù)器中查詢(xún)。
  • forwarders 字段:原因是我們的內(nèi)網(wǎng) DNS 服務(wù)只提供了很有限的幾條 DNS 記錄,如果不做點(diǎn)什么的話(huà),APT 源的地址都解析不了。BIND9 提供 DNS 查詢(xún)的轉(zhuǎn)發(fā)機(jī)制,當(dāng)本地 DNS 查詢(xún)不到,將查詢(xún)轉(zhuǎn)發(fā)到 forwarders 上,并把查詢(xún)結(jié)果緩存到本地 DNS 上,這樣問(wèn)題就解決了。本文使用的是國(guó)內(nèi)公網(wǎng) DNS:114.114.114.114,大家可以根據(jù)自己的需求進(jìn)行修改。
$ cat /etc/bind/named.conf.options
acl "trusted" {
        10.19.250.0/24;
};
...
options {
        recursion yes;
        allow-recursion { trusted; };
        listen-on { 10.19.250.56; };
        allow-transfer { none; };
        ...
        forwarders {
                114.114.114.114;
        };
        ...
}
...

2.4 修改配置文件 named.conf.local

??假設(shè)搭建的內(nèi)網(wǎng) DNS 要解析的域名為 example.com,那么 /etc/bind/named.conf.local 內(nèi)容應(yīng)改為:

$ cat /etc/bind/named.conf.local

zone "example.com" {
        type master;
        file "/etc/bind/zones/db.example.com";
};

2.5 修改 zone 文件

??zone 文件在 2.4 里已經(jīng)出現(xiàn)過(guò)了,file "/etc/bind/zones/db.example.com";,需要在對(duì)應(yīng)的目錄下建立該文件。

$ cat /etc/bind/zones/db.example.com 
$TTL    604800
@   IN  SOA testing.example.com. admin.example.com. (
                  2     ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
             604800 )   ; Negative Cache TTL
;

; A records
@       IN      NS      epc.example.com.
example.com.    IN      NS      epc.example.com.
epc.example.com.        IN    A    10.19.250.201
testing.example.com.    IN    A    10.19.250.201

??需要注意的幾點(diǎn)是:

  • 不要漏掉域名后面的點(diǎn),例如:testing.example.com.
  • 我們需要的 A 類(lèi)型的記錄,但是 NS 類(lèi)型的記錄也不要漏掉,不然會(huì)報(bào)錯(cuò)的。
named-checkconf[39493]: zone example.com/IN: has no NS records
named-checkconf[39493]: zone example.com/IN: not loaded due to errors.
named-checkconf[39493]: _default/example.com/IN: bad zone
  • SOA 類(lèi)型的記錄目前我還不能確定是不是必須,待驗(yàn)證過(guò)后再做更新,在這之前,大家還是也把這部分加上吧。

2.6 檢查 DNS 配置

??bind9 自帶了檢查配置文件語(yǔ)法正確性的工具,這可以降低排查錯(cuò)誤的難度,所以在進(jìn)一步測(cè)試 DNS 功能之前,我們先來(lái)好好利用這些工具檢查一下前幾步配置是否正確吧。

??先來(lái)檢查 named.conf.* 文件,如果運(yùn)行該命令沒(méi)有任何輸出的話(huà),就說(shuō)明配置一切 OK,如果有的話(huà),根據(jù)提示修改,如果遇到問(wèn)題不知道怎么解決,歡迎留言。

$ sudo named-checkconf

??接下來(lái)用命令 named-checkzone 檢查 zone 文件,命令格式如下:sudo named-checkzone <domain-name> <zone-file>,第一個(gè)參數(shù) <domain-name> 是域名,參考 2.4 中配置的域名,第二參數(shù) <zone-file> 是 zone 文件,參考 2.5 中配置的 zone 文件。

$ sudo named-checkzone example.com /etc/bind/zones/db.example.com
zone example.com/IN: loaded serial 2
OK

??如果輸出結(jié)果如上,恭喜,配置正確,如果有問(wèn)題的話(huà),還是要根據(jù)提示具體問(wèn)題具體分析。

2.7 驗(yàn)證

??經(jīng)過(guò)這些配置,終于可以驗(yàn)證一下 DNS 是否能正常工作了,先重啟 bind9。

$ sudo systemctl restart bind9.service

??接下來(lái)要用 nslookup 檢查剛剛配置的域名能否正常解析,如果系統(tǒng)里沒(méi)有這個(gè)命令,輸入一下命令安裝:

sudo apt install -y dnsutils

??輸入以下命令,可以看到 testing.example.com 正確的解析成了 10.19.250.201。恭喜,你成功的配置了 DNS!

$ nslookup testing.example.com
Server:     10.19.250.56
Address:    10.19.250.56#53

Name:   testing.example.com
Address: 10.19.250.201

3. 參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶(hù)只需要在瀏覽器中輸入url如www.sunny.com就可以到對(duì)應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 3,380評(píng)論 0 7
  • DNS簡(jiǎn)介DNS解析關(guān)鍵概念BIND 一、DNS簡(jiǎn)介: (一)DNS服務(wù) DNS:Domain Name Serv...
    哈嘍別樣閱讀 1,881評(píng)論 0 2
  • DNS工作原理 DNS 查詢(xún)的過(guò)程 DNS( Domain Name System)是“域名系統(tǒng)”的英文縮寫(xiě),是一...
    ghbsunny閱讀 9,258評(píng)論 0 0
  • 什么是DNS及功能: DNS(Domain name server),是將IP地址轉(zhuǎn)換為域名地址。當(dāng)在互聯(lián)網(wǎng)訪問(wèn)外...
    魏鎮(zhèn)坪閱讀 7,857評(píng)論 0 8
  • 網(wǎng)上看到篇好文章,解決了我多年的困惑,國(guó)內(nèi)太需要這種不僅“知其然”還要“知其所以然”的文章了。于是我無(wú)恥的...
    GaojinHsu閱讀 475評(píng)論 0 1

友情鏈接更多精彩內(nèi)容