การใช้คำสั่ง nsupdate เพื่อปรับปรุง record ใน DNS Server

จากบทความ คอนฟิก 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 เพื่อตรวจสอบข้อมูลที่เปลี่ยนแปลงว่าถูกต้องหรือไม่
ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.