แอป VPN ของผู้จำหน่ายกับ NetworkManager: ใครเป็นเจ้าของสถานะ?
โปรไฟล์ระบุชื่อปลั๊กอิน ไม่ใช่พฤติกรรมของไคลเอนต์ผู้จำหน่าย จัดทำแผนที่ว่าใครเป็นเจ้าของการลงทะเบียน DNS การบล็อก และการอัปเดตก่อนสลับแล็ปท็อปที่จัดการอยู่
การนำเข้าโปรไฟล์ไม่ใช่สิ่งเดียวกับการแทนที่ไคลเอนต์ NetworkManager เก็บชนิดปลั๊กอินพร้อมข้อมูลและความลับเฉพาะปลั๊กอิน และปลั๊กอินที่เป็นเจ้าของชนิดนั้นเป็นตัวกำหนดว่าการเชื่อมต่อทำอะไรได้บ้าง ทุกชั้นที่แอปพลิเคชันของผู้จำหน่ายวางทับไว้ ตั้งแต่การลงทะเบียนไปจนถึงการบล็อกตลอดเวลา ล้วนอยู่นอกไฟล์ ความปลอดภัยของการสลับจึงขึ้นอยู่กับว่าคุณพึ่งพาชั้นใดจริง ๆ
ไฟล์ระบุชื่อปลั๊กอิน ไม่ใช่ชุดคุณสมบัติ
เอกสารอ้างอิง การตั้งค่า VPN ของ NetworkManager อธิบายชนิดบริการที่เลือกปลั๊กอิน พร้อมพจนานุกรมข้อมูลทึบแสงและพจนานุกรมความลับที่ปลั๊กอินเท่านั้นตีความ โปรไฟล์คือสัญญากับการใช้งานหนึ่งรายการ ไม่ใช่คำอธิบายพฤติกรรมที่ไคลเอนต์ใดก็สามารถทำซ้ำได้ ไคลเอนต์สองตัวอาจพูดโปรโตคอลเดียวกันแต่ยังต่างกันในสิ่งที่เจรจาและเส้นทางข้อมูลที่เปิดใช้ ชื่อโปรโตคอลบอกว่าอุโมงค์คืออะไร ไม่เคยบอกว่าไคลเอนต์รอบข้างทำอะไรกับมัน
ดังนั้นจงเปรียบเทียบข้อกำหนด ไม่ใช่เปลือกหุ้ม คำถามไม่ใช่ว่าทางเลือกเชื่อมต่อได้หรือไม่ เพราะโดยปกติก็ได้ คำถามคือข้อกำหนดทุกข้อที่ทำให้ไคลเอนต์เดิมยอมรับได้ยังคงอยู่หลังการย้ายหรือไม่ จดข้อกำหนดเหล่านั้นไว้ก่อนติดตั้งอะไร มิฉะนั้นการเปรียบเทียบจะกลายเป็นการตามล่าหาสิ่งที่พังก่อน
สิ่งที่แอปของผู้จำหน่ายเพิ่มรอบอุโมงค์
ไคลเอนต์ของผู้จำหน่ายมักรวมการลงทะเบียนและการตรวจสอบสภาพอุปกรณ์ กระบวนการยืนยันตัวตนขั้นที่สองที่มีอินเทอร์เฟซของตัวเอง การบล็อกตลอดเวลา ช่องทางอัปเดต และเครื่องมือสนับสนุนไว้ด้วยกัน บางส่วนวางอยู่ข้างโปรโตคอล และบางส่วนเป็นผลิตภัณฑ์แยกที่เพียงใช้ตัวติดตั้งร่วมกัน NetworkManager แทนที่อุโมงค์และการกำหนดเส้นทางได้ และสคริปต์ตัวส่งสามารถสั่งการเมื่อสถานะการเชื่อมต่อเปลี่ยน แต่ไม่สามารถจำลองกลไกบล็อก กระบวนการต่ออายุใบรับรอง หรือสมมติฐานว่าใครมีสิทธิ์ยกการเชื่อมต่อขึ้นได้
องค์ประกอบมากไม่ได้หมายถึงปลอดภัยกว่า และน้อยก็ไม่ได้หมายถึงอ่อนแอกว่า คำถามคือองค์ประกอบใดบังคับใช้นโยบายที่คุณได้รับคำสั่งให้ทำตาม หากผู้ตรวจสอบถามว่าอะไรบล็อกทราฟฟิกเมื่ออุโมงค์ล่ม คำตอบต้องระบุสิ่งที่ทำเช่นนั้นจริง และโปรไฟล์ที่เพียงเชื่อมต่อไม่ใช่คำตอบนั้น
จุดที่ความเป็นเจ้าของต่างกันจริง
อ่านสิ่งนี้เป็นแผนที่ความเป็นเจ้าของ ไม่ใช่รายการตรวจสอบ เพราะความล้มเหลวด้านล่างคือช่องว่างความเป็นเจ้าของ และการกำหนดค่าไคลเอนต์มากเท่าใดก็ไม่ปิดช่องว่างนั้น แต่ละแถวระบุชั้น ฝั่งที่มักถือไว้ในวันนี้ และจุดที่ช่องว่างปรากฏขึ้นก่อน
| Layer | Vendor application | NetworkManager connection | Where the gap shows up |
|---|---|---|---|
| Enrollment and posture | built into the client | absent unless something else supplies it | a managed device fails its next posture check |
| Address and resolver authority | the client sets both | the plugin plus dispatcher scripts | names resolve through the wrong resolver after a state change |
| Blocking on drop | a bundled engine | nothing by default | traffic continues in the clear after the tunnel dies |
| Upgrade path | the vendor's own channel | the distribution package and its plugin | a plugin update changes behaviour with no vendor note |
| Diagnostics and support | vendor tooling with client state | journal and dispatcher output | support cannot see why negotiation failed |
จับคู่แต่ละแถวกับการสังเกตที่คุณทำซ้ำได้ ไม่ใช่ความรู้สึกเกี่ยวกับไคลเอนต์ ชื่อที่แก้ไขผ่านตัวแก้ไขที่ตั้งใจไว้ เส้นทางที่หายไปเมื่ออุโมงค์หยุด และการเชื่อมต่อที่ถูกบล็อกหลังการตัดขาดจำลอง คือการสังเกตสามอย่างที่ร่วมกันครอบคลุมตารางส่วนใหญ่ เขียนการสังเกตไว้ข้างข้อกำหนดที่มันพิสูจน์ และเก็บสิ่งที่ล้มเหลวไว้ เพราะการสังเกตที่ล้มเหลวเป็นส่วนเดียวของบันทึกที่ทำนายเหตุการณ์ถัดไป
สลับโดยไม่ทับซ้อนความเป็นเจ้าของ
การรันไคลเอนต์ของผู้จำหน่ายและการเชื่อมต่อ NetworkManager สำหรับบริการเดียวกันพร้อมกันเป็นวิธีที่การเปรียบเทียบเหล่านี้ผิดพลาดบ่อยที่สุด ทั้งคู่ติดตั้งเส้นทาง ทั้งคู่อาจตั้งค่า DNS และทั้งคู่อาจแตะสถานะไฟร์วอลล์ สิ่งที่คุณวัดในตอนนั้นคือการจัดวางที่สามซึ่งไม่ตรงกับพฤติกรรมที่มีเอกสารของไคลเอนต์ทั้งสอง
nmcli -f NAME,UUID,TYPE connection show
nmcli connection show work --show-secrets | grep -E "^vpn\."
journalctl -u NetworkManager -b --since "10 min ago"คำสั่งแรกบอกว่าโปรไฟล์เป็นชนิด VPN หรือไม่ คำสั่งที่สองแสดงชนิดบริการของปลั๊กอินและความลับที่ถูกเก็บไว้ ซึ่งสำคัญเมื่อคาดหวังคีย์จากเอเจนต์แทนที่จะเป็นไฟล์ บันทึกคือที่ที่ปลั๊กอินที่โหลดแล้วแต่เจรจาไม่ได้จะบอกเรื่องนั้น หากทั้งสามไม่แสดงปัญหา ช่องว่างอยู่ที่ชั้นนโยบายเหนืออุโมงค์ ไม่ใช่ที่การเชื่อมต่อ
ตัดการเชื่อมต่อไคลเอนต์เก่าก่อนเปิดใช้งานการเชื่อมต่อใหม่ รักษาจุดปลายทางและบัญชีให้เหมือนเดิม และจดว่าองค์ประกอบใดเป็นเจ้าของเส้นทาง การตั้งค่าตัวแก้ไข และการบล็อก บันทึกนั้นคือสิ่งที่ป้องกันไม่ให้การอัปเดตครั้งถัดไปจบลงด้วยเจ้าของสองราย