[Linux] 使用 bind9 建立 DNS 服務

安裝 bind9:
    
sudo apt install bind9
    

編輯設定檔:
    
sudo vi /etc/bind/named.conf.local
    

假設我們要將 test.com 網域指向 192.168.0.10 這個 IP:
    
zone "test.com" {
    type master;
    file "/etc/bind/zones/db.test.com";
}; 
    

建立資料夾,將設定檔放在 zones 中方便管理:
    
sudo mkdir -p /etc/bind/zones
    

建立 local.test 網域專用的設定檔:
(db 代表 database ,是 bind9 中常見的命名慣例)
    
sudo vi /etc/bind/zones/db.test.com
    

設定檔內容:
(如果要設定其他網域,只要把 test.com 替換掉即可)
    
;
; BIND data file for test.com
;
$TTL    604800
@       IN      SOA     ns.test.com. admin.test.com. (
                      1         ; Serial
                 604800         ; Refresh
                  86400         ; Retry
                2419200         ; Expire
                 604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.test.com.
@       IN      A       192.168.0.10
ns      IN      A       192.168.0.10

    

測試設定檔是否正確:
    
sudo named-checkzone test.com /etc/bind/zones/db.test.com
    

範例輸出:
    
sudo named-checkzone test.com /etc/bind/zones/db.test.com
zone test.com/IN: loaded serial 1
OK
    

重新啟動 bind9 服務:
    
sudo systemctl restart bind9.service
    

假設安裝 bind9 的主機 IP 是 192.168.0.9 ,我們就可以使用下面的指令來在 192.168.0.9 這個主機上面查詢 test.com 的 DNS 資訊:
    
dig @192.168.0.9 test.com
    

範例輸出:
    
dig @192.168.0.9 test.com

; <<>> DiG 9.18.28-0ubuntu0.24.04.1-Ubuntu <<>> @192.168.0.9 test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48204
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 33750dcb32f6aac501000000675324d3771eabc6e784a3b2 (good)
;; QUESTION SECTION:
;test.com.                      IN      A

;; ANSWER SECTION:
test.com.               604800  IN      A       192.168.0.10

;; Query time: 0 msec
;; SERVER: 192.168.0.9#53(192.168.0.9) (UDP)
;; WHEN: Fri Dec 06 16:22:43 UTC 2024
;; MSG SIZE  rcvd: 81
    

要讓其他主機指定 DNS Server,就需要去修改 /etc/netplan/ 下面的檔案,檔名很可能不一樣,例如筆者的是:
    
sudo vi /etc/netplan/50-cloud-init.yaml
    

下面的範例是設定 DNS 為 192.168.0.9:
    
network:
    ethernets:
        ens33:
            dhcp4: false
            addresses:
              - 192.168.0.41/24
            nameservers:
              addresses:
                - "192.168.0.9"
            routes:
              - to: default
                via: 192.168.0.1

    version: 2
    

調整完設定後執行下面的指令來測試和套用設定:
    
sudo netplan try
    

之後這台裝置上的 test.com 就會被指向 192.168.0.10 了,我們也可以使用 ping 指令來測試:
    
ping test.com
PING test.com (192.168.0.10) 56(84) bytes of data.
64 bytes from 192.168.0.10: icmp_seq=1 ttl=64 time=0.329 ms
64 bytes from 192.168.0.10: icmp_seq=2 ttl=64 time=0.310 ms
    



參考資料:
Ubuntu - Domain Name Service (DNS)

留言