Author Topic: วันนี้ มีโจทย์คือทำ dns slave ให้กับ dns master ที่เป็น direct admin ครับ  (Read 5968 times)

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
วันนี้ มีโจทย์คือทำ 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.  ;)
« Last Edit: พฤษภาคม 13, 2017, 11:43:41 AM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ถ้าตัว Master DNS เป็นตระกูล debian / ubuntu
ให้ทำการเพิ่ม allow interface ipv4 listen ไว้ด้วยนะครับ
vi named.conf.options
เพิ่มในส่วนของ options
listen-on { any; };

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ถ้าใน freebsd ต้องทำการ generate configure key ใหม่สำหรับ rndc ก่อนนะครับ ถึงจะใช้งาน
rndc reload ได้ โดยการ

#rndc-confgen

1.เสร็จแล้วทำการเขียน ค่า configure ที่ถูกปริ้นออกมาจาก rndc-confgen ใส่ rndc.conf

# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-mdx;
        secret "eUYhsadsfe2asdfasd99==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf

2.ทำการเพิ่ม configure นี้ลงใน named.conf

# Use with the following in named.conf, adjusting the allow list as needed:
key "rndc-key" {
       algorithm hmac-mdx;
        secret "eUYhsadsfe2asdfasd99==";
 };
 
controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};
# End of named.conf

แล้วทำการ restart named 1 รอบ

#/usr/local/etc/rc.d/named restart

เท่านี้ก็สามารถทำการ rndc reload ได้ละครับ
#rndc reload
server reload successful

เรียบร้อยครับผม : )
« Last Edit: ธันวาคม 23, 2018, 05:28:44 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
###FreeBSD แก้ไขเรื่อง write permission in directory
Change in /etc/mtree/BIND.chroot.dist

/set type=dir uname=root gname=wheel mode=0755

to

/set type=dir uname=bind gname=wheel mode=0755

เสร็จแล้วทำการ save ออกมา ทำการปรับ permission ดังนี้
cd /var/named/etc
chown bind:wheel namedb

แล้วทำการ restart bind 1 รอบ
/usr/local/etc/rc.d/named restart
« Last Edit: ธันวาคม 26, 2018, 04:30:11 PM by golfreeze »

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ถ้าไม่ได้จริงๆ ให้ปรับไปใช้เป็น rsa นะครับผม
#ssh-keygen -t rsa -b 2048
แทนนะครับ แล้วในส่วนของ sshd_config
ให้ใช้เป็น
PubkeyAuthentication yes
PasswordAuthentication no

golfreeze

  • Administrator
  • Hero Member
  • *****
  • Posts: 2140
    • View Profile
    • นั่งสมาธิ สติปัฏฐานสี่ พาเที่ยววัด แนะนำวัด แจกcd ธรรมะฟรี
    • Email
ในส่วนของ os : debian ให้ทำการเพิ่ม configure ที่เป็น

   notify explicit;
        also-notify { 103.24.x.y; };
        allow-notify { 103.24.x.y; };
        allow-transfer { 103.24.x.y; };
        version "Packetlove";

ลงในไฟล์ /etc/bind/named.conf.options
แล้วทำการ restart service ด้วยนะครับ
#service named restart

เท่านี้ก็จะแก้ไขปัญหา zone transfer AXFR/IN' denied ได้ครับ
Dec 24 20:40:02 named[1743]: zone abc.com/IN: loaded serial 2019122403
Dec 24 20:40:02 named[1743]: zone abc.com/IN: sending notifies (serial 2019122403)
Dec 24 20:40:02 named[1743]: client 103.24.x.y#60463 (abc.com): zone transfer 'astexproduct.com/AXFR/IN' denied

: )
Support [at] packetlove [dot] com team.