VPN ของเครือข่ายบ้านไม่มีอะไรต้องทำเมื่อแล็ปท็อปอยู่ในเครือข่ายนั้นอยู่แล้ว ทางลัดที่น่าดึงดูดคือคำสั่งเตรียมพร้อมที่จบด้วยรหัสที่ไม่ใช่ศูนย์ ซึ่งทำให้ยูนิตล้มเหลวและทำให้แดชบอร์ดทุกตัวดูเสีย systemd มีคำสั่งสำหรับการตัดสินใจรูปแบบนี้โดยเฉพาะ และแยกการข้ามโดยเจตนาออกจากข้อผิดพลาดจริง การทำสิ่งนี้ให้ถูกต้องส่วนใหญ่คือการเขียนว่าความหมายของรหัสออกแต่ละตัวคืออะไร

ทำไมเงื่อนไขเบื้องต้นที่ล้มเหลวจึงเป็นรูปแบบที่ผิด

ExecStartPre ถือว่าการออกด้วยรหัสที่ไม่ใช่ศูนย์คือความล้มเหลวในการเริ่ม ซึ่งถูกต้องสำหรับคำสั่งที่เตรียมบริการ การใช้เป็นเงื่อนไขทำให้การตัดสินใจเชิงนโยบายแยกไม่ออกจากความขึ้นต่อกันที่เสีย ExecCondition มีอยู่เพื่อให้ยูนิตปฏิเสธการเริ่มได้โดยไม่ถูกทำเครื่องหมายว่าล้มเหลว

ความต่างนี้สำคัญตอนตีสาม เมื่อไม่มีใครอยากตรวจสอบยูนิตสีแดงที่ทำงานตามที่ออกแบบไว้ ยูนิตที่ล้มเหลวยังซ่อนข้อผิดพลาดจริงไว้ท่ามกลางข้อผิดพลาดโดยเจตนา

เขียนสัญญารหัสออกก่อน

เขียนสัญญาก่อนสคริปต์ ออกด้วยศูนย์หมายถึงดำเนินต่อ ออกด้วยหนึ่งหมายถึงข้ามคำสั่งเริ่มที่เหลือ และออกด้วย 255 หมายถึงตัวเงื่อนไขเองรันไม่ได้ รหัสระหว่างสองถึง 254 โดยปกติก็หมายถึงข้ามเช่นกัน ซึ่งลืมได้ง่ายเมื่อตัวช่วยคืนรหัสข้อผิดพลาดแบบสุ่ม drop-in ด้านล่างผูกตัวช่วยกับชื่อยูนิตจริง

[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpn

ตรวจสอบยูนิตที่มีผลสำหรับการตั้งค่า SuccessExitStatus หรือ stop-post ที่สืบทอดมาก่อนที่จะถือว่าความหมายเป็นค่าเริ่มต้น จากนั้นทดสอบแต่ละผลลัพธ์ทั้งสามอย่างตั้งใจ

เบาะแสเครือข่ายไม่ใช่หลักฐานของตำแหน่ง

ที่อยู่เราเตอร์ที่เข้าถึงได้หรือ MAC ที่รู้จักอาจบ่งชี้เครือข่ายที่ถูกต้อง และทั้งสองอย่างไม่ได้พิสูจน์เรื่องนี้ เครือข่ายอื่นอาจใช้ที่อยู่เดิมซ้ำ ข้อมูล ARP อาจล้าสมัย และตัวระบุสามารถเลียนแบบได้ มองการตรวจสอบว่าเป็นการปรับแต่งที่สอดคล้องกับนโยบาย ไม่ใช่ผลลัพธ์ของการยืนยันตัวตน

ตัดสินล่วงหน้าว่าความไม่แน่นอนหมายถึงอะไร การเริ่ม VPN เมื่อไม่แน่ใจปลอดภัยสำหรับไคลเอนต์ที่จะเชื่อมต่อไม่ได้อยู่แล้ว การข้ามเมื่อไม่แน่ใจไม่ปลอดภัย ทำให้การตรวจสอบมีขอบเขต และอ่านอินเทอร์เฟซที่ใช้งานอยู่แทนการถือว่าตัวแรกในรายการ การตรวจสอบที่ค้างแย่กว่าการตอบว่าไม่ เพราะยูนิตต้องรอ

บันทึกสมมติฐานเหล่านั้นไว้ข้างไฟล์ยูนิต เพื่อให้คนถัดไปรู้ว่าตัวช่วยเชื่ออะไร ความคิดเห็นที่ด้านบนของสคริปต์เป็นที่ที่ถูกที่สุดในการเก็บไว้

จัดการการย้ายระหว่างเครือข่าย

เงื่อนไขทำงานเมื่อบริการเริ่ม และไม่ถูกประเมินใหม่ภายหลัง ยูนิตที่ถูกข้ามยังคงถูกข้ามหลังจากแล็ปท็อปย้ายไปร้านกาแฟ และอุโมงค์ที่ทำงานอยู่ยังคงเปิดอยู่หลังจากแล็ปท็อปกลับบ้าน เชื่อมวงจรชีวิตของการเปลี่ยนเครือข่ายเข้ากับการตัดสินใจเริ่มและหยุดด้วยกลไกแยกต่างหาก.

systemctl cat home-vpn.service

ทดสอบสี่กรณี: เริ่มที่บ้าน เริ่มนอกบ้าน การตรวจสอบที่ไม่สามารถทำงานได้ และการย้ายระหว่างเครือข่ายขณะยูนิตทำงานอยู่ ทำให้เหตุผลของการข้ามมองเห็นได้ในบันทึก เพื่อให้การตัดสินใจโดยเจตนาไม่ดูเหมือนความล้มเหลวในการยืนยันตัวตน เอกสารอ้างอิงบริการ อธิบายความหมายของการออกและเวอร์ชันขั้นต่ำ

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