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

สองคำถาม ไม่ใช่คำถามเดียว

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

IntentWhat you observeWhat to do
WantedDropped unexpectedlyAllow one supported recovery attempt
Paused by the userDisconnectedDo nothing until intent changes
WantedAlready connectingWait instead of starting a rival attempt
WantedAuthentication needs a personPrompt, then stop replaying credentials

อ่านแถวต่าง ๆ เป็นนโยบาย ไม่ใช่รายการกรณี แถวที่สองคือแถวที่สคริปต์ส่วนใหญ่ละไว้ และเป็นแถวเดียวที่แยกตัวตรวจสอบออกจากเครื่องที่ยืนกรานว่าตัวเองถูก

สถานะที่สังเกตได้ไม่ใช่ความชอบ

โมเดลสถานะ Network Extension ของ Apple รายงานสถานะ connecting, connected, disconnecting, disconnected และ recovery ทั้งห้าอธิบายการเชื่อมต่อ ไม่มีสถานะใดบอกว่า «ผู้ใช้ขอให้โปรไฟล์นี้คงหยุดชั่วคราว» เพราะนั่นไม่ใช่สถานะการเชื่อมต่อเลย ไคลเอนต์ที่ไม่ได้สร้างบนกรอบนั้นเปิดเผยตัวควบคุมและการเรียกสถานะที่รองรับของตนเอง และลากเส้นเดียวกันด้วยคำศัพท์ของตนเอง

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

scutil --nc list
scutil --nc status "Office VPN"

ใครอีกที่ได้รับอนุญาตให้เริ่มโปรไฟล์นี้

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

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

ทำให้การลองใหม่น่าเบื่อ

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

ดูว่าการลองใหม่ที่รวดเร็วสร้างอะไรบนหน้าจอจริง ๆ กล่องโต้ตอบซ้ำ ๆ ที่ผู้ใช้ปิดแย่กว่าข้อความล้มเหลวที่ชัดเจนหนึ่งข้อความ และสอนให้ผู้คนคลิกผ่านข้อความโดยไม่อ่าน

การหยุดชั่วคราวและนโยบายการรับส่งข้อมูลเป็นคำสัญญาที่แยกกัน

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

ตัดสินใจพฤติกรรมการรับส่งข้อมูลแยกต่างหาก จัดทำเอกสารไว้ข้างตัวควบคุมการหยุดชั่วคราว และรักษาให้สอดคล้องไม่ว่าอุโมงค์จะหยุดชั่วคราว ล้มเหลว หรือหายไป ไม่เช่นนั้นผู้ใช้จะเรียนรู้ว่าการกดตัดการเชื่อมต่อทำอะไรที่คาดเดาไม่ได้ และตั๋วสนับสนุนครั้งถัดไปจะเกี่ยวกับเครือข่ายที่ «บางครั้งหยุดทำงาน» โดยไม่มีสาเหตุที่มองเห็น

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