---
# System prepended metadata

title: DNS Server
tags: [mynote]

---

# DNS Server
contributed by <[`yanjiun`](https://github.com/yanjiunhaha)>
###### tags: `mynote`

## BIND ( install )
* 建立 DNS Server 服務的軟體
* 目前版本為 BIDN 9
* DNS Server 預設 Port 為 53
    * 記得防火牆要開 
## 安裝完設定 ( configuration )
安裝完指令為 `named`
* `$ named-checkconf`：測試 `/etc/named.conf ` DNS Server 設定檔是否設定正確。
* `$ named-checkzone`：測試 `/var/named/*.zone` 是否正確
    * `$ named-checkzone test.com /var/named/test.zone`

### DNS 設定檔 `/etc/named.conf`
```
options {
    directory "/var/named";
    pid-file "/run/named/named.pid";
    listen-on {127.0.0.1; other ip;};
    ...
    forwarders { dns server ip;};
};

...

zone "yanjiun.aior.nkust.edu.tw" IN {
    type master;
    file "db.yanjiun.aior.nkust.edu.tw.zone";
};
```
### 設定 ZONE `/var/named/db.yanjiun.aior.nkust.edu.tw.zone`
```=
; $ORIGIN yanjiun.aior.nkust.edu.tw.
$TTL 2H
@	IN	SOA	yanjiun.aior.nkust.edu.tw. dns.yanjiun.aior.nkust.edu.tw. (
        2019082801     ; serial (yyyymmdd##)
        3H     ; refresh
        15M    ; retry
        1W     ; expiry
        1D )   ; minimum ttl

@		IN	NS	dns.yanjiun.aior.nkust.edu.tw.
@		IN 	A 	203.64.101.170
www		IN	CNAME 	dns.yanjiun.aior.nkust.edu.tw.
dns		IN	A	203.64.101.170
hp		IN	A	203.64.101.44
server	 	IN 	A 	203.64.101.200
```
* #1 預設 zone 參數
    * 若以下網址沒有以 ==\.== 結束，將會自動接上 $ORIGIN。
* #3 ==\@== 為預設縮寫，代表 named.conf 中的這個 zone file 鎖對應的 zone。
SOA 後兩個參數是指這個 zone file 是哪部主機定義的，以及它的負責人是誰。
    1. Serial：這份文件的版本，slave 將以此根據更新自己的 zone file。
    2. Refresh：slave 每隔這段時間就會確認 master's Serial。
    3. Retry：slave 無法連結 master 時，要隔多久重試。
    4. Expire：若 slave 超過該時間無法連結 master，就移除自己的 zone file。
    5. Minium：代表這份 noze file 中所有 record 的內定 TTL 值，也就是這份資料的暫存時間不會超過這個時間。
* #10 `@` 為 `yanjiun.aior.nkust.edu.tw.`
* #13 由於 `dns` 不以 `.` 為結尾將轉換為 `dns.yanjiun.aior.nkust.edu.tw.`
* #12 `CNAME` 為別名，因此 `www.yanjiun.aior.nkust.edu.tw` 等於 `dns.yanjiun.aior.nkust.edu.tw`

## 驗證 ( validation )
```
$ sudo named-checkconf
$ sudo named-checkzone test.com /var/named/test.com.zone
```

### 重新執行 ( Run BIND )
`$ sudo systemctl restart named`

### 設定電腦 DNS Server
`$ sudo vim /etc/resolv.conf`

## 參數查尋 ( Arguments )
### resource record tamplate
:::info
<domain><opt_ttl><opt_class><type><resource_record_data>
:::
* domain
代表要對應的名稱 
* opt_ttl
代表這筆 record 的 TTL(Time To Live), 意思是當其它的 DNS server cache 這筆 record 時, 最長不應該超過這個時間, 這個參數可以不寫 
* opt_class
目前只能填 IN, 代表 internet 
* type
resource record type 有很多種, 以下介紹一些常用的 resource record type.
    * SOA
    Start Of Authority, 這種 record 放在 zone file 一開始的地方, 描述這個 zone 負責的 name server, version number, maintainer 資料, 以及當 slave server 要備份這個 zone 時的一些參數. 
	* NS
    name server, 定義某個 domain 是由哪個 name server 負責 
	* A
    address, 定義某個 domain name 對應的 IP 
	* PTR
    pointer, 定義某個 IP 對應的 domain name 
	* CNAME
    canonical name, 定義一個別名及其真正對應到的 record 
	* MX
    mail exchanger, 定義某部機器的 mail exchanger, 所有要送往那部機器的 mail 都要經過 mail exchanger 轉送


## 反解設定 ( Reverse zone file )
### 172.16.1.rev 
```
; 
; This is db file for 172.16.1 
;

@       IN      SOA     mail.school.edu.tw. root.mail.school.edu.tw.  ( 
                                1999051401      ; Serial 
                                3600            ; Refresh 
                                300             ; Retry 
                                3600000         ; Expire 
                                3600 )          ; Minimum 
        IN      NS      mail.school.edu.tw.

$ORIGIN 1.16.172.in-addr.arpa.

; servers 
250     IN      PTR     mail.school.edu.tw.

; user pc 
1       IN      PTR     pc1.school.edu.tw. 
2       IN      PTR     pc2.school.edu.tw. 
3       IN      PTR     pc3.school.edu.tw. 
4       IN      PTR     pc4.school.edu.tw. 
5       IN      PTR     pc5.school.edu.tw. 
6       IN      PTR     pc6.school.edu.tw. 
7       IN      PTR     pc7.school.edu.tw. 
8       IN      PTR     pc8.school.edu.tw. 
9       IN      PTR     pc9.school.edu.tw. 
10      IN      PTR     pc10.school.edu.tw.
```
* reverse zone file 要注意的是 origin domain 變成了 1.16.172.in-addr-arpa, 所以==每個 IP 對應到的 domain name 寫的都是完整名稱而且都以 . 作結束.==

## 參考資料 References
1. [BIND 介紹](http://faculty.ndhu.edu.tw/~comput/computer_c/training/hbc0122/dns-2.htm)