ppp0 หรือ ppp1? การตั้งชื่อเซสชัน VPN แบบ PPP สำหรับสคริปต์
pppd มอบชื่ออินเทอร์เฟซและตัวทำเครื่องหมายโปรไฟล์ให้แต่ละเซสชัน อ่านทั้งสองจากฮุก ไม่ใช่จาก ppp0 จองชื่อตายตัวเฉพาะเมื่อต้องการให้ปฏิเสธ
สคริปต์ฮุกทำงาน อ่าน ppp0 และใช้เส้นทางกับอินเทอร์เฟซใดก็ตามที่ถือชื่อนั้นในขณะนั้น บางครั้งก็คืออุโมงค์ที่คุณตั้งใจ บางครั้งก็คือเซสชันที่เชื่อมต่อเมื่อหนึ่งนาทีก่อน การเชื่อมต่อใหม่ครั้งถัดไปจะเลื่อนหมายเลข และสคริปต์เดิมก็กำหนดค่าลิงก์ผิดอย่างเงียบ ๆ วิธีแก้คือดึงอินเทอร์เฟซจากคำสั่งที่เพิ่งทำงานไป และพาโปรไฟล์ที่ตั้งใจไว้ไปด้วย
ติดตามเซสชันหนึ่งตัวจากการตั้งค่าไปจนถึงฮุก
เริ่มจากจุดที่เซสชันถูกสร้างขึ้น xl2tpd เปิด pppd ด้วยไฟล์ตัวเลือกที่ pppoptfile ของอุโมงค์นั้นระบุ ดังนั้นปลั๊กอิน หมายเลขยูนิต และตัวทำเครื่องหมายโปรไฟล์ใด ๆ จึงถูกกำหนดที่นั่น ไม่ใช่ในไฟล์ส่วนกลาง ตัวจัดการการเชื่อมต่ออาจสร้างตัวเลือกของตัวเอง ซึ่งหมายความว่าการแก้ไข /etc/ppp/options ไม่ใช่หลักฐานว่าอุโมงค์ที่คุณสนใจเปลี่ยนไป เมื่อลิงก์ขึ้น pppd จะเรียกใช้สคริปต์แจ้งเตือนจากตัวส่งของการกระจาย สคริปต์เหล่านั้นได้รับชื่ออินเทอร์เฟซเป็นอาร์กิวเมนต์แรก และตัวทำเครื่องหมายโปรไฟล์เป็นอาร์กิวเมนต์ที่หก
สภาพแวดล้อมพาข้อเท็จจริงเดียวกันภายใต้ชื่ออย่าง IFNAME และ PPP_IPPARAM แต่การเข้าถึงขึ้นอยู่กับตัวส่งที่ติดตั้งไว้ อ่านตัวส่งก่อนจะพึ่งตัวแปร: บางดิสทริบิวชันคงลำดับอาร์กิวเมนต์ upstream ไว้ บางตัวกรองสภาพแวดล้อมก่อนเรียกสคริปต์ของคุณ สคริปต์ที่ใช้เพียง $1 และอาร์กิวเมนต์ที่หกทำงานได้ทั้งสองแบบ
อ่านอินเทอร์เฟซจากคำสั่งที่เรียกใช้
ฮุกแบบดั้งเดิมได้รับอินเทอร์เฟซเป็นอันแรก ค่าตำแหน่งนั้นคือตัวระบุอินเทอร์เฟซที่อธิบายเซสชันซึ่งกระตุ้นสคริปต์ เก็บไว้ในตัวแปรตอนต้น แล้วใช้ตัวแปรนั้นกับเส้นทาง กฎไฟร์วอลล์ และการรื้อถอน
ipparam office-vpn
แนบตัวทำเครื่องหมายโปรไฟล์ไว้ที่จุดที่กำหนดตัวเลือก ไม่ใช่ในสคริปต์ เมื่อมีบรรทัดนั้นในไฟล์ตัวเลือกของอุโมงค์ ทุกเซสชันที่สร้างจากไฟล์นั้นจะพา office-vpn เป็นอาร์กิวเมนต์ที่หก สคริปต์สามารถแยกสาขาตามตัวทำเครื่องหมายได้ขณะเดียวกันก็ยังทำงานกับอินเทอร์เฟซจริง แยกสองอย่างนี้ออกจากกันในโค้ด เพราะตัวทำเครื่องหมายนั้นเสถียร แต่อินเทอร์เฟซถูกจัดสรรต่อเซสชัน
ขอชื่อเฉพาะเมื่อการปฏิเสธนั้นถูกต้อง
ชื่อตายตัวดูง่ายกว่าการอ่านอาร์กิวเมนต์ แต่เปลี่ยนพฤติกรรมเมื่อล้มเหลว ตัวเลือก unit ขอหมายเลขสำหรับการเชื่อมต่อขาออก และ pppd จะกลับไปใช้การจัดสรรแบบพลวัตเมื่อยูนิตนั้นถูกใช้อยู่แล้ว ไม่มีอะไรในผลลัพธ์นั้นที่จอง ppp0 ให้โปรไฟล์ของคุณ
ifname ppp-office
ตัวเลือก ifname ทำงานต่างออกไป หากชื่อที่ขอถูกใช้อยู่หรือไม่สามารถกำหนดได้ pppd จะออกแทนที่จะเลือกชื่ออื่น นั่นคือการเลือกนโยบาย ไม่ใช่การเปลี่ยนชื่อเพื่อความสวยงาม ใช้เมื่อควรปฏิเสธอินสแตนซ์ที่สองของโปรไฟล์เดียวกันที่ทำงานพร้อมกัน และยืนยันว่า pppd ที่ติดตั้งและตัวจัดการการเชื่อมต่อของคุณส่งตัวเลือกนี้ผ่านไป
ไม่ว่าจะทางใด ชื่อที่สคริปต์เห็นคือชื่อที่ต้องจัดการ ชื่อที่กำหนดไว้ไม่ได้ลบความจำเป็นในการอ่านคำสั่งที่เรียกใช้ เพราะเซสชันที่เริ่มใหม่ยังคงแสดงชื่อที่ต่างจากครั้งก่อนได้
ทำให้การรื้อถอนตรงกับเซสชันที่คุณกำหนดค่า
เส้นทางและกฎไฟร์วอลล์อยู่ได้นานกว่าสคริปต์ที่สร้างมันขึ้นมา การรื้อถอนจึงต้องลบวัตถุที่เซสชันเป็นเจ้าของอย่างแม่นยำ ติดแท็กกฎด้วยตัวทำเครื่องหมายโปรไฟล์และอินเทอร์เฟซ แล้วลบตามแท็กนั้น หากมีสองอุโมงค์ทำงานพร้อมกัน การลบทุกอย่างที่กล่าวถึง ppp คือวิธีที่การตัดการเชื่อมต่อหนึ่งทำให้อีกการเชื่อมต่อเสียหาย
ทดสอบกรณีที่เปิดเผยบั๊ก ยกเซสชัน PPP ตัวที่สองขึ้นขณะที่ตัวแรกยังเชื่อมต่ออยู่ จากนั้นเชื่อมต่อตัวแรกใหม่และดูว่าฮุกรายงานอินเทอร์เฟซใด การรันที่สำเร็จด้วยเซสชันเดียวไม่ได้พิสูจน์อะไรเกี่ยวกับการจัดสรรชื่อ ทำซ้ำโดยหยุด VPN เพื่อยืนยันว่าการรื้อถอนไม่ทิ้งเส้นทางเก่าไว้
เก็บตัวทำเครื่องหมาย อินเทอร์เฟซ และพาธของฮุกไว้ในบันทึกการติดตั้งใช้งาน เมื่อหมายเลขเปลี่ยนหลังรีบูต ค่าทั้งสามนั้นอธิบายว่าทำไมสคริปต์จึงทำงานต่างออกไปโดยไม่มีการแก้ไขการกำหนดค่าใด ๆ