ฮุคตอนหลับอย่างเดียวไม่ทำให้ VPN กลับมา
ฮุคที่จบด้วยศูนย์พิสูจน์เพียงว่าสคริปต์รันแล้ว วางไว้หลังเครือข่าย ใช้ตัวตนที่ถูกต้อง และตรวจสอบว่าโปรไฟล์เข้าเกณฑ์หรือไม่
ใส่คำสั่งเชื่อมต่อใหม่ในฮุคตอนหลับแล้วปัญหาดูเหมือนจะจบ มันจบก็ต่อเมื่อฮุครันหลังเครือข่ายมีอยู่แล้ว ในฐานะตัวตนที่ไคลเอนต์รู้จัก ผ่านเส้นทางที่ไคลเอนต์ใช้งานจริง ความล้มเหลวส่วนใหญ่หลังตื่นคือหนึ่งในสามข้อนี้ และไม่มีข้อใดปรากฏเป็นข้อผิดพลาดในฮุคเอง ฮุคคืนค่าสำเร็จไม่ว่าอย่างไร
สคริปต์ที่จบด้วยศูนย์ไม่ได้บอกอะไรคุณเลยว่าอุโมงค์กลับมาหรือไม่
ฮุครัน แล้วไงต่อ?
#!/bin/sh
case "$1" in
pre)
vpn-client disconnect
;;
post)
vpn-client connect
;;
esac
แต่ละเหตุการณ์เรียกฮุคสองครั้ง ก่อนและหลังการเปลี่ยนผ่าน โดยส่งเฟสและชื่อเหตุการณ์ให้ มันรันเป็น root ในสภาพแวดล้อมน้อยที่สุด จึงต้องใช้พาธแบบสัมบูรณ์และไม่ควรคาดหวังตัวแปรเซสชันเดสก์ท็อป การที่ทั้งสองครั้งคืนค่าอย่างรวดเร็วบอกเพียงว่าสคริปต์รันแล้ว โปรไฟล์ขึ้นมาหรือไม่หลังจากนั้นเป็นการสังเกตแยกต่างหากและต้องมีหลักฐานของตัวเองในบันทึก
ถือว่าอาร์กิวเมนต์เฟสเป็นส่วนหนึ่งของการออกแบบ ความพยายามเชื่อมต่อใหม่ในเฟส pre เกิดขึ้นขณะเครื่องกำลังจะสูญเสียทุกอย่าง และสำเร็จไม่ได้
Root สภาพแวดล้อมน้อยที่สุด ผู้ใช้ผิด
ถ้าไคลเอนต์เก็บโทเค็นเข้าสู่ระบบแยกตามผู้ใช้ การรันฮุคเป็น root จะไม่เหลืออะไรให้แสดง ตรวจสอบสถานะภายใต้ตัวตนที่ฮุคใช้จริง ไม่ใช่ตัวตนที่คุณทดสอบจากเทอร์มินัลเดสก์ท็อป บิลด์บางตัวยังทิ้งดีมอนที่ยึดอินเทอร์เฟซไว้หลังตัดการเชื่อมต่อ การเชื่อมต่อใหม่จึงตกอยู่ในสถานะเก่า และการล้างโปรเซสก่อนจะกู้คืนได้ด้วยต้นทุนของการปิดที่ไม่สะอาด ทั้งสองพฤติกรรมไม่ปรากฏหากทดสอบเฉพาะเส้นทางที่ราบรื่น
เขียนฮุคด้วยพาธแบบสัมบูรณ์ ให้ root เป็นเจ้าของและรันได้ และบันทึกว่ามันทำอะไร หากไม่มีบันทึกนั้น การสอบสวนครั้งต่อไปจะเริ่มจากศูนย์
การเชื่อมต่ออัตโนมัติไม่ใช่เส้นทางของ VPN
NetworkManager มีกลไกเปิดใช้งานสองแบบ คือแฟล็กเชื่อมต่ออัตโนมัติบนโปรไฟล์ และการเชื่อมต่อทุติยภูมิที่เริ่มเมื่อโปรไฟล์หลักถูกเปิดใช้งาน อุปกรณ์ชนิดเนทีฟใช้แบบแรก ปลั๊กอิน VPN ในอดีตใช้เพียงแบบที่สอง ดังนั้นการติ๊กเชื่อมต่ออัตโนมัติบนโปรไฟล์ OpenVPN อาจไม่มีผลเลย ตรวจสอบทั้งสองคุณสมบัติ แล้วแนบ VPN เป็นทุติยภูมิของโปรไฟล์ Wi-Fi หรือ Ethernet แทน
[Unit] PartOf=NetworkManager.service Requires=NetworkManager-wait-online.service After=NetworkManager-wait-online.service
อินเทอร์เฟซ WireGuard ที่จัดการโดยยูนิต systemd ต้องใช้ไฟล์ drop-in นั้นแทนฮุค จัดลำดับหลังเครือข่ายออนไลน์
รอเครือข่าย โดยมีเพดาน
timer=1 while ! ping -c1 -n -w1 203.0.113.1 >/dev/null; do sleep 1; timer=$((timer+1)) [ $timer -ge 300 ] && exit 0 done nmcli connection up "work-vpn"
ตอนตื่นอาจมีการขออุโมงค์ขณะ Wi-Fi ยังเชื่อมต่อใหม่ ซึ่งทำให้การหลับแบบคงที่เป็นเพียงการเดา รอที่อยู่ที่เข้าถึงได้ แล้วยกโปรไฟล์ขึ้น และจำกัดการรอเพื่อให้ฮุคไม่สามารถถือเส้นทางตื่นไว้เปิดได้ไม่จำกัด ชอบชื่อโปรไฟล์มากกว่าดัชนีตัวเลข และถ้าโปรไฟล์ที่ถูกต้องแตกต่างตามเครือข่าย ให้อุโมงค์ที่แข็งแรงบันทึกตัวเลือกไว้ในไฟล์ล่วงหน้า
ป้องกันพายุรีสตาร์ตด้วย โดยนับความพยายามและหยุด ตัวเฝ้าดูที่ตอบสนองทุกการตรวจสอบที่ล้มเหลวจะเปลี่ยนความล้มเหลวหนึ่งครั้งให้เป็นลูป
ระงับระบบหนึ่งครั้ง แล้วอ่านบันทึกเพื่อดูเอาต์พุตของฮุคเอง นั่นคือการทดสอบเดียวที่พิสูจน์ลำดับ