DNS server建置

Khyler Lin
8 min readApr 25, 2018

--

這學期修了Network Administration ,這是其中的一個作業,由於蠻有實做的參與感,且設定上有些細節,故寫下來提供給大家跟未來的自己參考。

Server

在Digital Ocean 上建置一個dns server (可利用github educational pack免費建置)

domain name

在Godaddy 申請一個感覺較潮的domain name 😄

nctudaddy.com

Installation

這次利用bind9來建置我的DNS server。

sudo apt-get install bind9

Configuration

先來介紹一些常用檔案

  • named.conf : 當bind啟動時會去讀這個檔案裡面的東西,主要是會include其他的檔案以及其他設定(這次會用到的是logging這個設定)。
  • named.conf.local : 主要的zone設定區,zone都是在這邊建立並指定zone的設定檔位置(ie. db.file)
  • named.conf.options : 算是Global的zone options 設定。

/etc/bind/named.conf.local

zone "nctudaddy.com" {
type master;
file "/etc/bind/db.nctudaddy.com";
};
zone "sub.sugardaddy.guru" {
type master;
file "/etc/bind/db.sub.sugardaddy.guru";

/etc/bind/db.nctudaddy.com

$TTL    604800
@ IN SOA ns1.cntudaddy.com. admin.nctudaddy.com. (
1;
604800;
86400;
2419200;
86400 );
@ IN NS ns1.nctudaddy.com.
@ IN A 206.189.70.90
ns1 IN A 206.189.70.90
www IN A 206.189.70.90
;;delegation
sub IN NS ns1.sugardaddy.guru

完成上面兩個file 即可完成nctudaddy.com DNS 服務,可利用下面指令測試

dig nctudaddy.com

在./etc/bind/db.nctudaddy.com中我們有將sub.nctudaddy.com delegate給ns1.suagrdaddy.guru 這台主機。所以sub.nctudaddy.com 以及其延伸的domain都會交給那台主機管理。(也就是那台主機會有"sub.nctudaddy.com" 的zone 跟其相對應的zone file)

CNAME

/etc/bind/db.sub.sugardaddy.guru

$TTL      IN  SOA   ns1.nctudaddy.com. admin.nctudaddy.com. (
9;
5;
86400;
2419200;
86400 )
@ IN NS ns1.nctudaddy.com.
@ IN A 206.189.70.90
ws IN A 140.113.235.131
demo IN CNAME ws.sub.suagrdaddy.guru.

設定一個CANME的RR,當query deme.sub.sugardaddy.guru時,會回傳ws.sub.sugardaddy.guru的IP位置。

SSHFP

需要配合DNSSEC進行使用。

Generating SSH Key Fingerprint records

ssh-keygen -r sub.sugardaddy.guru
myserverplace.de IN SSHFP 1 1 db744817e8d6ac2027e6629aac7f0fc1750f6588 myserverplace.de IN SSHFP 1 2 a61db02b9b26ca48663c3272821b451773c7cd1e9a412f5a09994ec8f8738c79 myserverplace.de IN SSHFP 2 1 493a9e6a4b5078b1d0c5424aecf817ea54e1dfdf myserverplace.de IN SSHFP 2 2 064b9dd10805069eb508bd087a37db61fda2107138924112ded3ccdbaafd6cb3 myserverplace.de IN SSHFP 3 1 7c4b9b9105d6a0d7aacf44534a7800fc10466683 myserverplace.de IN SSHFP 3 2 cb6493b10e1103ff1dbab86989cfa96fa52370ac33efe6d468a5f70b8d323869 myserverplace.de IN SSHFP 4 1 69ac080ccf6cd52f4788373bd4dca21731e69713 myserverplace.de IN SSHFP 4 2 7cae4ff942899f8e155bfc675e72e4146a1bf4107977fe73c6cffa8f3fda8fc3

After getting the keys, put the record into the zone file.

View

針對不同ip進行的相同query給予不同回應。

/etc/bind/named.conf.local

view "linux" {
match-clients {104.113.235.131; 140.113.235.132;};
zone "sub.sugardaddy.guru" {
type master;
file "/etc/bind/db.linux";
};
};
view "bsd" {
match-clients {140.113.235.151; 140.113.235.152;};
zone "sub.suagardaddy.guru" {
type master;
file "/etc/bind/dn/bsd";
};
};

當不同ip來詢問sub.sugardaddy.guru時,可以在相對應的zone file給出不同的回應。

Logging

/etc/bind/named.conf

logging {
channel my_log {
file "/var/log/named/named.log" versions 3 size 2k;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default{my_log;};
category queries{my_log;};
category notify(my_log;);
category dnssec{my_log;};
};

可以指定存寫log檔的位置(/var/log/named/named.log),以及log rotate(version 3)和每個log檔的最大size(2k)。

可以利用下面指令來開始log設定

service bind9 restart

檢查是否成功

service bin9 status

若不成功可以查看/var/log/syslog 的錯誤訊息。

可能會出現一些permission denied 的訊息。更改/var/log/named/的權限跟所有者可以解決。

cd /var/log
chown -R bind:root named/
chmod -R 774 named/

待補充: slave zone, DNSSEC

名詞解釋:

DNS Query:

  1. recursive query : 當你向一台主機詢問某domain的ip時,如果那台主機不知道,他會詢問其他主機,直到得到答案或是直到fail。
  2. iterative query : 主機只會回應他authority 的ip,client需要自己再像別的主機發出query。

Zone Update:

  1. Full Zone Update(AXFR) : 整個zone的傳輸,當slave 的refresh 的時機到時,slave會像master發出query詢問他RR的serial number,當master serial number 比較大時,slave會像master發出AXFR request.

Note: Zone transfer會由TCP port 53傳輸,而DNS query會由UDP port 53穿輸

2. Incremental Zone Update(IXFR) : 只傳輸不同的RR,slave可以再options裡加入 request-ixfr 參數調整;master也可以用 provide-ixfr調整。

--

--