วันนี้ มีโจทย์คือทำ dns slave ให้กับ dns master ที่เป็น direct admin (DA) ครับ
ในกรณีมีเครื่อง Master dns เป็น DirectAdmin และต้องการทำ Slave dns ไว้ที่อีกเครื่อง โดยมีข้อแม้ว่า
1. ถ้า zone file ของ domain name มีการ เพิ่ม/อัฟเดท/หรือลบ ที่เครื่อง Master ให้ทำการ transfer มายังเครื่อง slave ด้วย
#server1
192.168.1.1 ( Master DNS )
#server2
192.168.1.2 (Slave DNS)
เริ่มเลยครับ ที่เครื่อง DNS Server1 ใน DA ทำการอัฟเดท configure ดังนี้เพื่อทำการ transfer ไปยังเครื่อง slave
server1#cp /etc/named.conf /etc/named.conf.ori
ทำการเพิ่ม configure ลงใน ส่วนที่เป็น options { }
server1#vi /etc/named.conf
options {
notify explicit;
also-notify { 192.168.1.2; };
allow-notify { 192.168.1.2; };
allow-transfer { 192.168.1.2; };
}
ต่อไปทำการ generate ssh key เพื่อใช้ในการ transfer ครับ
server1:~# cd /root/
server1:~# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): <PRESS ENTER TO ACCEPT DEFAULT>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <PRESS ENTER FOR NO PASSPHRASE>
Enter same passphrase again: <PRESS ENTER FOR NO PASSPHRASE>
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
15:24:ab:aa:c2:bd:40:50:65:bc:ee:22:22:dd:24:22 root@server1
หลังจากนั้นทำการ copy public key ไปยัง server2 เพื่อให้สามารถส่งไฟล์ไปได้ อัตโนมัติ โดยไม่ต้องใส่รหัส
server1:~# scp /root/.ssh/id_dsa.pub 192.168.1.2:/root/.ssh/authorized_keys
ที่เครื่อง Server2 ทำการเพิ่ม configure ลงไปที่ไฟล์ /etc/bind/named.conf.options
listen-on { any;};
version "packetlove";
notify explicit;
also-notify { 192.168.1.1; };
allow-notify { 192.168.1.1; };
allow-transfer { 192.168.1.1; };
หลังจากนั้นทำการสร้าง script dns_create_post.sh กับ dns_delete_post.sh ในเครื่อง Server1 (DA) ครับ
server1#cd /usr/local/directadmin/scripts/custom
server1# touch dns_create_post.sh
server1# touch dns_delete_post.sh
server1# chmod 700 *.sh
server1# chown diradmin:diradmin *.sh
เพิ่ม script ลงในเครื่อง Server1 (DA) ตามไฟล์ /usr/local/directadmin/scripts/custom/dns_create_post.sh ดังค่าด้านล่าง
#!/bin/sh
/usr/bin/ssh
root@192.168.1.2 '/bin/echo "zone \"'$domain'\" { type slave; file \"/var/cache/bind/'$domain'\"; masters { 192.168.1.1; }; };" >> /etc/bind/named.conf; /etc/init.d/bind9 restart'
exit 0;
เพิ่ม script ลงในเครื่อง Server1 (DA) ตามไฟล์ /usr/local/directadmin/scripts/custom/dns_delete_post.sh ดังค่าด้านล่าง
#!/bin/sh
/usr/bin/ssh
root@192.168.1.2 -- /bin/sed -e "'/^zone \"$domain\"/d'" -i /etc/bind/named.conf \&\& /bin/rm -f /var/cache/bind/$domain \&\& /etc/init.d/bind9 restart
exit 0;
เท่านี้ก็เรียบร้อยครับ : )
เวลาที่มีการอัฟเดท ที่ DNS Master ค่าจะถูกส่งมาที่ DNS Slave เลย ไม่ต้องรอdelay
ในกรณีถ้าต้องการเพิ่ม zone ที่มีอยู่แล้วแต่ไม่ใช่การสร้างใหม่ ต้องทำการนำ configure ไปใส่ในเครื่อง slave ก่อนนะครับ
เช่นจะเพิ่ม packetlove.com ก็
zone "packetlove.com" { type slave; file "/etc/named/packetlove.com"; masters { 192.168.1.1; }; };
เสร็จแล้วทำการ reload named ที่ slave node 1 ครั้งครับ
#/etc/init.d/bind9 reload
เสร็จแล้วก็สามารถไปเช็ค zone ได้ว่ามีการส่งมาจาก master มายัง dns slave หรือเปล่านะครับ
ถ้าทำถูกต้องจะต้องปรากฏ zone packetlove.com ในเครื่อง dns slave นะครับผม
ขอบพระคุณข้อมูลจาก ทีม Support Packetlove.com ครับ
บริษัท Packetlove IT Service and Consulting Co., Ltd.