OpenVPN 3 Linux: อ่านข้อผิดพลาด D-Bus ก่อนจะย้อนกลับ
ห้าบริการ หนึ่งส่วนหน้า จับคู่ข้อผิดพลาด D-Bus กับองค์ประกอบที่ปฏิเสธ ตรวจว่ามีเซสชันหรือไม่ แล้วแก้ที่ขอบเขตนั้น
ความล้มเหลวของ OpenVPN 3 Linux มาในรูปข้อผิดพลาดของเมธอด D-Bus พร้อมชื่อที่ไม่คุ้นเคย และสิ่งล่อใจคือการลดเวอร์ชันแพ็กเกจแล้วหวังเอา ไคลเอนต์ไม่ใช่โปรแกรมเดียว ส่วนหน้าแบบบรรทัดคำสั่งคุยผ่านบัสกับบริการที่ถือโปรไฟล์ เซสชัน เอนจิน VPN และการเปลี่ยนแปลงเครือข่ายที่ได้สิทธิพิเศษ การตัดสินว่าหนึ่งในห้ารายการนี้เป็นเจ้าของการเรียกที่ล้มเหลวคือส่วนใหญ่ของการวินิจฉัย และมันมีต้นทุนเป็นคำสั่งเดียวแทนการย้อนกลับ สิ่งที่ตามมาคือการตัดสินนั้น ในลำดับที่ความล้มเหลวมักปรากฏ
ห้าเจ้าของเบื้องหลังคำสั่งเดียว
มีห้ากระบวนการที่สำคัญ และแต่ละตัวมีชื่อบัสของตนเอง ส่วนหน้าที่รับคำสั่งของคุณ ตัวจัดการการกำหนดค่าที่เก็บโปรไฟล์และนโยบายการเข้าถึง ตัวจัดการเซสชันที่ถืออายุของเซสชัน ส่วนหลังที่ขับการเชื่อมต่อผ่าน OpenVPN 3 Core Engine และบริการกำหนดค่าเครือข่ายที่ติดตั้งอินเทอร์เฟซ เส้นทาง และการตั้งค่า DNS ดังนั้นข้อผิดพลาดที่ระบุชื่อออบเจ็กต์การกำหนดค่าจึงไม่ใช่ข้อผิดพลาดของส่วนหลัง และส่วนหลังที่เริ่มไม่ขึ้นก็ไม่ใช่ความล้มเหลวในการพิสูจน์ตัวตน การจัดข้อความเข้าสู่แถวใดแถวหนึ่งต้องเกิดขึ้นก่อนจะเปลี่ยนแปลงสิ่งใด เพราะทุกขั้นตอนถัดไปขึ้นกับว่าแถวใดเป็นความจริง การเดาแถวคือวิธีที่การแก้ไขสั้น ๆ กลายเป็นงานทั้งบ่ายกับแพ็กเกจ
ถามบัสระบบว่ามีบริการใดอยู่ก่อนถามอย่างอื่น แล้วยืนยันว่าชิ้นส่วนที่ติดตั้งเห็นพ้องกันในเรื่องเวอร์ชัน OpenVPN 3 Linux ลงทะเบียนบริการเหล่านั้นเป็นยูนิตของระบบ ดังนั้นบัสที่ต้องถามคือบัสระบบ การสอบถามเวอร์ชันต้องใช้สิทธิ์ผู้ดูแล และรายการที่ทำด้วย --user จะอ่านเซสชันล็อกอินของคุณ ซึ่งยูนิตไม่เคยปรากฏ บริการจะเปิดใช้งานตามคำขอและบางตัวจะออกเมื่อว่าง ดังนั้นบริการที่หายไปก่อนคำขอแรกของคุณก็แค่ยังไม่ถูกถามถึงสิ่งใดเลย สามคำสั่งด้านล่างตอบเรื่องการมีอยู่ เวอร์ชัน และสถานะยูนิตโดยไม่ต้องเปิดเซสชัน VPN
sudo busctl list | grep -i openvpn
sudo openvpn3-admin version --services
systemctl list-units 'openvpn3*'แต่ละรายการพิสูจน์อะไรจริง ๆ
มุมมองของไคลเอนต์เองเป็นหลักฐานที่ถูกที่สุดเท่าที่มี และแต่ละอย่างพิสูจน์ได้น้อยกว่าที่เห็น โปรไฟล์ในรายการการกำหนดค่าแสดงว่าโปรไฟล์ถูกนำเข้าแล้ว และไม่บอกอะไรเลยว่าใครจะเชื่อมต่อกับมันได้ เซสชันในรายการเซสชันแสดงว่ามีออบเจ็กต์เซสชันอยู่ และไม่บอกอะไรเลยว่าการพิสูจน์ตัวตนระยะไกลเสร็จสิ้นแล้วหรือไม่
openvpn3 configs-list
openvpn3 sessions-listเส้นทางออบเจ็กต์ในผลลัพธ์เหล่านั้นชี้ถึงออบเจ็กต์ที่จัดการบนบัส ไม่ใช่ไฟล์ จึงแก้ไขไม่ได้ และเส้นทางที่บันทึกไว้ก่อนหน้าจะล้าสมัยในขณะที่เซสชันนั้นตัดการเชื่อมต่อ การนำเส้นทางจากบันทึกของคุณกลับมาใช้จะสร้างข้อผิดพลาด "no such object" ที่ไม่เกี่ยวข้องกับ VPN เลย ตารางขั้นตอนด้านล่างแยกสิ่งที่แต่ละขั้นของการเชื่อมต่อก่อตั้งออกจากสิ่งที่ปล่อยไว้เปิด และการตัดสินใจย้อนกลับขึ้นกับความต่างนั้นพอดี อ่านแถวที่ตรงกับหลักฐานของคุณ แล้วอ่านข้อความข้อผิดพลาดอีกครั้ง
| Stage | What exists | What proves it | What it does not prove |
|---|---|---|---|
| Profile imported | A configuration object held by the configuration manager | The profile is listed by the client | That the profile owner permits a connection |
| Session requested | A session object held by the session manager | The session appears in the session list | That the remote side accepted the credentials |
| Connect dispatched | An asynchronous attempt on the VPN backend | Status changes arrive for that session | That an interface was configured |
| Tunnel configured | An interface, routes and DNS settings | The network service reports success and routes appear | That traffic reaches the peer |
การเรียกเชื่อมต่อกลับมาก่อนที่อุโมงค์จะมีอยู่
การเรียกเชื่อมต่อให้เซสชันแก่คุณเพื่อเฝ้าดูแล้วกลับมา ด้วยเหตุนี้การเรียกที่ดูเหมือนสำเร็จแล้วตามด้วยความเงียบจึงเป็นสภาวะกลางปกติ ไม่ใช่ข้อขัดแย้ง ส่วนหน้ายังต้องติดตามการเปลี่ยนแปลงสถานะและตอบทุกคำขอโต้ตอบ โปรไฟล์ที่ต้องการข้อมูลรับรองแล้วไม่ได้รับคำตอบจะรอในสภาวะที่ดูเหมือนส่วนหลังที่ค้างอยู่พอดี สภาวะรอนั้นควรค่าแก่การจดจำ เพราะมันส่งคนไปยังองค์ประกอบที่ผิด
ระหว่างที่มีความพยายามหนึ่งทำงานอยู่ ให้เฝ้ารายการเซสชันและบันทึกของส่วนหน้าเองสำหรับโปรไฟล์นั้น เซสชันที่ไม่เคยออกจากสภาวะเริ่มต้นจะระบุชื่อองค์ประกอบที่หยุด และบันทึกมักระบุชื่อนั้นในบรรทัดแรก ๆ เก็บชื่อโปรไฟล์ไว้ให้ใกล้มือ เพราะคำสั่งบันทึกใช้โปรไฟล์ไม่ใช่เส้นทางเซสชัน ซึ่งเป็นอีกเหตุผลหนึ่งที่จะอ่านรายการซ้ำแทนการนำเส้นทางกลับมาใช้
openvpn3 sessions-list
openvpn3 log --config <profile> --level 6การอ่านบันทึกขององค์ประกอบเดียวโดยไม่เปิดเซสชัน
เมื่อส่วนหน้าไม่ได้รายงานสิ่งที่เป็นประโยชน์ ให้ไปที่ องค์ประกอบที่บันทึกความล้มเหลว แทนที่จะเริ่มการเชื่อมต่อใหม่ ด้วยตัวบันทึก systemd-journald ที่กำหนดค่าไว้แล้ว มุมมองบันทึกแบบจำกัดขอบเขตของผู้ดูแลจะอ่านเหตุการณ์ขององค์ประกอบเดียวโดยไม่แตะนโยบายบัสและไม่เปิดเซสชัน ซึ่งสำคัญเพราะการวินิจฉัยที่เปลี่ยนระบบที่มันกำลังวัดอยู่นั้นพิสูจน์ได้น้อยมาก กรองตามยูนิตไม่ใช่ตามแท็ก syslog เพราะยูนิตบริการแต่ละตัวไม่ได้ประกันตัวระบุร่วม คำค้นด้วยแท็กอาจคืนหน้าว่างในขณะที่ยูนิตเองบันทึกความล้มเหลวไว้
จดสี่ฟิลด์ก่อนขอความช่วยเหลือจากใคร ได้แก่ ชื่อข้อผิดพลาดเต็ม บริการและออบเจ็กต์ที่เกี่ยวข้อง เวลาที่เกิด และเวอร์ชันแพ็กเกจที่ติดตั้ง นี่คือสิ่งที่ผู้ดูแลต้องการ และไม่มีข้อใดต้องวางโปรไฟล์หรือข้อมูลรับรองลงในตั๋ว การขยายนโยบายการเข้าถึงบัสเพื่อให้ข้อผิดพลาดเงียบลงไม่ใช่การวินิจฉัย มันลบขอบเขตที่กำลังระบุชื่อองค์ประกอบให้คุณ เนื้อหาโปรไฟล์ส่วนตัวยังคงอยู่นอกรายงานที่แบ่งปัน ด้วยเหตุผลเดียวกับข้อมูลรับรอง
journalctl -u 'openvpn3-service-*' -n 50 --no-pager
openvpn3-admin journal --service <name>การแก้ขอบเขตที่ปฏิเสธ
ทุกแถวของแผนที่มีการแก้ไขของตัวเอง และแถวไม่ได้แทนกัน การดำเนินการที่ถูกปฏิเสธบนโปรไฟล์เป็นคำถามเรื่องนโยบายและความเป็นเจ้าของ ในขณะที่ส่วนหลังที่ไม่ยอมเปิดใช้งานเป็นคำถามเรื่องบริการและการแพ็กเกจ การเปลี่ยนรหัสผ่านซ้ำ ๆ แก้ปัญหาการเปิดใช้งานในเครื่องไม่ได้ เพราะเซิร์ฟเวอร์ที่ปฏิเสธการพิสูจน์ตัวตนไม่ใช่ทั้งสองอย่าง การเลือกการแก้ไขผิดคือวิธีที่ปัญหานโยบายกลายเป็นการติดตั้งใหม่
หลังการเปลี่ยนแพ็กเกจ ให้ตรวจสอบการติดตั้งที่สอดคล้องและได้รับการสนับสนุน แทนการคัดลอกไบนารีเก่าเข้าที่ การย้อนกลับแบบควบคุมเป็นคำตอบที่ชอบธรรมต่อการถดถอยที่ยืนยันแล้ว โดยมีเงื่อนไขว่าแพ็กเกจยังเข้ากันได้และมีเส้นทางกลับไปสู่การบำรุงรักษาที่ได้รับการสนับสนุน วางเส้นทางนั้นก่อนที่บริการจะหยุดเริ่ม ไม่ใช่หลังจากนั้น
แพลตฟอร์มอื่นอาจใช้ไลบรารีหลักของ VPN ตัวเดียวกันโดยไม่ใช้บริการบัสของลินุกซ์ร่วมกัน ดังนั้นความล้มเหลวที่ดูคล้ายกันบนวินโดวส์ไม่ได้บอกอะไรเกี่ยวกับอันนี้ ภาพรวม D-Bus เอกสารเส้นทางออบเจ็กต์ที่เปิดให้ใช้สำหรับการตั้งค่าและเซสชัน และนั่นคือส่วนของสถาปัตยกรรมที่การวินิจฉัยนี้อาศัยอยู่ อ่านสักครั้ง แล้วข้อผิดพลาดครั้งหน้าจะมาพร้อมองค์ประกอบที่แนบมากับมันแล้ว