DNS server建置
這學期修了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.90ws 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:
- recursive query : 當你向一台主機詢問某domain的ip時,如果那台主機不知道,他會詢問其他主機,直到得到答案或是直到fail。
- iterative query : 主機只會回應他authority 的ip,client需要自己再像別的主機發出query。
Zone Update:
- 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調整。