CASE STUDY • DNSSEC • ROOT KSK ROLLOVER
Resolver รุ่นเก่าไม่รู้จัก Root KSK-2024
จากการตรวจพบ จนถึงการแก้ไขอย่างปลอดภัย
บันทึกกรณีจริงของ recursive resolver ที่ใช้ BIND สาย 9.16 หลัง Root KSK rollover วันที่ 11 ตุลาคม 2026 (พ.ศ. 2569)
ข้อมูลระบบจริงถูกปิดบังทั้งหมด: ไม่มีชื่อเครื่อง, IP, ชื่อ view/โดเมนภายใน, บัญชีผู้ใช้ หรือ path ภายใน
1. สรุปสั้น
- อาการ: resolver ที่ปิด DNSSEC validation ตอบ DNS ได้ปกติ แต่ไม่ปฏิเสธข้อมูลที่ลายเซ็นผิด เมื่อมีการเปิด
dnssec-validation autoบน BIND รุ่น 9.16 ทั้ง view กลับ SERVFAIL ทั่วไป - สาเหตุราก: ไฟล์ bootstrap root key ของ BIND หายไป ทำให้ BIND ใช้ key ที่ฝังในโปรแกรม ซึ่งมีเฉพาะ KSK-2017 (key tag
20326) แต่ root ลงนามด้วย KSK-2024 (key tag38696) แล้ว - ทางเลือกที่ดูเหมือนง่ายแต่ไม่แก้: อัปเดตแพ็กเกจ
dns-root-dataหรืออัปเกรด BIND ภายใน distribution รุ่นเก่า - วิธีแก้ที่เลือก: วางไฟล์
bind.keysที่มีinitial-ds 38696(ตรวจเทียบ IANA แล้ว) และเปิด validation ด้วย change ขนาดเล็ก พร้อมสำรองข้อมูลและ rollback - ผล: ทุก view ยอมรับ 38696 และ validation ทำงานจริง ส่วน persistence หลัง restart และการสังเกต 24 ชั่วโมงยังเป็นงานติดตาม
2. ภูมิหลัง: Root KSK rollover
IANA กำหนดให้ KSK-2024 (38696) เริ่มลงนาม DNSKEY RRset ของ root แทน KSK-2017 (20326) ในวันที่ 11 ตุลาคม 2026 โดย key ใหม่ถูกเผยแพร่ล่วงหน้าตั้งแต่ 11 มกราคม 2025 ผู้ดูแล validating resolver ต้องมั่นใจว่า resolver เชื่อถือ key ใหม่ ไม่ใช่เพียงเห็น key ในคำตอบ
| สิ่งที่ต้องแยก | ความหมาย | ตรวจจากอะไร |
|---|---|---|
| Trust anchor | key ที่ resolver เชื่อถือเป็นจุดเริ่มต้นการตรวจ | rndc secroots - / managed-keys status |
| Root DNSKEY ใน cache | ข้อมูลที่เคยรับมา ใช้ต่อได้จน TTL หมด อาจยังมีลายเซ็นจาก key เดิม | RRSIG signer ในคำตอบ + TTL คงเหลือ |
| การตรวจจริงของ client | ผลที่ client เห็นผ่าน resolver | AD flag, ผลของโดเมนที่ลายเซ็นผิด, delv |
3. วัตถุประสงค์และเป้าหมายของการแก้ไข
วัตถุประสงค์
- ให้ resolver เชื่อถือ KSK-2024 (
38696) ในทุก view ที่ให้บริการ และเปิด validation กลับมาอย่างต่อเนื่อง - ได้ trust anchor ที่ตรวจสอบที่มาได้ ไม่ใช่ key ที่คัดลอกจากแชตหรือคำนวณเองโดยไม่มีการเทียบ
- เปลี่ยนแปลงน้อยที่สุด กลับคืนได้ และอธิบายผลได้ด้วยหลักฐาน
เกณฑ์สำเร็จ
- Runtime แสดง
38696 ; managedทุก view ไม่ใช่initializing - Root DNSKEY ตอบพร้อม AD และ signer 38696; โดเมนปกติ validate ผ่าน
- โดเมนที่ลายเซ็นผิดได้ SERVFAIL และตอบได้เมื่อใช้
+cd - ข้อมูล authoritative และโดเมนภายในไม่ถดถอยเมื่อเทียบกับ baseline
- State คงอยู่หลัง restart และไม่มี validation error ผิดปกติในช่วงสังเกต
สิ่งที่ไม่ใช่เป้าหมาย
- ไม่ขยาย ACL หรือเปิด recursion กว้างเพื่อให้การทดสอบผ่าน
- ไม่ลบหรือ reset managed-key database แบบลองผิดลองถูก
- ไม่ flush cache เพื่อเร่งผลทดสอบ
- ไม่ปนงานอัปเกรด OS หรือ BIND เข้ากับ change นี้
4. ลำดับเหตุการณ์ (ใช้ลำดับ ไม่ระบุเวลาจริง)
delv ใช้ไม่ได้| # | สิ่งที่พบ | การตีความที่ถูกต้อง |
|---|---|---|
| 1 | Resolver ตอบ root DNSKEY ที่ลงนามด้วย 38696 แต่ไม่มี AD flag และไม่มี trust anchor ใน runtime | เป็นการปิด validation ตามนโยบาย ไม่ใช่ความเสียหายจาก rollover แต่ก็ไม่ได้รับการป้องกันจาก DNSSEC |
| 2 | โดเมนทดสอบที่ลายเซ็นผิดยังตอบ NOERROR | สอดคล้องกับ validation ถูกปิดหรือถูกข้าม |
| 3 | Sentinel ของ RFC 8509 ทั้งคู่ตอบปกติ | ใช้ตัดสินไม่ได้ — ต้องใช้หลักฐาน runtime |
| 4 | delv บนเครื่องตรวจแจ้ง no crypto support | เป็นข้อจำกัดของเครื่องตรวจ ไม่ใช่ความผิดของ resolver (ดูหัวข้อ 5–6) |
| 5 | หลังเปิด dnssec-validation auto: root DNSKEY และโดเมนปกติ SERVFAIL, +cd ตอบได้, log แจ้ง DNSKEY set for zone '.' could not be verified with current keys | ปัญหาอยู่ที่การตรวจลายเซ็นของ root ไม่ใช่โดเมนปลายทาง |
| 6 | ทั้ง view มี trust anchor แค่ 20326 สถานะ initializing และ no trust | BIND bootstrap ด้วย key เก่าอย่างเดียว |
| 7 | Resolver รุ่นใหม่กว่า (BIND 9.18 ล่าสุด) ในสภาพแวดล้อมเดียวกันเชื่อถือ 38696 ทันทีเมื่อเปิด validation | เป็นตัวอ้างอิงว่า bootstrap file ที่ถูกต้องควรเป็นอย่างไร |
5. ข้อจำกัด
5.1 ข้อจำกัดของเครื่องที่ใช้ตรวจ
- เครื่องตรวจเป็น macOS ซึ่งมี
delv9.10.6 มากับระบบ ไม่มี crypto support จึงไม่โหลด trust anchor และตรวจ DNSSEC ไม่ได้ digตัวเก่าให้ AD flag ได้แค่ตามที่ resolver รายงาน ไม่ได้ตรวจลายเซ็นเอง- เครื่องตรวจอยู่ใน client network กลุ่มเดียว จึงเห็นได้เพียง view เดียว
5.2 ข้อจำกัดของ resolver เป้าหมาย
- BIND สาย 9.16 ซึ่ง ISC ประกาศ end-of-life แล้ว และ distribution รุ่นนั้นมีแพ็กเกจ BIND ใหม่สุดเพียง 9.18.30
- BIND 9.16.x และ 9.18.30 ที่ ISC ปล่อย ไม่มี key 38696 ใน
bind.keysและในตัวโปรแกรม ISC เพิ่มinitial-ds 38696ตั้งแต่ 9.18.39 / 9.20.x - ไฟล์
bind.keysเป็น conffile ของแพ็กเกจ และถูกลบไปก่อนหน้า - มีสอง view ที่ใช้ ACL ร่วมกัน ทำให้บาง view ไม่มี client ที่ได้รับอนุญาต recursion ให้ทดสอบ
5.3 ข้อจำกัดของการทดสอบ
- การทดสอบ sentinel ใช้ได้ต่อเมื่อ resolver รองรับ RFC 8509 เท่านั้น
- Root DNSKEY ที่ cache อยู่อาจยังมีลายเซ็นจาก key เดิม จึงยังไม่เห็นการรับข้อมูลชุดใหม่จนกว่า cache จะหมดอายุ
- การ reload หรือ restart ระหว่างตรวจจะทำให้ผลการสังเกตเปลี่ยน จึงต้องแยกการตรวจแบบอ่านอย่างเดียวออกจากการเปลี่ยนแปลง
6. Workaround ในการตรวจสอบ
6.1 เครื่องมือ delv: ตรวจ DNSSEC บนฝั่ง client
delv (DNS lookup and validation utility) เป็นเครื่องมือของ ISC BIND สำหรับดึงคำตอบ DNS และตรวจลายเซ็นบนเครื่องที่รันคำสั่ง โดยขอ DNSKEY และ DS เพื่อสร้างห่วงโซ่จาก root ถึงโดเมน ไม่เพียงเชื่อ AD flag ที่ resolver ส่งมา
| เครื่องมือ | ทำหน้าที่ | ข้อจำกัด |
|---|---|---|
dig +dnssec | ขอ DNSSEC records และแสดงคำตอบ รวมถึง RRSIG, AD และ CD | ไม่ตรวจลายเซ็นเอง |
delv | ตรวจลายเซ็นและ trust chain ด้วย trust anchor ฝั่ง client | ต้องมี crypto support, anchor ที่ถูกต้อง และ resolver ที่ส่งข้อมูลครบ |
rndc | ตรวจ runtime trust anchors และ managed-key state ของ BIND server | ต้องมีสิทธิ์บน server; ผลไม่แทนการทดสอบเส้นทาง client |
ติดตั้งและตรวจเครื่องมือ
# Ubuntu/Debian: ตัว delv อยู่ในแพ็กเกจ bind9-dnsutils
sudo apt-get install bind9-dnsutils
command -v delv
delv -v
# macOS: ติดตั้ง BIND tools จาก Homebrew ไม่ต้องเปิดบริการ DNS
brew install bind
"$(brew --prefix bind)/bin/delv" -v
# เลือก BIND tools สำหรับ shell ปัจจุบัน โดยไม่แทนที่ binary ของระบบ
export PATH="$(brew --prefix bind)/bin:$PATH"
command -v delv
delv -v
ตรวจแพ็กเกจที่ผู้ผลิตรองรับสำหรับ OS ของคุณก่อนติดตั้ง; การติดตั้งอาจอัปเดต dependencies หากจะบันทึก PATH ลงไฟล์ shell ให้สำรองและตรวจ checksum ก่อนแก้ ไม่ต้องเปิดบริการ named เพียงเพื่อใช้เครื่องมือ client
คำสั่งใช้งาน
# แทน RESOLVER_IP ด้วย resolver จริง และรันจากเครือข่ายที่ ACL อนุญาต
delv @RESOLVER_IP iana.org. A
delv @RESOLVER_IP +rtrace iana.org. A # แสดง query ที่ใช้ประกอบการตรวจ
delv @RESOLVER_IP +vtrace iana.org. A # แสดงขั้นตอน validation
delv @RESOLVER_IP +tcp iana.org. A # ทดสอบ transport TCP
delv @RESOLVER_IP . DNSKEY # ตรวจ root DNSKEY
delv @RESOLVER_IP dnssec-failed.org. A # ข้อมูลที่ลายเซ็นผิดควรถูกปฏิเสธ
ถ้าไม่ระบุ @RESOLVER_IP เครื่องมือจะเลือก resolver จาก configuration ของเครื่องตรวจ จึงต้องระบุ endpoint ให้ชัดเจนเมื่อตรวจระบบเป้าหมาย อย่านำ options ของ dig เช่น +time, +tries หรือ +cd มาใช้กับ delv โดยไม่ตรวจคู่มือรุ่นนั้น
อ่านผลและแยกสาเหตุ
| ข้อความ | ความหมาย | ตรวจต่อ |
|---|---|---|
fully validated | Client ตรวจลายเซ็นของคำตอบและ trust chain ผ่าน | ตรวจ signer ของ root และ runtime ของ resolver เพิ่ม เพื่อแยก cache เก่าจากการใช้ key ใหม่ |
unsigned answer | คำตอบไม่ได้อยู่ภายใต้การรับรองด้วย DNSSEC | ตรวจ delegation/DS และนโยบาย ไม่ถือว่าเป็นข้อมูลปลอมหรือ failure อัตโนมัติ |
no crypto support / No trusted keys were loaded | เครื่องตรวจเริ่ม validation ไม่ได้ | ตรวจ binary/version และ trust-anchor source ไม่ตีความเป็น outage ของ DNS เป้าหมาย |
got insecure response; parent indicates it should be secure | Client ไม่ได้รับหลักฐาน DNSSEC ที่จำเป็นสำหรับข้อมูลซึ่งควรตรวจได้ | หากพบที่ root DNSKEY ให้ตรวจว่า RRSIG DNSKEY ถูกส่งมาหรือไม่ ด้วย dig +tcp +dnssec |
broken trust chain | Client ตรวจห่วงโซ่ต่อไม่ได้ | ดู trace ว่าขาดหรือผิดที่ root, DS หรือ DNSKEY; เทียบ query ปกติกับ dig +cd และ resolver ที่ตรวจผ่าน |
resolution failed: failure | ไม่ได้คำตอบที่นำมาตรวจสำเร็จ | แยก SERVFAIL, ACL, timeout และ known-bogus test ก่อนสรุป root-anchor failure |
delv ใช้ validator library ของ BIND เช่นเดียวกับ named จึงเป็นการตรวจจาก client แยกเครื่อง/แยก trust anchor ไม่ใช่ implementation ต่างผู้ผลิต แม้ resolver ปิด validation ก็อาจส่งข้อมูลครบจน delv ตรวจผ่านได้ จึงต้องใช้ runtime และ valid/bogus controls ประกอบเสมอTrust anchor ของ delv แยกจาก managed-key database ของ server และไม่ได้ทำ RFC 5011 maintenance เอง หากต้องใช้ -a ANCHOR_FILE ต้องรับไฟล์จากแหล่งที่เชื่อถือและตรวจรูปแบบให้ตรงรุ่น ห้ามตั้ง anchor จาก DNSKEY ที่เพียงดึงได้โดยยังไม่พิสูจน์ที่มา
delv เพื่อแยกปัญหาของเครื่องตรวจ, เส้นทาง resolver และ upstream ก่อนสรุป6.2 Workaround และขอบเขตการยืนยัน
| ข้อจำกัด | วิธีเลี่ยง | ยืนยันได้ | ยังยืนยันไม่ได้ |
|---|---|---|---|
delv ของ macOS ไม่มี crypto | ติดตั้ง BIND tools จาก Homebrew (ไม่เปิดบริการ named) และเรียกด้วย path เต็ม แล้วค่อยปรับ PATH ภายหลังพร้อมสำรองไฟล์ shell | ตรวจลายเซ็นตั้งแต่ root ถึงโดเมนเอง (fully validated) | ไม่รับรองว่า resolver เองตรวจผ่าน |
| AD flag อาจเชื่อไม่ได้อย่างเดียว | ใช้โดเมนที่ลายเซ็นผิดเป็น control เทียบกับ +cd และเทียบกับ resolver สาธารณะที่ validate | แยก validation failure ออกจาก outage | ไม่ระบุสาเหตุภายในเอง |
| Sentinel ไม่ชี้ชัด | ใช้ anchor ที่ใช้งานจริงจากคำสั่งฝั่งเซิร์ฟเวอร์ ควบคู่กับ log | สถานะ trusted / initializing | การรับ key ใหม่หลัง cache หมด |
| Resolver ส่ง root DNSKEY ไม่มี RRSIG | ใช้ dig +tcp +dnssec เทียบหลาย upstream และอ่าน trace จาก delv +rtrace | ระบุว่าข้อมูลขาดตรงจุดใด | ไม่สรุปว่าเกิดจากค่าปิด validation |
| View ที่ไม่มี client ทดสอบ | ใช้ dig -b <SECONDARY_IP> บนเซิร์ฟเวอร์เพื่อเลือก view | ตรวจหลักฐาน runtime ของ view นั้น | ไม่ถือเป็น client E2E หาก ACL ไม่อนุญาต recursion |
| ผลตรวจก่อนหน้าอาจผ่านเพราะ cache | อ่าน TTL คงเหลือ และไม่ flush cache เพียงเพื่อให้ผลดี | เวลาที่ cache จะหมดอายุโดยประมาณ | ไม่ยืนยัน post-cache-turnover จนกว่าจะตรวจซ้ำ |
# ตรวจจาก client (RESOLVER_IP คือ resolver ที่ต้องการทดสอบ)
dig @RESOLVER_IP . DNSKEY +dnssec +tcp
dig @RESOLVER_IP isc.org A +dnssec
dig @RESOLVER_IP dnssec-failed.org A +dnssec # คาด SERVFAIL ถ้า validation ทำงาน
dig @RESOLVER_IP dnssec-failed.org A +dnssec +cd # คาด NOERROR (ข้ามการตรวจเพื่อเทียบ)
delv @RESOLVER_IP +rtrace iana.org. A # ต้องเป็น "fully validated"
# ตรวจบนเซิร์ฟเวอร์ BIND ที่มีสิทธิ์ (ทุก view ที่ให้บริการ)
sudo rndc secroots - # ต้องมี ./RSASHA256/38696 ; managed
sudo rndc managed-keys status
delv เสมอ ไม่ใช้ exit code อย่างเดียว เพราะ delv อาจคืน exit 0 แม้รายงาน resolution failed7. สาเหตุราก
- BIND 9.16 อ่าน bootstrap root key จาก
/etc/bind/bind.keysเมื่อเปิดdnssec-validation auto - ไม่พบไฟล์ log จึงแจ้ง
unable to open ... using built-in keysและ BIND ใช้ key ที่ฝังในโปรแกรมซึ่งมีเฉพาะ20326 - Root zone ลงนาม DNSKEY RRset ด้วย
38696แล้ว จึงตรวจด้วย key ที่มีอยู่ไม่ผ่าน ระบบจึงถือว่า trust chain พัง - เพราะ managed-key zone ของแต่ละ view ว่างเปล่า BIND จึงไม่เริ่ม RFC 5011 hold-down และอยู่ในสถานะ
initializing
bind.keys BIND จึงใช้ key ที่ฝังมา (20326) แต่ root ลงนามด้วย 386968. ทางเลือกที่พิจารณา
| ทางเลือก | ผล | เหตุผล |
|---|---|---|
อัปเดต dns-root-data อย่างเดียว | ไม่พอ | อัปเดตไฟล์รูปแบบ zone-record ที่ BIND ไม่อ่าน ไม่แตะไฟล์ bind.keys |
| อัปเกรด BIND ภายใน distribution รุ่นเก่า | ไม่แก้ | รุ่นที่มีให้ (9.18.30) ยังไม่มี 38696; ตรวจจากไฟล์ .deb จริงเทียบ SHA-256 กับ index |
| ติดตั้งแพ็กเกจของ release อื่นหรือ build จาก source | ไม่แนะนำ | ไม่มีเส้นทางรับ security update และเสี่ยง dependency |
วาง bind.keys ที่มี initial-ds 38696 แล้วเปิด validation | เลือก | ขอบเขตเล็ก ตรวจสอบที่มาได้ และ rollback ง่าย |
| อัปเกรด OS หรือย้ายไปเครื่องใหม่ | โครงการแยก | จำเป็นเรื่องอายุซอฟต์แวร์ แต่กระทบกว้าง ต้องมี snapshot และแผนทดสอบ |
9. ขั้นตอน change (แบบทั่วไป)
9.1 พิสูจน์ข้อมูล trust anchor ก่อนใช้
- ดาวน์โหลด
root-anchors.xml,root-anchors.p7sและicannbundle.pemจาก IANA - ตรวจลายเซ็น:
openssl cms -verify -binary -inform DER -in root-anchors.p7s -content root-anchors.xml -CAfile icannbundle.pem -purpose any -out /dev/null - เทียบ DS digest ของ
38696ใน XML (SHA-256:683D2D0ACB8C9B712A1948B27F741219298D0A450D612C483AF444A4C0FB2B16) กับinitial-dsในไฟล์ที่จะวาง - คำนวณ DS จาก root DNSKEY สดด้วย
dnssec-dsfromkey -2เพื่อยืนยันว่าตรงกับ IANA - ให้
named-checkconfของรุ่นปลายทางอ่านไฟล์ได้
9.2 ตรวจก่อนเริ่ม (หยุดถ้าข้อใดไม่ผ่าน)
- ยืนยันรุ่น BIND และ path ที่
named -Vระบุสำหรับ root key - จำนวน
KEYDATAในไฟล์*.mkeysของ ทุก view ต้องเป็น 0 — BIND จึงจะเชื่อถือ key จาก bootstrap ได้ทันทีโดยข้าม hold-down 30 วัน ถ้าไม่เป็นศูนย์ให้หยุดและประเมินใหม่ ห้ามลบไฟล์เพื่อไปต่อ - เวลาเครื่อง synchronized และ upstream ส่ง root DNSKEY พร้อม RRSIG ของ 38696
- มีช่องทางให้ผู้ใช้ใช้ resolver สำรองที่ตรวจแล้วว่ารองรับ split DNS
9.3 สำรองพร้อมตรวจ checksum
B=<BACKUP_DIR> # โฟลเดอร์สิทธิ์ root เท่านั้น
sudo cp -a /etc/bind/named.conf /etc/bind/named.conf.options "$B/"
sudo cp -a <MANAGED_KEYS_DIR>/*.mkeys* "$B/"
sudo sh -c "cd $B && sha256sum * > SHA256SUMS && sha256sum -c SHA256SUMS"
sudo rndc secroots - | sudo tee "$B/secroots-before.txt" >/dev/null
9.4 ดำเนินการ
- วางไฟล์
bind.keysที่มีinitial-keyของ 20326 และinitial-dsของ 38696 ตามสิทธิ์ที่ BIND อ่านได้ - เปลี่ยนเฉพาะ
dnssec-validation no;เป็นdnssec-validation auto;แล้วตรวจnamed-checkconf - Activate ด้วย
rndc reconfig(ไม่ restart ในรอบนี้) - ตรวจ log ต้องเห็นการอ่าน
bind.keysและDNSKEY ID 38696 is now trustedในทุก view - รัน
rndc managed-keys syncเพื่อบันทึก state ลงดิสก์ แล้วตรวจว่า keyzone ของทุก view มี 38696
9.5 Rollback
เงื่อนไข: เห็น could not be verified with current keys หลัง activate, โดเมนปกติหรือโดเมนภายในสำคัญ SERVFAIL, หรือ 38696 ไม่ managed ในบาง view
- คืน
named.conf.optionsจาก backup ที่ตรวจ checksum แล้ว ตรวจ syntax และrndc reconfig - ตรวจ hash ของไฟล์ที่คืน, runtime และ valid queries ซ้ำ ไม่ถือว่า script สำเร็จเพียงเพราะ exit 0
- ไม่ลบ
bind.keysและไม่ restore หรือ reset managed state ในขั้นนี้
10. ผลที่ได้ และระดับของหลักฐาน
| ระดับการตรวจ | สถานะ | รายละเอียด |
|---|---|---|
| Runtime anchor ฝั่งเซิร์ฟเวอร์ | ผ่าน | ทุก view แสดง 20326 และ 38696 เป็น managed; log ระบุ 38696 trusted |
| Client ใน view ที่ทดสอบได้ | ผ่าน | root และโดเมนปกติ NOERROR + AD; โดเมนผิด SERVFAIL; +cd ตอบได้; sentinel คู่ถูกต้อง; delv fully validated |
| Baseline ข้อมูล authoritative | ไม่เปลี่ยน | ผล SOA ก่อน/หลัง change ตรงกันทุกรายการที่ตรวจ |
| State บนดิสก์ | ผ่าน | keyzone ของทุก view มี 38696 หลัง sync |
| Client E2E ของ view ที่เหลือ | จำกัด | ยืนยัน anchor ได้ แต่ยังไม่มี client ที่ได้รับอนุญาต recursion จึงไม่รายงานว่าทดสอบครบ |
| หลัง restart | ยังไม่ทำ | รอช่วงเวลา change ที่อนุมัติ |
| สังเกตต่อเนื่อง ≥ 24 ชั่วโมง | ยังไม่ครบ | รวมการตรวจหลัง root DNSKEY cache เดิมหมดอายุ |
แยกรายงานระหว่าง static check, การทดสอบ runtime จริง และการ rollback ไม่รวมกัน: การ rollback ถูกเตรียมและตรวจ syntax แล้ว แต่ ไม่ได้ถูกใช้และยังไม่ได้ทดสอบกับ production
11. สิ่งที่ยังเปิดอยู่
- ตรวจ persistence หลัง restart ภายใต้ approval — ต้องยืนยันว่า 38696 ยัง managed และไม่เริ่ม state ใหม่
- สังเกต ≥ 24 ชั่วโมง แยกข้อผิดพลาดของโดเมนเฉพาะ, network timeout และ validation failure ของ root; ไม่ใช้จำนวนบรรทัด log เป็นอัตรา SERVFAIL หากไม่มีจำนวน query ทั้งหมด
- กำหนดว่า view ภายนอกต้องให้บริการ recursion หรือไม่ แล้วหา client ที่ได้รับอนุญาตมาทดสอบ โดยไม่ขยาย ACL เพื่อให้ผ่าน
- วางแผนอัปเกรด OS/BIND แยกต่างหาก และเมื่ออัปเกรดต้องจัดการ conffile ด้วย
--force-confoldพร้อมตรวจว่า 38696 ยังอยู่
12. บทเรียนและ checklist สำหรับผู้ดูแลอื่น
- “Resolve ได้” ไม่เท่ากับ “validate ได้” — ทดสอบด้วยโดเมนที่ลายเซ็นผิดและเทียบ
+cd - ตรวจ
named -Vและ log ตอนเริ่มระบบว่าไฟล์ bootstrap ถูกอ่านจริงหรือใช้ built-in - อย่าเชื่อว่าการอัปเกรดแพ็กเกจจะนำ key ใหม่มาให้ ตรวจเนื้อไฟล์จริงของรุ่นที่จะติดตั้ง
- ก่อนเปิด validation บน BIND รุ่นเก่า ให้ตรวจ trust anchor ที่ bootstrap ได้ล่วงหน้า และตรวจทุก view
- ตรวจให้แน่ใจว่าเครื่องมือตรวจมีความสามารถพอ (crypto) ก่อนตีความผล
- เก็บหลักฐานก่อน/หลัง change สำรองด้วย checksum และเตรียม rollback ที่ไม่ลบ state โดยไม่จำเป็น
- ระบุข้อจำกัดของการทดสอบอย่างเปิดเผย แทนการรายงานว่า “ผ่านทั้งหมด”