VPN บน Mac ค้างที่ «กำลังตัดการเชื่อมต่อ»: อะไรกำลังทำงานจริง ๆ
การตัดการเชื่อมต่อคือช่วงเปลี่ยนผ่าน ไม่ใช่ทันเนลที่หยุดแล้ว ตรวจว่าองค์ประกอบใดเป็นเจ้าของการรื้อ ถนนเส้นทางและ DNS และเลี่ยงการฆ่ากระบวนการแบบเหวี่ยงแห
«กำลังตัดการเชื่อมต่อ» เป็นสถานะที่ไคลเอนต์รายงานขณะรื้อทันเนล ไม่ใช่คำตัดสินว่าทราฟฟิกหยุดแล้ว บน Mac การรื้อนั้นดำเนินเป็นลำดับสั้น ๆ และป้ายจะเปลี่ยนก็ต่อเมื่อองค์ประกอบที่เป็นเจ้าของการเชื่อมต่อรายงานกลับมา เมื่อขั้นตอนหนึ่งรอตัวช่วย ปลั๊กอิน หรือการตัดสินใจเชิงนโยบาย ป้ายอาจค้างอยู่ตรงนั้นหลังจากอินเทอร์เฟซหายไปแล้ว หรือทันเนลอาจยังส่งต่ออยู่ทั้งที่เมนูยังแสดงมันอยู่ ให้ถือว่าข้อความนั้นหมายถึง «กำลังรื้อ ผลลัพธ์ยังไม่ทราบ» แล้วหาว่าครึ่งไหนเป็นจริง
ความล้มเหลวสองแบบดูเหมือนกันจากแถบเมนูแต่ต้องรับมือคนละทาง แบบหนึ่งทันเนลยังพาแพ็กเก็ตอยู่และมีเพียงการแสดงผลที่ล้าสมัย อีกแบบหนึ่งทันเนลหายไปแล้วแต่นโยบายแยกอีกชุดยังปิดกั้นทราฟฟิกไว้ ซึ่งมักเป็นความตั้งใจ เส้นทางและสถานะ DNS แยกสองแบบนี้ออกจากกันได้เร็วกว่าการคลิกเมนูใด ๆ
ป้ายกำลังติดตามอะไร
ไคลเอนต์ VPN เก็บเครื่องสถานะเล็ก ๆ ไว้ และแถบเมนูเป็นเพียงภาพฉายของมัน สำหรับการเชื่อมต่อที่ macOS เองจัดการ เครื่องสถานะนั้นอยู่ในกรอบ VPN ของระบบ สำหรับทันเนลที่แอปจัดการ มันอยู่ในแอปและตัวช่วยที่ได้รับสิทธิพิเศษ ขั้นสุดท้ายของการหยุดไม่ใช่การปิดซ็อกเก็ต แต่เป็นการคืนสิ่งที่ทำให้ทันเนลทำงานได้ ได้แก่ อินเทอร์เฟซ utun เส้นทางที่ชี้ไปยังมัน รายการตัวแก้ชื่อที่ไคลเอนต์ใส่เข้าไป และกฎไฟร์วอลล์หรือนโยบายใด ๆ ที่ปิดกั้นทราฟฟิกระหว่างเชื่อมต่อ
ขั้นตอนเหล่านั้นแยกจากกัน การหยุดจึงติดค้างที่ขั้นใดขั้นหนึ่งได้ ตัวช่วยที่หยุดตอบสนอง เส้นทางที่อินเทอร์เฟซที่สองอ้างสิทธิ์ด้วย หรือรายการตัวแก้ชื่อที่โปรไฟล์อื่นเป็นเจ้าของ ล้วนทำให้ไคลเอนต์รอได้ ป้ายเป็นรายงานความคืบหน้าของไคลเอนต์เอง จึงน่าเชื่อถือเรื่องเจตนาและไม่น่าเชื่อถือเรื่องเครือข่าย
หาองค์ประกอบที่เป็นเจ้าของการเชื่อมต่อ
ในการกำหนดค่าแบบเนทีฟ scutil --nc list พิมพ์บริการที่ระบบรู้จักและสถานะของมัน และ scutil --nc status "Work VPN" ให้รายละเอียดของบริการหนึ่งรายการ ทันเนลที่แอปบุคคลที่สามถืออยู่อาจไม่ปรากฏในรายการนั้นเลยผลลัพธ์ว่างจึงไม่ใช่หลักฐานว่าไม่มีอะไรเชื่อมต่ออยู่
เมื่อโปรไฟล์เป็นของแอป ให้พึ่งมุมมองสถานะของแอปนั้นและปุ่ม «ตัดการเชื่อมต่อ» ที่มีเอกสารกำกับ การปิดหน้าต่างไม่ใช่คำขอหยุดหากตัวช่วยเบื้องหลังเป็นเจ้าของทันเนล ไอคอนจะหายไปและตัวช่วยยังคงทำให้อินเทอร์เฟซมีชีวิตอยู่ เอกสารอ้างอิงการตั้งค่า VPN ของ Apple ครอบคลุมตัวควบคุมแบบเนทีฟและที่มาของการตั้งค่าที่ถูกจัดการ
อ่านอินเทอร์เฟซ เส้นทาง และ DNS
การตรวจสามอย่างตอบคำถามส่วนใหญ่ได้โดยไม่ต้องแตะการเชื่อมต่อ สิ่งสำคัญคือการตีความร่วมกัน เพราะแต่ละอย่างเดียว ๆ ทำให้เข้าใจผิด
scutil --nc list
netstat -rn -f inet | head -20
ifconfig | grep -A 3 '^utun'
scutil --dns | head -30
- มีอินเทอร์เฟซ utun มีเส้นทางเริ่มต้นหรือเส้นทางแยกผ่านมัน ตัวแก้ชื่อชี้ไปที่ผู้ให้บริการ ทันเนลยังขึ้นอยู่และป้ายล้าสมัย
- ไม่มี utun มีเส้นทางเริ่มต้นธรรมดา DNS มาจาก DHCP ไม่มีอินเทอร์เน็ต นโยบายที่ปิดกั้นเมื่อตัดการเชื่อมต่อกำลังทำหน้าที่ของมัน
- ไม่มี utun ไม่มีเส้นทาง ตัวแก้ชื่อยังชี้ไปที่ผู้ให้บริการ การรื้อหยุดกลางทาง และ DNS คือส่วนที่เหลือที่ต้องเคลียร์
จากนั้นส่งคำขอหนึ่งไปยังโฮสต์ภายในที่ควรตอบผ่านทันเนลเท่านั้น และอีกหนึ่งไปยังโฮสต์สาธารณะ การเข้าถึงได้แยกนโยบายออกจากสถานะตกค้างโดยไม่เปลี่ยนการตรวจให้เป็นการฝึกวัดค่า บันทึกงานระยะไกลก่อนหากเส้นทางยังตอบสนอง และจัดทางเข้าที่สองไว้ก่อนเปลี่ยนเครือข่ายบนเครื่องที่คุณดูแลจากระยะไกล
เหตุใดการฆ่าแบบเหวี่ยงแหและการลบโปรไฟล์จึงทำให้เข้าใจผิด
ชื่อกระบวนการอย่าง pppd racoon และ configd เป็นของการใช้งานเฉพาะ การฆ่ามันอาจกระทบการเชื่อมต่ออื่น ทิ้งเส้นทางและอินเทอร์เฟซ utun ไว้ และไม่ให้บันทึกว่าขั้นตอนใดติดค้าง ชื่อกระบวนการเก่าก็ไม่ใช่หลักฐานว่ามันเป็นเจ้าของโปรไฟล์ปัจจุบัน
การลบและสร้างโปรไฟล์ใหม่เป็นการเปลี่ยนแปลงที่ใหญ่กว่าการเคลียร์ช่วงเปลี่ยนผ่านที่ติดค้าง มันอาจทิ้งการตั้งค่าที่ถูกจัดการและวัสดุระบุตัวตนภายในเครื่องโดยไม่อธิบายว่าอะไรล้มเหลว และบน Mac ที่ถูกกำกับดูแลอาจถูกกู้คืนกลับมาเฉย ๆ เก็บการลบไว้สำหรับการกำหนดค่าที่ล้าสมัยจริง ๆ และวินิจฉัยช่วงเปลี่ยนผ่านแทน
ลำดับการหยุดที่ทิ้งร่องรอยไว้
ลำดับด้านล่างปล่อยให้ตัวควบคุมของการเชื่อมต่อเองเป็นผู้รับผิดชอบและสร้างบันทึกหากการติดค้างกลับมา มันยังกันคุณไม่ให้เปลี่ยนปัญหาการแสดงผลให้กลายเป็นการเปลี่ยนเครือข่าย
- บันทึกงานระยะไกล และยืนยันว่าคุณเข้าถึง Mac ได้อีกทางหากมันอยู่ระยะไกล
- จดชื่อไคลเอนต์ เวอร์ชัน และโปรไฟล์ เก็บช่วงเวลาสั้น ๆ ด้วย
log show --last 5m --predicate 'subsystem == "com.apple.networkextension"'รุ่นเก่าเก็บประวัติได้น้อยกว่า จึงควรรันทันทีหลังการติดค้าง - ใช้ปุ่ม «ตัดการเชื่อมต่อ» ที่มีเอกสารกำกับ รอ แล้วตรวจอินเทอร์เฟซและเส้นทางซ้ำ
- หากป้ายล้าสมัยแต่ทันเนลลงแล้ว ปล่อยไว้และให้ไคลเอนต์รีเฟรชแทนการบังคับกระบวนการ
- หากการรื้อติดค้างจริง ให้รีสตาร์ตไคลเอนต์ แล้ววางแผนรีสตาร์ต Mac เมื่อบันทึกงานแล้ว เครื่องที่ถูกจัดการต้องใช้ขั้นตอนของผู้ดูแลระบบ
หลังฟื้นตัว ยืนยันว่าเส้นทางเริ่มต้นปกติและตัวแก้ชื่อ DHCP กลับมาแล้ว และทราฟฟิกที่ถูกปิดกั้นถูกคืนค่าหรือยังถูกปิดกั้นโดยเจตนา บันทึกโปรไฟล์และเวอร์ชันไคลเอนต์พร้อมอาการ เพื่อให้ครั้งต่อไปเริ่มจากหลักฐานไม่ใช่การเดาจากแถบเมนู