จากบทความ คอนฟิก DDNS บนลินุกซ์ เมื่อคอนฟิก DNS Server ให้สามารถรองรับ Dynamic Update จาก DHCP Server ได้นั้น
ถ้าเราต้องการจะแก้ไขข้อมูล (record) ใน DNS Server หลังจากนี้ เช่นเพิ่ม (A record) name-to-ip address mapping เราไม่สามารถจะแก้ไขไฟล์ข้อมูลของแต่ละ zone ได้โดยตรง เพราะคุณสมบัติ DDNS จะไปปรับปรุงรูปแบบของไฟล์คอนฟิก zone ซึ่งถ้าเราไปแก้ไขเองโดยตรงเช่นใช้โปรแกรม vi รูปแบบของไฟล์นี้อาจเสียหายได้
วิธีที่จะทำได้อย่างถูกต้องนั้น ต้องใช้คำสั่ง nsupdate ซึ่งจะใช้ส่งคำสั่งในการเพิ่ม หรือลบข้อมูล (record) จาก DNS Server ได้
ในบทความนี้ จะเพิ่มคอนฟิกให้ nsupdate สามารถเปลี่ยนแปลงข้อมูลของ zone ได้สองโดเมนคือ “your-domain.com” และ “1.168.192.in-addr.arpa”
DNS Server เดิมก่อนการเปลี่ยนแปลง
ตัวอย่างคอนฟิก zone ก่อนที่จะแก้ไขของโดเมน “your-domain.com” และ “1.168.192.in-addr.arpa” ที่รองรับ DDNS อยู่แล้ว
key DDNS_KEY { algorithm hmac-md5; secret “Ed187bxUigx8kNlFwUHnbKlwrk2GfAkpBfYyNEJcPhbrhexf07f2sBoCyQjz”; };
zone “your-domain.com” IN { type master; file “zones/your-domain.com.zone”; allow-update { key DDNS_KEY; }; };
zone “1.168.192.in-addr.arpa” IN { type master; file “zones/192.168.1.zone”; allow-update { key DDNS_KEY; }; };
สร้าง TSIG key
เริ่มต้นต้องสร้าง TSIG key เพื่อใช้ encrypt ข้อมูลระหว่างคำสั่ง nsupdate และ DNS server โดยใช้คำสั่ง dnssec-keygen ในการสร้าง
ตัวอย่างการสร้าง TSIG key
[root@server ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST NSUPDATE_KEY Knsupdate_key.+157+59601
ผลลัพธ์ที่ได้จากการรันคำสั่ง จะมีไฟล์เกิดขึ้นสองไฟล์โดยมีชื่อไฟล์อยู่ในรูปแบบ K{name}.+157+{random} และลงท้ายเป็น key และ private
ตัวอย่างไฟล์ key ที่สร้างได้จากการรันคำสั่ง dnssec-keygen
[root@server ~]# ls -l total 8 -rw------- 1 root root 56 2008-06-28 17:01 Knsupdate_key.+157+59601.key -rw------- 1 root root 92 2008-06-28 17:01 Knsupdate_key.+157+59601.private
คำเตือน: ไฟล์ที่สร้างได้ทั้งสองไฟล์ต้องเก็บไว้อย่างปลอดภัย ไม่ให้ผู้ใช้งานอื่นที่ไม่มีสิทธิสามารถมองเห็นข้อมูลข้างในได้ แนะนำให้ตั้ง permission ไว้เป็น 600 และ owner และ group ของไฟล์เป็น root
แก้ไขไฟล์คอนฟิก named.conf
ขั้นต่อไปต้องนำ Key ที่สร้างได้ ไปใส่ไว้ในไฟล์ named.conf บน DNS Server โดยดูได้จากไฟล์ที่ลงท้ายด้วย .private ในบรรทัดที่มีคำว่า Key นำหน้า
[root@server ~]# cat Knsupdate_key.+157+59601.private Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: CABSl3MHsfjDQN7BnpIjCA== Bits: AAA=
จากตัวอย่าง Key ที่สร้างได้คือ CABSl3MHsfjDQN7BnpIjCA== ต้องนำ Key นี้ไปเพิ่มในไฟล์ named.conf บน DNS Server เพื่อรองรับการรันคำสั่ง nsupdate ได้
ตัวอย่างการเพิ่มคอนฟิกไฟล์ named.conf
key DDNS_KEY { algorithm hmac-md5; secret “Ed187bxUigx8kNlFwUHnbKlwrk2GfAkpBfYyNEJcPhbrhexf07f2sBoCyQjz”; }; key NSUPDATE_KEY { algorithm HMAC-MD5; secret "CABSl3MHsfjDQN7BnpIjCA=="; };
zone “your-domain.com” IN { type master; file “zones/your-domain.com.zone”; allow-update { key DDNS_KEY; key NSUPDATE_KEY; }; }; zone “1.168.192.in-addr.arpa” IN { type master; file “zones/192.168.1.zone”; allow-update { key DDNS_KEY; key NSUPDATE_KEY; }; };
ใช้คำสั่ง service เพื่อ restart DNS Server หลังจากแก้ไขไฟล์ named.conf
[root@server ~]# service named restart Stopping named: [ OK ] Starting named: [ OK ]
วิธีการรันคำสั่ง nsupdate
การรันคำสั่ง nsupdate ต้องระบบ –k เพื่อระบุไฟล์ key ที่จะใช้ โดยต้องเป็น key เดียวกับที่ระบุใน DNS Server โดยเลือกเป็นชื่อไฟล์ที่ลงท้ายด้วย private เมื่อใช้คำสั่ง nsupdate จะขึ้นเครื่องหมายมากกว่า “>” เพื่อรอรับคำสั่งที่ต้องการจะเปลี่ยนแปลง
[root@server ~]# nsupdate -k Knsupdate_key.+157+59601.private >
คำสั่งพื้นฐานของ nsupdate
- quit – ออกจากโปรแกรม
- update add – เพื่อข้อมูล (record) เข้าไปใน DNS Server
- update delete – ลบข้อมูล (record) ออกจาก DNS Server
- send – ส่งคำสั่งที่พิมพ์ไปแล้วไปยัง DNS Server
การใช้คำสั่ง nsupdate เพื่อแก้ไขข้อมูลใน DNS Server
หมายเหตุ: อย่าลืมระบุเครื่องหมายจุด “.” ต่อท้ายชื่อ
ตัวอย่างการเพิ่ม (A record) เพื่อ map ชื่อ newhost.your-domain.com ไปเป็น ip 192.168.1.52
> update add newhost.your-domain.com. 86400 A 192.168.1.52 > send
ตัวอย่างการลบ (A record) ที่ชื่อ unused.your-domain.com
> update delete unused.your-domain.com. A > send
ตัวอย่างการเพิ่ม (PTR record) ที่มี ip 192.168.1.52 เป็นชื่อ newhost.your-domain.com
> update add 52.1.168.192.in-addr.arpa. 86400 PTR newhost.your-domain.com. > send
ตัวอย่างการลบ (PTR record) ที่มี ip 192.168.1.50
> update delete 50.1.168.192.in-addr.arpa. PTR > send
หลังจากเปลี่ยนแปลงแล้ว สามารถใช้คำสั่ง host เพื่อตรวจสอบข้อมูลที่เปลี่ยนแปลงว่าถูกต้องหรือไม่
ข้อมูลอ้างอิง