คุณกู้คืนสำรองข้อมูล บริการเริ่มทำงาน และไคลเอนต์เชื่อมต่อได้ในครั้งแรก ความสำเร็จนั้นคือกับดัก การกู้คืนคืนไฟล์ที่เซิร์ฟเวอร์มีในเวลาที่เก็บสแนปช็อต ไม่ใช่สถานะการเข้าถึงที่เปลี่ยนไปนับจากนั้น และถ้าปลายทางเดิมยังเข้าถึงได้ ตอนนี้คุณมีสองเครื่องที่ตอบตัวตนเดียวกัน ทางแก้ไม่ใช่สำรองข้อมูลที่ดีกว่า แต่คือการตัดสินว่าโฮสต์ที่กู้คืนมาควรเป็นอะไรก่อนจะตอบแฮนด์เชกแม้แต่ครั้งเดียว

สำรองข้อมูลคืนไฟล์ ไม่ใช่อำนาจ

สแนปช็อตเก็บการกำหนดค่าเซิร์ฟเวอร์ คีย์ส่วนตัว หน่วยออกใบรับรอง รายชื่อเพื่อน และกฎไฟร์วอลล์ตามที่เป็นตอนที่สำรองข้อมูลทำงาน มันเก็บสิ่งที่เปลี่ยนหลังจากนั้นไม่ได้: อุปกรณ์ที่คุณเพิกถอน คีย์ที่คุณออกใหม่ เพื่อนที่คุณลบเมื่อขายแล็ปท็อป ซับเน็ตที่คุณย้าย การกู้คืนย้อนไฟล์กลับไปยังเวลานั้น ไม่ได้ย้อนการตัดสินใจที่ผู้คนทำหลังจากนั้น

ความเสียหายมาจากช่องว่างนี้เอง แล็ปท็อปที่ถูกขโมยและเพิกถอนสองสัปดาห์หลังสำรองข้อมูลยังเสนอใบรับรองที่ตรวจสอบได้กับ CRL เก่าในทรีที่กู้คืน และเซิร์ฟเวอร์ยอมรับอุปกรณ์ที่คุณปลดระวางแล้ว WireGuard ตรงกว่า: เพื่อนได้รับอนุญาตเพราะอยู่ในรายชื่อ เพื่อนที่ลบหลังสแนปช็อตจึงกลับมาอยู่อีกครั้ง ไม่มีใครอนุมัติการเข้าถึงนั้นใหม่ ไฟล์เก่าทำ

ตัวตนของเซิร์ฟเวอร์และตัวตนของไคลเอนต์ล้มเหลวต่างกัน

ใน WireGuard ตัวตนของเซิร์ฟเวอร์คือคีย์ส่วนตัวใน wg0.conf การคัดลอกไฟล์นั้นไปยังโฮสต์ที่สองที่เข้าถึงได้จึงสร้างเซิร์ฟเวอร์สองตัวที่มีตัวตนเดียวกันและไม่รู้จักกัน แต่ละตัวมีรายชื่อเพื่อนของตัวเอง ลบเพื่อนบนโฮสต์ใหม่แล้วตัวเก่ายังยอมรับอยู่ ตรวจ wg show บนตัวหนึ่งแล้วคุณเห็นความจริงครึ่งเดียว ไคลเอนต์ก็ไม่ย้ายเองเช่นกัน: โปรไฟล์มี Endpoint หนึ่งรายการ อุปกรณ์จึงยังคุยกับที่อยู่ที่ตั้งค่าไว้ ซึ่งอาจเป็นโฮสต์ที่คุณตั้งใจจะปลดระวาง

OpenVPN ซ้ำในชั้นเดียวกันด้วยใบรับรองเซิร์ฟเวอร์ คีย์ส่วนตัวของมัน และคีย์คงที่ tls-auth หรือ tls-crypt คัดลอกทั้งสามแล้วไคลเอนต์แยกอินสแตนซ์ไม่ออก ถ้าทั้งสองเข้าถึงได้ การเชื่อมต่อใหม่อาจไปลงที่ตัวใดตัวหนึ่ง และไฟล์ล็อกแต่ละไฟล์เล่าเรื่องเพียงครึ่งเดียว หน่วยออกใบรับรองคือสำเนาที่ลึกกว่า ทรี easy-rsa ที่กู้คืนคือแหล่งความจริงที่สองซึ่งออกใบรับรองที่ใช้ได้ให้ชื่อใดก็ได้ที่คุณให้

ไคลเอนต์ก็ซ้ำด้วย ปกติระหว่างการย้ายข้อมูลเอง การคัดลอกโปรไฟล์ไปยังอุปกรณ์สำรอง «แค่เพื่อทดสอบ» ทำให้เกิดอุปกรณ์ที่สองที่มีคีย์และชื่อสามัญเดียวกัน ด้วย duplicate-cn ทั้งสองเซสชันอยู่พร้อมกันได้ และการกำหนดที่อยู่แบบคงที่ใน ccd หรือ ifconfig-pool-persist อาจชนกับอุปกรณ์เดิม นั่นคือสองเครื่องที่ใส่ตัวตนเดียว และไม่มีอะไรในการกำหนดค่าเซิร์ฟเวอร์แยกมันออกจากกัน

เลือกหนึ่งในสามสถานะสำหรับปลายทางเดิม

การกู้คืนปลอดภัยก็ต่อเมื่อชะตาของปลายทางเดิมถูกตัดสินแล้ว ปลดระวาง: บริการเดิมต้องหยุดรับพอร์ต VPN ก่อนที่โฮสต์ใหม่จะเริ่ม และถ้าคุณเข้าถึงเครื่องไม่ได้ ให้บล็อกพอร์ตนั้นที่ขอบเครือข่ายสำหรับทุกอย่างยกเว้นแหล่งผู้ดูแลของคุณ ซ่อมโฮสต์เดิม: การใช้ตัวตนซ้ำทำได้เพราะมีเครื่องเดียวถือมันไว้ แต่หลังจากนั้นทำลายสำเนาดิสก์หรือสแนปช็อต VM ของคีย์เก่าเพื่อไม่ให้กลับมาได้ สร้างคู่ความพร้อมใช้งาน: สองโฮสต์ต้องมีตัวตนโฮสต์ต่างกันบวกปลายทางร่วมหนึ่งจุด เช่น ที่อยู่ลอย ตัวบาลานซ์โหลด หรือ DNS ที่คุณย้ายได้ การคัดลอกคีย์ส่วนตัวไม่ใช่การออกแบบ failover แต่เป็นสองเซิร์ฟเวอร์ที่อ้างชื่อเดียว

ยืนยันว่าคุณอยู่ในสถานะใดจริง ๆ ก่อนแตะไคลเอนต์ โฮสต์เดิมที่ตอบบนพอร์ต VPN คือตัวที่จะยอมรับอุปกรณ์ที่เพิกถอน แม้ DNS จะย้ายแล้ว ตรวจผู้รับฟังและคีย์สาธารณะ:

ss -lunp | grep -E ':51820|:1194'
wg show wg0
wg pubkey < /etc/wireguard/server.key

ประสานเพื่อน การเพิกถอน และที่อยู่ก่อน

ทำรายการว่าการกู้คืนอ้างอะไรเทียบกับสิ่งที่ได้รับอนุญาตตอนนี้ ใน WireGuard wg show wg0 ให้คีย์ ปลายทาง แฮนด์เชกล่าสุด และตัวนับการรับส่งของแต่ละเพื่อน ซึ่งพอจะเห็นอุปกรณ์ที่คุณไม่ได้เป็นเจ้าของแล้ว ลบออกทันทีด้วย wg set wg0 peer <key> remove แล้วแก้การกำหนดค่าด้วย ไม่อย่างนั้นเพื่อนจะกลับมาเมื่อเริ่มครั้งถัดไป wg show wg0 allowed-ips เผยปัญหาที่สอง: สองเพื่อนบนที่อยู่เดียว หรือที่อยู่ที่คุณจัดสรรใหม่แล้ว

ใน OpenVPN รายการเพิกถอนเป็นไฟล์ที่มีวันที่ และการกู้คืนอาจนำของเก่ากลับมา ตรวจก่อนไคลเอนต์เชื่อมต่อ:

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
grep -E 'crl-verify|reneg-sec' /etc/openvpn/server.conf

ถ้าการอัปเดตล่าสุดก่อนการเพิกถอน เซิร์ฟเวอร์ยังเคารพใบรับรองที่คุณเพิกถอน OpenVPN 2.4 และใหม่กว่าอ่านไฟล์ CRL ใหม่ทุกการเชื่อมต่อ การแทนที่ไฟล์จึงหยุดเซสชันใหม่ แต่ทันเนลที่สร้างแล้วคงอยู่จนเจรจาใหม่ ค่าเริ่มต้นของ reneg-sec คือ 3600 วินาที และการลดค่านั้นหรือรีสตาร์ตบริการคือสิ่งที่ให้การเปลี่ยนแปลงแก่คุณตอนนี้ บิลด์เก่าอาจอ่านไฟล์ไม่น่าเชื่อถือเท่า ดังนั้นรีสตาร์ตเมื่อคุณยืนยันพฤติกรรมของเวอร์ชันไม่ได้ คู่มือ wg(8) ครอบคลุมการลบเพื่อนและไวยากรณ์ allowed-ips ที่ใช้ข้างต้น

ล้างการกำหนดแบบคงที่สำหรับอุปกรณ์ที่ไม่มีอยู่แล้วด้วย การใช้ที่อยู่ของอุปกรณ์ที่ปลดระวางแล้วกับเครื่องใหม่ในขณะที่โปรไฟล์เก่ายังติดตั้งอยู่จะสร้างสำเนาที่คุณพยายามหลีกเลี่ยงพอดี

ตรวจสอบด้วยไคลเอนต์ที่คุณเพิกถอน

รันการตรวจตามลำดับ จากเครือข่ายนอกทันเนล ก่อนอื่นอุปกรณ์ที่ได้รับอนุญาตเชื่อมต่อ แก้ DNS ผ่านรีโซลเวอร์ที่พุช และเข้าถึงทรัพยากรส่วนตัว จากนั้นอุปกรณ์ที่เพิกถอนต้องล้มเหลว โดยใช้โปรไฟล์เดิมไม่ใช่ใหม่ จากนั้นลองปลายทางเดิมจากภายนอก: ถ้าพอร์ต VPN ยังทำแฮนด์เชกสำเร็จ โฮสต์เดิมยังมีชีวิตและการซ้ำเป็นจริง ไม่ใช่ทฤษฎี

รีบูตโฮสต์ที่กู้คืนและทำการตรวจที่อนุญาตและที่เพิกถอนซ้ำ เพราะตอนนั้นไฟล์กำหนดค่าชนะสิ่งที่คุณเปลี่ยนระหว่างรัน เปรียบเทียบคีย์สาธารณะหรือลายนิ้วมือใบรับรองของโฮสต์กับที่เครื่องที่ปลดระวางใช้ ลายนิ้วมือตรงกันบนสองเครื่องที่ยังทำงานหมายความว่าการกู้คืนโคลนตัวตน ลายนิ้วมือตรงกันบนเครื่องเดียวเป็นเรื่องปกติ บันทึกเวอร์ชันที่กู้คืน ลายนิ้วมือคีย์ และหมายเลขซีเรียลหรือคีย์เพื่อนที่เพิกถอน แล้วสำรองข้อมูลครั้งถัดไปหลังการประสานนี้ เพื่อให้มันแทนบริการอย่างที่เป็นตอนนี้ การทดสอบที่ได้ผลไม่ใช่ไคลเอนต์เชื่อมต่อได้ แต่คือไคลเอนต์ที่คุณลบออกยังอยู่ข้างนอกขณะที่ปลายทางเดิมยังปิดอยู่

บทความที่เกี่ยวข้อง