ความล้มเหลวของ 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 เลย ตารางขั้นตอนด้านล่างแยกสิ่งที่แต่ละขั้นของการเชื่อมต่อก่อตั้งออกจากสิ่งที่ปล่อยไว้เปิด และการตัดสินใจย้อนกลับขึ้นกับความต่างนั้นพอดี อ่านแถวที่ตรงกับหลักฐานของคุณ แล้วอ่านข้อความข้อผิดพลาดอีกครั้ง

StageWhat existsWhat proves itWhat it does not prove
Profile importedA configuration object held by the configuration managerThe profile is listed by the clientThat the profile owner permits a connection
Session requestedA session object held by the session managerThe session appears in the session listThat the remote side accepted the credentials
Connect dispatchedAn asynchronous attempt on the VPN backendStatus changes arrive for that sessionThat an interface was configured
Tunnel configuredAn interface, routes and DNS settingsThe network service reports success and routes appearThat 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 เอกสารเส้นทางออบเจ็กต์ที่เปิดให้ใช้สำหรับการตั้งค่าและเซสชัน และนั่นคือส่วนของสถาปัตยกรรมที่การวินิจฉัยนี้อาศัยอยู่ อ่านสักครั้ง แล้วข้อผิดพลาดครั้งหน้าจะมาพร้อมองค์ประกอบที่แนบมากับมันแล้ว

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