# 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)