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