Shell Script Home DDNS (BIND9 nsupdate RFC2136)
Script นี้รองรับทั้ง IPv4 และ IPv6
แก้ไขไฟล์ /etc/bind/named.conf ให้เพิ่ม
include "/etc/bind/key/*.key";
สร้างไดเรกเทอรีใหม่ที่ /etc/bind/key
~ # mkdir -p /etc/bind/key
~ # cd /etc/bind/keyสร้าง TSIG key สามารถเลือกอัลกอริทึมได้ตามสะดวก
~ # tsig-keygen -a hmac-sha512 myhome.example.net > myhome.example.net.key
~ # cat myhome.example.net.keyตัวอย่าง
key "myhome.example.net" {
algorithm hmac-sha512;
secret "SFks+U1ZBh1Pd8YpQBPnP+QmafXdLhobwOP2rqtw6lRWoJ69IGoFZpa11fLh040QFvQe8fhaMgNIeXCQfe8EcA==";
};
แก้ไขไฟล์ /etc/bind/named.conf.local ให้เพิ่ม update-policy{}; inline-signing yes; ใน zone
zone "example.net" in {
. . .
inline-signing yes;
update-policy {
grant myhome.example.net name myhome.example.net. A AAAA;
};
. . .
};
โหลด config ใหม่
~ # rndc reconfig
ไฟล์ไบนารีที่แถมมาเป็น linux elf amd64 หากต้องการ build ใหม่ หรือ cpu ใช้สถาปัตยกรรมอื่น ๆ สามารถ build ขึ้นมาใหม่ได้โดยใช้คำสั่งmake
# ต้องการ gcc
~/HomeDDNS$ make
gcc -Os -s -Wall -Wextra -ffunction-sections -fdata-sections -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fomit-frame-pointer -Wl,--gc-sections src/gcc/validate-ipv4-6.c -o validate-ipv4-6.elfตัวอย่าง โดยสามารถสำเนา ddns.sh เป็นไฟล์อะไรก็ได้และแก้ไขชื่อ DNS ตามต้องการ และเพิ่มไปยัง crontab ประมาณนี้
# dns.sh จะไม่มีการดึง IP จาก internet โดยตรง โดยจะไปดึงจากแคชใน tmp แทน ต้องเพิ่ม get-ip.sh ลงไปด้วย นี่จะเป็นผลดีหากเครื่องนี้มีหลายโดเมน/หลาย script ในเครื่อง
# สามารถตั้งเวลา เรียกใช้ และ เวลา time out ตามความเหมาะสมได้เลย ในที่นี้จะเป็นเรียกทุก ๆ 60วิ หมดเวลา 30วิ
* * * * * /bin/timeout 30 /home/USER/HomeDDNS/get-ip.sh >/dev/null 2>&1
* * * * * /bin/timeout 30 /home/USER/HomeDDNS/ddns.sh >/dev/null 2>&1ต้องติดตั้ง jq, curl, nsupdate (bind9-dnsutils บน Debian, bind9-next-utils บน RHEL-based และ dnsutils บน Arch Linux) หากติดตั้งไว้แล้วก็สามารถใช้งานได้เลย
เพียงแค่แก้ไขไฟล์ Script ตามคำแนะนำข้างในไฟล์
อย่าลืมเพิ่มเรคคอร์ดเปล่าก่อนใช้ สามารถแก้ไขได้โดยใช้ editName.sh
ควรใช้คู่กับ crontab แนะนำให้เรียกใช้งานทุก ๆ 1 นาที หรือ แล้วแต่สะดวก แนะนำให้สอดคล้องกับ TTL