Contents

Linux - BIND 名稱伺服器

封包傳輸在 L3 層均透過 IP 來處理要往哪裡轉發及發送,不過 IP 一連串無意義的數字對於人類來說記憶上較為困難,故 DNS 名稱伺服器問世就是要解決此問題,從早期的 /etc/hosts 靜態名稱伺服器到現在的分布式網域名稱系統。

練習環境
可以使用 HowHow 的創建 Lab 練習環境,來操作多台機器練習 使用方式請參閱 HowHow 網站 - Linux 練習 Lab 第二版

1. BIND 名稱伺服器簡介

DNS 提供所管理的 ZONE (區域) 提供名稱解析查詢,除了最輕量級的 dnsmasq 之外,最常使用的則為 BIND (Berkely Internet Name Domain) 權威域名稱伺服器,除了主要(Primary)名稱伺服器也能配置次要 (Secondary)名稱伺服器。

https://hackmd.io/_uploads/SJIBdg63j.png
DNS 查詢 - aws.amazon.com


2. BIND Server 安裝

BIND Server 安裝方式十分容易 , 已經預設在 RHEL 8 的 AppStream 倉庫裡,直接透過 yum 即可安裝。

1
yum install bind -y

3. BIND Server 設定

  1. 網域定義為 : howhow.lab.example.com.
  2. 在 Servera 啟用 主要(Primary)名稱伺服器

3.1 設定檔配置

BIND Server 設定檔路徑 : /etc/named.conf

3.1.1 設定伺服器監聽介面

任何 ipv4 介面監聽 53/TCP, 53/UDP 都可以訪問

1
2
3
4
5
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
...output omitted...
};

3.1.2 限制查詢

限制僅能 172.25.250.11/24 及 192.168.10.0/24 網段查詢,也可以使用 any 開放所有IP查詢。

1
2
3
4
options {
        ...output omitted...
        allow-query     {  172.25.250.11/24 ;192.168.10.0/24 };
};
Import
recursion 預設值為 yes,建議設定為 no,尤其在開放任何來源IP都可以查詢情況下,避免遭受惡意 DNS 放大攻擊。

3.2 定義 Zone 區域

Zone 區域為自訂義所需的名稱區域及反向查詢的區域,此文件一般會存放於 /etc/named.<自定義名稱>.conf ,並在上述的 /etc/name.conf 最後一行加上 include "/etc/named.<自定義名稱>.conf"; 來載入(另外也可以直接寫在 /etc/named.rfc1912.zones 裡也是合法)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
zone "howhow.lab.example.com." IN {
        type master;
        file "howhow.lab.example.com.zone";
        forwarders {};
};

zone "10.168.192.in-addr.arpa." IN {
        type master;
        file "192.168.10.zone";
        forwarders {};
};
反向解析
反向解析是個特別的區域,如果主機 IP 為 192.168.10.100 那反向解析區域就會是 10.168.192.in-addr.arpa 將 IP 反過來加上 in-addr.arpa (請注意最後的 .100 不在此內)

3.3 設定 ZONE 檔案

所有區域文件會存於 /var/named/<自訂義名稱>.zone 內

下列幾點務必遵循 :

  1. 檔案權限必須為 640 。 ex. chmod 640 /var/named/*.zone
  2. 檔案擁有者為 root ,檔案群組擁有者為 named 。 ex. chown root:named /var/named/*.zone
  3. SELinux Context 須為 named_zone_t 。 ex. chcon -t named_zone_t /var/named/*.zone

3.3.1 設定正向解析 ZONE

  1. TTL : TTL 預設以秒為單位,Clinet 多久後會再來查詢。

  2. SOA :

    • @ : 為簡寫(表明為 howhow.lab.example.com. 網域) 。
    • IN : 所記錄的類別表示為 Internet
    • SOA : 權威記錄起始,表似其ZONE訊息。
    • servera.howhow.lab.example.com. : 表示為 servera 主要名稱伺服器名稱。
    • root.example.com. : 表示管理員聯絡 email ,囿於@ 有特殊用途,所以其表示 [email protected]
    • 2023020501 : 此文件版本序號,每一次更新都需增加,一般會以 YYYYMMDD00 來表示。
    • 1H : 次要伺服器多久會進行更新查詢。
    • 5M : 如果主要伺服器當機,次要伺服器多久會重新連接刷新。
    • 1W : 主要伺服器當機多久後,次要伺服器將不會再查詢刷新。
    • 1M : 其他名稱伺服器對此區要TTL時長。
  3. NS : 表示此權威區域的名稱伺服器為 servera.howhow.lab.example.com.

  4. A : A 紀錄對應的名稱及 IP,例如查詢 serverb.howhow.lab.example.com 對應正向解析 IP 為 192.168.10.12

  5. CNAME : 類似於別名概念,當查詢 viedoe.howhow.lab.example.com 其對應的 IP 則為 192.168.10.11

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$TTL 300
@       IN SOA  servera.howhow.lab.example.com. root.example.com. (
                                        2023020501
                                        1H
                                        5M
                                        1W
                                        1M )
                IN      NS      servera.howhow.lab.example.com.
servera         IN      A       192.168.10.11
serverb         IN      A       192.168.10.12
www             IN      A       192.168.10.11
viedoe          IN      CNAME   www.howhow.lab.example.com.
Import
所有的 DNS 名稱強烈要求在配置上一定要在結尾後帶上 . ,表示這為 root 結束,不然會導致解析時重複網域。

3.3.2 設定反向解析 ZONE

  1. PTR : 反向解析 IP 所對應其主機名稱,例如 192.168.10.12 其反向解析名稱為 serverb.howhow.lab.example.com.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$TTL 1D
@       IN SOA  servera.howhow.lab.example.com. root.example.com. (
                                        2023020502
                                        1H
                                        5M
                                        1W
                                        3M )
        IN      NS      servera.howhow.lab.example.com.
11      IN      PTR     servera.howhow.lab.example.com.
12      IN      PTR     serverb.howhow.lab.example.com.
11      IN      PTR     www.howhow.lab.example.com.
11      IN      PTR     videos.howhow.lab.example.com.

4. 開通防火牆

1
2
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
Tip
DNS 預設使用 53/UDP 及 53/TCP (伺服器傳輸) 通訊。

5. 啟用服務

1
systemctl enable --now named
設定驗證
啟動 named 前可以使用 named-checkconf 來驗證 /etc/named.<自定義名稱>.conf 是否正確,及使用 named-checkzone 檢查 zone 是否正確。

6. DNS 查詢

使用 dig 或是 host 工具都可以方便查詢,可以透過 yum install bind-utils 安裝套件使用。

6.1 DNS 查詢測試

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# host 正向查詢指定所查詢名稱伺服器為 servera
[root@servera named]# host serverb.howhow.lab.example.com. servera
Using domain server:
Name: servera
Address: 172.25.250.11#53
Aliases:

# host 反向查詢指定查詢名稱伺服器為 servera
serverb.howhow.lab.example.com has address 192.168.10.12
[root@servera named]# host 192.168.10.12 servera
Using domain server:
Name: servera
Address: 172.25.250.11#53
Aliases:

12.10.168.192.in-addr.arpa domain name pointer serverb.howhow.lab.example.com.
[root@servera named]#

# dig 正向查詢指定所查詢名稱伺服器為 servera

[root@servera named]# dig serverb.howhow.lab.example.com. @servera | grep -A1 ANSWER
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available
--
;; ANSWER SECTION:
serverb.howhow.lab.example.com. 300 IN  A       192.168.10.12

# dig 反向查詢指定所查詢名稱伺服器為 servera
[root@servera named]# dig -x 192.168.10.12 @servera | grep -A1 ANSWER
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available
--
;; ANSWER SECTION:
12.10.168.192.in-addr.arpa. 86400 IN    PTR     serverb.howhow.lab.example.com.

7. 延伸 - 配置 次要(Secondary)名稱伺服器

次要伺服器一樣也是安裝 bind ,設定檔就複製主名稱伺服器在修改部分即可,會自動同步主名稱伺服器 ZONE 配置文件。

7.1 安裝 bind 及複製檔案

1
2
3
4
5
6
[root@serverd ~]# yum install bind -y
...output omitted...
[root@serverd ~]# scp servera:/etc/named.conf /etc/named.conf
[root@serverd ~]# scp servera:/etc/named.howhow.conf /etc/named.howhow.conf
[root@serverd ~]# chgrp named /etc/named.conf /etc/named.howhow.conf
[root@serverd ~]# chmod 640 /etc/named.conf  /etc/named.howhow.conf

7.2 設定為 slave 模式

編輯 /etc/named.howhow.conf 將 type 改為 slave ,並定義 masters 主伺服器的 IP。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
zone "howhow.lab.example.com." IN {
        type slave;
        file "slaves/howhow.lab.example.com.zone";
        masters { 172.25.250.11; };
};

zone "10.168.192.in-addr.arpa." IN {
        type slave;
        file "slaves/192.168.10.zone";
        masters { 172.25.250.11; };
};

7.3 開放防火牆及啟動伺服器

1
2
3
4
5
6
[root@serverd ~]# firewall-cmd --add-service=dns --permanent
success
[root@serverd ~]# firewall-cmd --add-service=dns
success
[root@serverd ~]# systemctl enable --now named
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.

7.4 DNS 查詢測試

7.4.1 驗證 ServerD 查詢

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@servera named]# host 192.168.10.12 serverd
Using domain server:
Name: serverd
Address: 172.25.250.14#53
Aliases:

12.10.168.192.in-addr.arpa domain name pointer serverb.howhow.lab.example.com.
[root@servera named]# host www.howhow.lab.example.com serverd
Using domain server:
Name: serverd
Address: 172.25.250.14#53
Aliases:

www.howhow.lab.example.com has address 192.168.10.11

7.4.2 次要名稱伺服器同步檔案

啟動後次要稱伺服器會找主伺服器的 ZONE ,並將以 cache 方式儲存。

1
2
3
4
[root@serverd ~]# ls -l /var/named/slaves/
total 8
-rw-r--r--. 1 named named 447 Feb  5 16:59 192.168.10.zone
-rw-r--r--. 1 named named 469 Feb  5 17:10 howhow.lab.example.com.zone

8. 小節

BIND 名稱伺服器功能非常強大,雖然有些複雜,但是在實務上十分常用的功能,雖然大部主要企業公司內部都已 AD 來管理多數的網域,不過還是有需要定義內部區域的網域名稱時就會需要 BIND 介入。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!