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

บรรทัดนี้ดูไม่เป็นอันตรายและมักจะเป็นเช่นนั้น แต่ตัดสินเพียงคำถามเดียว: แพ็กเก็ตสำหรับที่อยู่ IPv4 นั้นไปที่ใด มันไม่เปลี่ยน DNS, IPv6, นโยบายไฟร์วอลล์ หรือโปรเซสที่เปิดการเชื่อมต่อ และแต่ละอย่างสามารถทำให้ข้อยกเว้นล้มเหลวอย่างเงียบ ๆ

net_gateway ระบุอะไรจริง ๆ

รายการโปรไฟล์สำหรับข้อยกเว้นนั้นมีหนึ่งบรรทัด: route 198.51.100.77 255.255.255.255 net_gateway. ที่อยู่แรกเป็นตัวแทนเอกสารสำหรับปลายทาง มาสก์ทำให้เป็นเส้นทางโฮสต์เดียว และโทเคนสุดท้ายระบุตัวแทนเกตเวย์ OpenVPN แก้ไขตัวแทนเกตเวย์เมื่อติดตั้งเส้นทาง vpn_gateway หมายถึงเกตเวย์ของอุโมงค์เอง คือด้านไกลของการเชื่อมต่อ VPN net_gateway หมายถึงเกตเวย์เริ่มต้นที่โฮสต์มีก่อนที่ VPN จะเปลี่ยนสิ่งใด ซึ่งโดยปกติคือเราเตอร์ภายในเครือข่ายจริง

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

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

ทำไมเส้นทางโฮสต์จึงชนะค่าเริ่มต้นของอุโมงค์

การกำหนดเส้นทางตัดสินด้วยคำนำหน้าที่ตรงกันอย่างเฉพาะเจาะจงที่สุด redirect-gateway def1 โดยปกติไม่ได้แทนที่เส้นทางเริ่มต้น มันเพิ่มสองครึ่ง คือเส้นทางสำหรับครึ่งล่างของพื้นที่ที่อยู่และอีกอันสำหรับครึ่งบน เพื่อให้เส้นทางเริ่มต้นเดิมคงอยู่เพื่อการใช้งานอื่น ครึ่งเหล่านั้นกว้างกว่าที่อยู่เดียว

เส้นทางสำหรับที่อยู่เดียวที่มีมาสก์ 255.255.255.255 คือ /32 ซึ่งเป็นความเฉพาะเจาะจงสูงสุดที่ IPv4 ให้ได้ เมื่อประเมินแพ็กเก็ตสำหรับที่อยู่นั้น /32 ตรงกันและชนะไม่ว่าเส้นทางใดจะถูกติดตั้งก่อน นี่คือกลไกเบื้องหลังข้อยกเว้น และมันทำงานเหมือนกันบน Linux, macOS และ Windows ตราบใดที่เส้นทางนั้นมีอยู่จริง

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

สิ่งที่ข้อยกเว้นไม่ครอบคลุม

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

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

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

ตรวจสอบข้อยกเว้นโดยไม่หลอกตัวเอง

เริ่มจากเส้นทางที่ติดตั้งไว้ ไม่ใช่เบราว์เซอร์ บน Linux ถามเคอร์เนลว่าจะใช้เส้นทางและฮอปถัดไปใดสำหรับที่อยู่เฉพาะ บน Windows อ่านตารางเส้นทางสำหรับ /32 นั้น ยืนยันว่าเกตเวย์เป็นตัวจริงไม่ใช่อุโมงค์ หากไม่มีรายการ แสดงว่าโปรไฟล์ไม่ได้ถูกใช้หรือไคลเอนต์ไม่มีสิทธิ์เปลี่ยนเส้นทาง

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

สุดท้าย ตรวจสอบการควบคุมที่สามารถเอาชนะเส้นทางได้ kill switch ฝั่งไคลเอนต์หรือการตั้งค่า block-outside-dns ของ Windows สามารถห้ามทราฟฟิกโดยตรง ซึ่งจะปรากฏเป็นการเชื่อมต่อที่ล้มเหลวแม้เส้นทางจะถูกต้อง อย่าปิดการควบคุมเหล่านั้นเพื่อให้ข้อยกเว้นดูเหมือนทำงาน หากนโยบายห้ามเส้นทางตรง ข้อยกเว้นก็เป็นปัญหาการออกแบบสำหรับเจ้าของบริการ VPN

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

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