hook ฝั่งไคลเอนต์หรือ hook ฝั่งเซิร์ฟเวอร์? สคริปต์ OpenVPN รันที่ไหน
เส้นทางสคริปต์ในการตั้งค่าเซิร์ฟเวอร์คือเส้นทางบนเซิร์ฟเวอร์ เลือก hook ตามเครื่องที่ต้องทำงาน และเลิกคาดหวังว่า push จะรันโค้ดบนแล็ปท็อป
งานนี้ชัดเจน เมื่อแล็ปท็อปเชื่อมต่อ มีบางอย่างบนแล็ปท็อปควรเปลี่ยน การตั้งค่าที่กำลังแก้ไขเป็นของเซิร์ฟเวอร์ และนั่นคือจุดที่สมมติฐานพัง เส้นทางในไฟล์เซิร์ฟเวอร์ชี้ไปยังไฟล์บนเซิร์ฟเวอร์เครื่องนั้น และไม่ว่าจะ push มากแค่ไหนก็ไม่เปลี่ยนว่าโปรเซสใดเป็นผู้รันมัน การเลือกระหว่าง hook สองแบบเป็นเรื่องของการตัดสินว่าเครื่องใดเป็นเจ้าของงาน และยอมรับข้อจำกัดที่ตามมา
สองเครื่อง สองคำถามที่ต้องตอบก่อน
ถามว่าการเปลี่ยนสถานะต้องเกิดขึ้นที่ไหน แล้วถามว่าเหตุการณ์ใดตรงกับมัน ถ้าการเปลี่ยนแปลงเป็นการอนุญาตต่อผู้ใช้หรือการตัดสินการตั้งค่าต่อไคลเอนต์ มันเป็นของที่ซึ่งรู้จักไดเรกทอรีผู้ใช้ นั่นคือเซิร์ฟเวอร์ หากการเปลี่ยนแปลงเป็นเส้นทาง การตั้งค่า resolver หรือตัวช่วยภายในเครื่องบนปลายทาง มันเป็นของปลายทาง และมีเพียงปลายทางเท่านั้นที่ทำได้
การตอบสองคำถามนี้ในลำดับกลับกันคือวิธีที่ผู้คนลงเอยด้วยการพยายาม push ไฟล์แบตช์ไปยังแล็ปท็อป Windows เซิร์ฟเวอร์รู้ว่าใครเชื่อมต่อ แล็ปท็อปรู้ว่าสแตกเครือข่ายของตัวเองเป็นอย่างไร ไม่มีฝ่ายใดมีข้อมูลของอีกฝ่าย และความพยายามมักล้มเหลวอย่างเงียบ ๆ แทนที่จะเป็นข้อผิดพลาดที่ชัดเจน
ก่อนทั้งสองข้อ ควรถามคำถามที่สามว่า แพลตฟอร์มเสนอ hook ที่คุณต้องการหรือไม่ อุปกรณ์ที่สร้างการตั้งค่าของตัวเองอาจไม่เสนอชื่อเหตุการณ์เดียวกัน และไคลเอนต์เดสก์ท็อปที่นำเข้าไฟล์ .ovpn อาจไม่ใช่ไคลเอนต์เดียวกันกับที่ไฟล์ถูกเขียนขึ้นมา การยืนยันแพลตฟอร์มก่อนช่วยให้คุณไม่ต้องออกแบบรอบ hook ที่ไม่มีอยู่ที่นั่น และยังบอกด้วยว่าเอกสารใดใช้กับเครื่องตรงหน้าคุณจริง
ตัวเลือกฝั่งเซิร์ฟเวอร์: เหตุการณ์ต่อการเชื่อมต่อหนึ่งครั้ง
สคริปต์ client-connect รันในบริบทโปรเซสของเซิร์ฟเวอร์เมื่อไคลเอนต์ที่ผ่านการรับรองความถูกต้องเชื่อมต่อ และได้รับรายละเอียดการเชื่อมต่อที่จัดทำเอกสารไว้ เช่น common name และที่อยู่ที่จัดสรรให้ นี่คือที่ที่เหมาะสมสำหรับการเขียนส่วนการตั้งค่าต่อไคลเอนต์ การบังคับใช้การตัดสินนโยบาย หรือการบันทึกสถานะที่เซิร์ฟเวอร์เป็นเจ้าของ
ความแตกต่างที่ผู้คนมองข้ามคือความต่างระหว่าง hook นั้นกับ hook up ของเซิร์ฟเวอร์ hook up ทำงานเมื่อเซิร์ฟเวอร์เปิดอุปกรณ์อุโมงค์ ซึ่งบนเซิร์ฟเวอร์ที่มีไคลเอนต์หลายรายเกิดขึ้นครั้งเดียวตอนเริ่มเดมอน ไม่ใช่เหตุการณ์ต่อการล็อกอิน และโค้ดที่วางไว้ที่นั่นจะรันตอนบริการเริ่ม ไม่ใช่ตอนผู้ใช้เชื่อมต่อ
บนอุปกรณ์ที่มีอินเทอร์เฟซเว็บ ให้ใช้กลไกส่วนขยายที่รองรับแทนการแก้ไขไฟล์เดมอนที่สร้างขึ้น ไฟล์ที่สร้างขึ้นจะถูกเขียนใหม่ในการบันทึกครั้งถัดไป และการเขียนใหม่นั้นจะลบการเปลี่ยนแปลงของคุณอย่างเงียบ ๆ ในจังหวะที่แย่ที่สุด เก็บสำเนาข้อความส่วนขยายไว้นอกอุปกรณ์ เพื่อให้การอัปเดตเฟิร์มแวร์ไม่ทำให้สูญเสียเจตนาไปด้วย
ตัวเลือกฝั่งไคลเอนต์: งานที่ต้องรันในเครื่อง
ไคลเอนต์ของชุมชนสามารถรันสคริปต์ภายในเครื่องเมื่ออุปกรณ์อุโมงค์ขึ้น และอีกครั้งเมื่อติดตั้งเส้นทาง ทั้งสองเป็นจังหวะที่ต่างกัน และการเลือกผิดจะสร้างการแข่งแบบคลาสสิกที่ตัวช่วยเริ่มทำงานก่อนที่เส้นทางที่มันพึ่งพาจะมีอยู่
ตัวช่วยต้องมีอยู่บนไคลเอนต์นั้น อ่านได้และเรียกใช้ได้โดยบัญชีที่รันไคลเอนต์ และได้รับอนุญาตจากการตั้งค่า script-security ที่ชัดเจน สคริปต์ที่ทำงานเมื่อคุณเปิดไคลเอนต์ในฐานะผู้ดูแลระบบไม่ได้บอกอะไรเกี่ยวกับบริการก่อนการลงชื่อเข้าใช้หรือเซสชันของผู้ใช้อื่น
การตั้งชื่อก็สำคัญ hook up ตรงกับการสร้างอุปกรณ์ และ route-up ตรงกับการติดตั้งเส้นทาง แต่งานที่ต้องการให้เครือข่ายส่วนตัวเข้าถึงได้ควรตรวจสอบการเข้าถึง แทนที่จะถือว่าการสร้างอุปกรณ์หมายความว่าทุกเส้นทาง รายการ resolver และแอปพลิเคชันพร้อมแล้ว
ทำไมการ push โค้ดที่เรียกใช้ได้จึงไม่อยู่ในตัวเลือก
ตัวเลือกที่ push ลงไปถูกจำกัดโดยเจตนา และตัวเลือกที่รันสคริปต์อยู่ในหมวดที่เซิร์ฟเวอร์ไม่ได้รับอนุญาตให้ส่งลงไป ข้อจำกัดนี้มีอยู่เพราะทางเลือกอื่นจะทำให้เซิร์ฟเวอร์ที่ถูกบุกรุกหรือตั้งค่าผิดสามารถรันคำสั่งตามอำเภอใจบนทุกไคลเอนต์ที่เคยเชื่อมต่อ
การเปิดใช้การรันสคริปต์ในเครื่องไม่เปลี่ยนสิ่งนั้น การตั้งค่า script-security ของคุณอนุญาตสคริปต์ภายในเครื่องที่คุณเลือกเอง ไม่ได้ให้อำนาจเซิร์ฟเวอร์ในการจัดหาตัวใหม่
หากเป้าหมายเป็นเพียงการติดตั้งเส้นทาง VPN ให้ใช้การตั้งค่าเส้นทางที่รองรับแทนการประดิษฐ์รูปแบบการรันจากระยะไกล หากเป้าหมายต้องการโค้ดในเครื่องจริง ๆ ให้เผยแพร่ผ่านเครื่องมือจัดการปลายทางขององค์กร และตรวจสอบเหมือนซอฟต์แวร์อื่นใดที่รันด้วยสิทธิ์ของผู้ใช้
ต้องตรวจสอบอะไรก่อนจะเชื่อถือ hook ใด ๆ
จดสี่อย่างสำหรับแต่ละ hook ได้แก่ เครื่อง ชื่อเหตุการณ์ บัญชีที่มันรัน และการเปลี่ยนสถานะที่มันควรสร้าง จากนั้นทดสอบการเชื่อมต่อ การเชื่อมต่อใหม่ และเส้นทางการทำความสะอาด เพราะ hook ที่รั่วสถานะเมื่อเชื่อมต่อใหม่นั้นแย่กว่าตัวที่ไม่เคยรันเลย
ทดสอบภายใต้บัญชีที่จะรันมันจริง ๆ ในจังหวะที่จะรันจริง ๆ คู่มือ openvpn(8) จัดทำเอกสาร hook ทั้งสองตระกูลและข้อจำกัดของ push แพลตฟอร์มที่คุณติดตั้งจะจัดทำเอกสารว่าเปิดเผยสิ่งเหล่านี้หรือไม่ สคริปต์ที่สำเร็จในเทอร์มินัลผู้ดูแลระบบแบบโต้ตอบเป็นสมมติฐาน ไม่ใช่การยืนยัน