OpenVPN บน Windows เริ่มตอนล็อกอิน ไม่ใช่ตอนบูต?
ทางลัดในสตาร์ทอัปเปิดแอปเดสก์ท็อป ไม่ใช่บริการอัตโนมัติ ตรวจสอบว่าซอร์สโปรไฟล์ใดที่เจ้าของอ่านก่อนย้ายไฟล์
อุโมงค์ที่ปรากฏเฉพาะหลังมีคนล็อกอินมักถูกเปิดโดยเซสชันของคนคนนั้น ไม่ใช่โดยบริการอัตโนมัติ ตัวการปกติคือทางลัดในสตาร์ทอัปที่เปิด openvpn-gui.exe และไม่ใช่การติดตั้งที่เสีย ทางลัดเปิดแอปเดสก์ท็อปภายในเซสชันผู้ใช้ ด้วยโปรไฟล์ของผู้ใช้คนนั้น ที่เก็บใบรับรองของผู้ใช้คนนั้น และความสามารถของผู้ใช้คนนั้นในการตอบพรอมต์ ไม่มีสิ่งใดทำให้การเชื่อมต่อเป็นอิสระจากคนที่ล็อกอิน ซึ่งเป็นสิ่งที่อุโมงค์ก่อนล็อกอินต้องการพอดี
อาการมักมีสามสาเหตุ
สามรูปแบบดูเหมือนกันจากภายนอกแต่มีการแก้ไขต่างกัน รูปแบบแรกคือเจ้าของการทำงานที่เป็นเซสชันผู้ใช้ไม่ใช่บริการ ซึ่งเป็นกรณีทางลัดในสตาร์ทอัป รูปแบบที่สองคือโปรไฟล์ที่อยู่ในที่ที่บริการไม่มอง ดังนั้นบริการจึงเริ่มทำงาน ไม่พบอะไร และออกอย่างสะอาด รูปแบบที่สามคือโปรไฟล์ที่บริการพบและเริ่มทำงาน แต่ข้อมูลรับรองต้องอาศัยการโต้ตอบที่ไม่มีบริการใดจัดหาได้
การระบุว่าเป็นกรณีใดต้องอ่านสองอย่าง: บริการถูกกำหนดค่าให้รันอะไร และเห็นไฟล์ใดได้บ้าง ทั้งสองอย่างใช้คำสั่งเดียว และไม่มีอย่างใดรบกวนการเชื่อมต่อที่ทำงานอยู่
บริการอัตโนมัติอ่านอะไรจริง ๆ
บริการอัตโนมัติของ Community คือตัวห่อที่สแกนไดเรกทอรีสตาร์ทอัตโนมัติที่กำหนดค่าไว้ ซึ่งปกติคือ config-auto ภายในการติดตั้ง และเริ่มโปรเซส OpenVPN สำหรับแต่ละโปรไฟล์ที่ตรงกันซึ่งพบ โปรไฟล์ที่มองเห็นในเมนู GUI ของผู้ใช้กลับอยู่ภายใต้โปรไฟล์โรมมิ่งของผู้ใช้คนนั้น ในไดเรกทอรีที่บัญชีบริการไม่ได้อ่าน คู่มือบริการ Windows อธิบายการค้นพบนั้น และควรอ่านก่อนคัดลอกสิ่งใด เพราะไดเรกทอรีเป้าหมายเป็นคุณสมบัติของการติดตั้ง ไม่ใช่ธรรมเนียมตายตัว ดังนั้นการคัดลอกไฟล์ไปยังโฟลเดอร์ GUI จึงไม่เปลี่ยนอะไรสำหรับบริการ และการคัดลอกไปยังทุกโฟลเดอร์ที่ชื่อ config จะสร้างสำเนาซ้ำแทนการแก้ไข
Get-Service OpenVPNService | Select-Object Status, StartType
Get-CimInstance Win32_Service | Where-Object Name -eq 'OpenVPNService' | Select-Object PathName, StartName
gci 'C:\Program Files\OpenVPN\config-auto'
คำสั่งสุดท้ายแสดงสิ่งที่ตัวห่อจะเห็นจริง ซึ่งเป็นวิธีที่เร็วที่สุดในการยืนยันว่าโปรไฟล์อยู่ผิดที่ บรรทัดที่สองยังแสดงบัญชีที่บริการรันอยู่ และบัญชีนั้นเป็นตัวกำหนดว่าเส้นทางไฟล์และที่เก็บใบรับรองใดเข้าถึงได้บ้าง
ทำไมล็อกอินบนเดสก์ท็อปได้ผล แต่การเริ่มตอนบูตไม่ได้
ความสำเร็จบนเดสก์ท็อปอาจซ่อนการพึ่งพาอินพุตได้นาน GUI สามารถเก็บวลีรหัสผ่านของคีย์ รหัสผ่านบัญชี หรือปัจจัยที่สองในไดอะล็อก เพราะทำงานในเซสชันแบบโต้ตอบที่มีเดสก์ท็อปมองเห็นได้ บริการทำงานในเซสชันที่ไม่มีเดสก์ท็อป คำขออินพุตจึงไม่มีที่ให้ปรากฏ และการเชื่อมต่อล้มเหลวหลังหมดเวลาซึ่งดูไม่เหมือนปัญหาข้อมูลรับรองเลย
การเข้าถึงไฟล์เป็นไปตามกฎเดียวกัน คีย์ส่วนตัวที่เก็บไว้ใต้โปรไฟล์ผู้ใช้ หรือ ใบรับรองในที่เก็บส่วนตัวของผู้ใช้ ไม่พร้อมใช้สำหรับบริการที่รันในฐานะเครื่อง เปรียบเทียบเส้นทางแบบเต็ม สิทธิ์ และการเลือกใบรับรองของแต่ละฝ่าย แทนที่จะถือว่าไฟล์โปรไฟล์เดียวกันหมายถึงสภาพแวดล้อมเดียวกัน
งานที่ตั้งเวลาไว้ให้รันไม่ว่าผู้ใช้จะล็อกอินหรือไม่ก็สืบทอดข้อจำกัดคล้ายกัน มันอาจเริ่มไฟล์เรียกทำงานของ GUI ได้สำเร็จแต่ก็ยังสร้างโปรเซสที่ไม่เคยได้ข้อมูลรับรอง ดังนั้นการมีโปรเซสในตัวจัดการงานจึงไม่ใช่หลักฐานของอุโมงค์ที่ทำงาน
เลือกเจ้าของหนึ่งรายและทดสอบวงจรชีวิตจริง
สำหรับการเชื่อมต่อที่เป็นของคนที่ล็อกอิน ให้ใช้พฤติกรรมสตาร์ทอัตโนมัติที่ GUI รองรับและกันบริการออกไป สำหรับอุโมงค์ที่ต้องมีอยู่ก่อนใครจะล็อกอิน ให้กำหนดค่าบริการ วางโปรไฟล์ในที่ที่ตัวห่ออ่าน และใช้กลไกข้อมูลรับรองแบบไม่ต้องมีคนดูแลที่รองรับ เช่นคีย์ที่ไม่มีวลีรหัสผ่านแบบโต้ตอบ หรือไฟล์ข้อมูลรับรองที่มีเอกสารกำกับ
Get-Content 'C:\Program Files\OpenVPN\log\openvpn.log' -Tail 40
Get-WinEvent -LogName Application -MaxEvents 20 | Where-Object ProviderName -like '*OpenVPN*'
ทดสอบวงจรชีวิตที่สำคัญ: การรีบูตโดยไม่มีใครล็อกอิน แล้วเชื่อมต่อใหม่หลังเปลี่ยนเครือข่าย เก็บเจ้าของไว้เพียงรายเดียวสำหรับการเชื่อมต่อ เพราะกลไกสตาร์ทอัปสองอย่างที่แข่งกันมักสร้างสองอินสแตนซ์ที่แย่งเส้นทางเดียวกันและเซสชันเซิร์ฟเวอร์เดียวกัน ซึ่งวินิจฉัยยากกว่ากลไกใดกลไกหนึ่งเพียงลำพัง