การอัปเดตเซิร์ฟเวอร์ VPN แบบไม่มีคนเฝ้าต้องมีเส้นทางกู้คืนที่ทดสอบแล้ว
การอัปเดตอาจรีสตาร์ตบริการที่คุณใช้เข้าถึงเซิร์ฟเวอร์ เปรียบเทียบคอนโซลนอกแบนด์กับแผนกู้คืนที่พึ่งอุโมงค์เพียงอย่างเดียวก่อนทำให้เป็นอัตโนมัติ
การอัปเดตแบบไม่มีคนเฝ้าเป็นนโยบายที่สมเหตุสมผลสำหรับเซิร์ฟเวอร์ที่คุณเข้าถึงผ่าน VPN ของมันเอง และในขณะเดียวกันก็เป็นจุดล้มเหลวจุดเดียวที่คุณสร้างขึ้นเอง การทำงานของแพ็กเกจจะรีสตาร์ตบริการ อุโมงค์ขาด และเส้นทางผู้ดูแลที่คุณใช้อยู่ก็หายไปพร้อมกับมัน มีรูปแบบการกู้คืนสองแบบ และการเลือกระหว่างสองแบบขึ้นอยู่กับเงื่อนไขเดียว คือคุณมี เส้นทางเข้าที่ไม่ผ่านสิ่งที่กำลังอัปเดตหรือไม่.
สองรูปแบบการกู้คืน หนึ่งเงื่อนไขชี้ขาด
รูปแบบแรกเชื่อในการอัปเดตและถือว่าคุณจะเชื่อมต่อใหม่ได้ในภายหลัง มันได้ผลเมื่อ VPN เป็นหนึ่งในหลายวิธีเข้าถึงโฮสต์ และเมื่อความล้มเหลวของอุโมงค์ไม่ได้พรากความสามารถในการวินิจฉัยของคุณ รูปแบบที่สองวางเส้นทางอิสระไว้ล่วงหน้า ซึ่งมักเป็นคอนโซลของผู้ให้บริการโฮสติ้ง และมองอุโมงค์เป็นสิ่งที่งานบำรุงรักษามีแนวโน้มจะทำให้เสียมากที่สุด ทั้งสองรูปแบบป้องกันได้ และมีเพียงแบบเดียวที่ต้องทำงานล่วงหน้า
เงื่อนไขชี้ขาดนั้นพูดง่ายและข้ามง่าย หากทุกเส้นทางผู้ดูแลไปยังเครื่องผ่านบริการที่กำลังอัปเดต คุณไม่มีรูปแบบการกู้คืนเลย มีเพียงความคาดหวัง จงพูดเรื่องนี้ให้ดังในการทบทวนการเปลี่ยนแปลง
การทดสอบเงื่อนไขนั้นใช้เวลาสิบนาทีและต้องเกิดขึ้นก่อนการอัปเดตแบบไม่มีคนเฝ้าครั้งแรก ไม่ใช่ระหว่างเหตุการณ์ เปิดคอนโซลขณะทุกอย่างทำงาน ยืนยันว่าข้อมูลรับรองยังใช้ได้ แล้วปิดอีกครั้ง ยืนยันว่าคอนโซลเปิดไปยังโฮสต์ที่คุณคิด จากนั้นยืนยันว่าการเข้าสู่ระบบที่คุณจะใช้จริงตอนตี 3 ยังใช้งานได้
ส่วนสุดท้ายนั้นสำคัญกว่าที่ได้ยิน บัญชีคอนโซลที่รหัสผ่านถูกเปลี่ยนเมื่อหกเดือนก่อนและไม่เคยตรวจสอบเลยไม่ใช่เส้นทางกู้คืน มันเป็นเอกสารที่อธิบายเส้นทางเช่นนั้น
สิ่งที่แบ็กอัปไม่ได้กู้คืน
คลังการกำหนดค่าเป็นบันทึกของไฟล์ และการอัปเดตเปลี่ยนมากกว่าไฟล์ สถานะแพ็กเกจ โมดูลเคอร์เนล ลิงก์ยูนิตที่เปิดใช้งาน และกฎไฟร์วอลล์ที่ใช้ผ่านเครื่องมือแยก ต่างอยู่นอกไดเรกทอรีการกำหนดค่า และการกู้คืนที่เพิกเฉยต่อสิ่งเหล่านั้นจะให้เครื่องที่ดูเหมือนกำหนดค่าแล้วแต่ไม่ส่งต่อ
| What changed | Restored by a configuration backup | Needs its own action |
|---|---|---|
| Service unit or startup ordering | Partly, if the unit file was included | Package state and enabled links |
| Kernel module or interface support | No | Kernel or module rollback, or a boot-time decision |
| Peer or device authorization | Only if the backup predates the revocation | A deliberate decision about which peers return |
| Firewall rules applied outside the config | Only if they were captured | Replaying and verifying each rule |
การอนุญาตสมควรมีบรรทัดของตัวเอง แบ็กอัปที่ถ่ายก่อนอุปกรณ์ที่ถูกบุกรุกจะถูกถอดออกจะคืนสิทธิ์การเข้าถึงของอุปกรณ์นั้นอย่างเต็มใจ การย้อนกลับไปหามันระหว่างที่ระบบล่มคือวิธีที่เหตุการณ์หนึ่งกลายเป็นสองเหตุการณ์ และการตัดสินใจกู้คืนควรทำกับเพียร์อย่างชัดเจนพอ ๆ กับที่ทำกับไฟล์
กลไกของการย้อนกลับก็สำคัญ การคัดลอกไฟล์เรียกทำงานรุ่นเก่าทับไฟล์ที่จัดการโดยแพ็กเกจไม่ใช่การย้อนกลับที่รองรับของการเปลี่ยนแปลงแพ็กเกจ และมันปล่อยให้ฐานข้อมูลแพ็กเกจอธิบายสถานะที่ระบบไฟล์ไม่ตรงกัน ใช้เส้นทางการลดเวอร์ชันของตัวจัดการแพ็กเกจเองหรือสแนปช็อตที่ผู้ให้บริการเสนอ การลดเวอร์ชันที่ฐานข้อมูลแพ็กเกจบันทึกไว้คือสิ่งที่คุณทำซ้ำได้
ไม่มีข้อใดในนี้ที่โต้แย้งแบ็กอัป มันสนับสนุนการรู้ว่าอาร์ติแฟกต์แต่ละชิ้นครอบคลุมชั้นใด เพราะโหมดล้มเหลวของการกู้คืนบางส่วนสับสนกว่าการล่มครั้งแรก เขียนชั้นกำกับไว้ข้างแบ็กอัปแต่ละชุดในรันบุ๊ก
จุดตรวจสอบ อัปเดต แล้วตรวจสอบจากภายนอก
บันทึกสถานะก่อนการเปลี่ยนแปลงในรูปแบบที่คุณเปรียบเทียบได้ในภายหลัง เวอร์ชันที่ติดตั้ง ยูนิตบริการที่เกี่ยวข้อง ซ็อกเก็ตที่กำลังรับฟัง และรายการเพียร์ปัจจุบัน สี่คำสั่งครอบคลุมส่วนใหญ่ของสิ่งนี้บนโฮสต์ลินุกซ์
systemctl list-units --type=service | grep -E 'openvpn|wg-quick'
ss -lunp | grep -E ':51820|:1194'
journalctl -u wg-quick@wg0 --since '-10 min'
ตัวแรกแสดงว่ามียูนิตใดและกำลังทำงานหรือไม่ ตัวที่สองยืนยันว่าตัวรับฟังถูกผูกจริง และตัวที่สามให้คำอธิบายของบริการเองเกี่ยวกับไม่กี่นาทีที่ผ่านมา ไม่มีข้อใดพิสูจน์ว่าลูกค้าสามารถเชื่อมต่อได้ จึงเป็นเหตุให้ขั้นตอนถัดไปเกิดนอกโฮสต์ เก็บค่าที่อ่านได้เหล่านั้นเป็นฐานอ้างอิงของคุณ
ตรวจสอบจากเครือข่ายที่ไม่ใช้อุโมงค์ ยืนยันตัวตนลูกค้าที่ได้รับอนุญาตหนึ่งราย แปลชื่อหนึ่งชื่อ และเข้าถึงแอปพลิเคชันที่ตั้งใจหนึ่งตัว บรรทัดสถานะภายในที่บอกว่าอินเทอร์เฟซขึ้นคือข้อความเกี่ยวกับอินเทอร์เฟซ ไม่ใช่เกี่ยวกับการกำหนดเส้นทาง กุญแจ หรือนโยบายที่รับเพียร์
จากนั้นทดสอบเส้นทางเชื่อมต่อใหม่โดยเจตนา รีสตาร์ตบริการหนึ่งครั้งและยืนยันว่าอุโมงค์กลับมาโดยไม่ต้องแทรกแซงด้วยมือ เพราะบริการที่เริ่มทำงานถูกต้องเฉพาะตอนบูตคือบริการที่จะทำให้คุณประหลาดใจในจังหวะที่แย่ที่สุด
เมื่อมันล้มเหลว จงใช้เส้นทางที่คุณทดสอบแล้ว
ลำดับการกู้คืนไม่หรูหราและมันได้ผล เข้าถึงโฮสต์ผ่านเส้นทางอิสระ อ่านบันทึกของบริการเอง และกู้คืนจุดตรวจสอบเฉพาะที่ตรงกับความล้มเหลว เปลี่ยนทีละอย่างต่อการพยายามหนึ่งครั้ง เพื่อให้การอ่านบันทึกครั้งถัดไปมีความหมาย
ต้านทานแรงกระตุ้นที่จะทำการเปลี่ยนแปลงที่ไม่ได้บันทึกหลายอย่างเพื่อให้การเชื่อมต่อกลับมา เครื่องที่ซ่อมด้วยการแก้ไขห้าอย่างพร้อมกันไม่สามารถอธิบายได้ในภายหลัง และการอัปเดตครั้งถัดไปจะนำสิ่งที่รับน้ำหนักจริงกลับมา
จากนั้นตัดสินนโยบายถาวรด้วยหลักฐาน หากการอัปเดตเปิดเผยการพึ่งพาที่ไม่มีใครบันทึกไว้ การแก้ไขคือเอกสารและการทดสอบ ไม่ใช่การปิดการอัปเดต หากมันเปิดเผยบริการที่ไม่สามารถรีสตาร์ตได้สะอาด การแก้ไขอยู่ที่ยูนิต ไม่ใช่ที่ตารางเวลา
การเปรียบเทียบจบลงอย่างสะอาดเมื่อเงื่อนไขมีชื่อ เส้นทางอิสระทำให้การอัปเดตแบบไม่มีคนเฝ้าเป็นความเสี่ยงที่จัดการได้ การไม่มีมันทำให้โยบายเดียวกันกลายเป็นการหยุดชะงักที่วางแผนไว้โดยไม่ทราบเวลากู้คืน และไม่มีปริมาณระบบอัตโนมัติใดเปลี่ยนคณิตศาสตร์นั้น