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

ความขัดแย้งอยู่ที่ตารางเส้นทาง

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

ไคลเอนต์ทั้งสองเป็นผู้แก้ไขตารางเดียวกัน การรู้ว่าการแก้ไขใดเกิดขึ้นล่าสุดอธิบายอาการได้เกือบทั้งหมด

อ่านว่าอุโมงค์ใดครอบครองเส้นทางปัจจุบัน

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

ip route get 10.20.0.5
route print -4

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

หยุดไม่ให้ไคลเอนต์ตัวที่สองอ้างสิทธิ์ทุกอย่าง

ไคลเอนต์ตัวหนึ่งควรเป็นเจ้าของเส้นทางเริ่มต้น อีกตัวควรพาเฉพาะคำนำหน้าของตัวเอง OpenVPN ไคลเอนต์สามารถปฏิเสธสิ่งที่เซิร์ฟเวอร์ผลักดันมาได้

pull-filter ignore "redirect-gateway"
ip route get 10.30.4.10

route-nopull จะไม่สนใจทุกเส้นทางที่ถูกผลักดันมา ส่วน pull-filter ignore "redirect-gateway" จะทิ้งเฉพาะคำสั่งเส้นทางเริ่มต้นและเก็บ DNS กับตัวเลือกอื่นที่ถูกผลักดันไว้ เลือกระหว่างสองวิธีตามปริมาณการตั้งค่าเซิร์ฟเวอร์ที่คุณยังต้องการ จากนั้นเพิ่มคำนำหน้าเฉพาะที่เครือข่ายที่สองต้องการ อย่าลืม DNS เพราะตัวแปลงชื่อที่ถูกผลักดันโดยอุโมงค์ที่ไม่พาคำค้นหาจะไม่คืนอะไรเลย ทดสอบโฮสต์ที่รู้จักหนึ่งเครื่องในแต่ละเครือข่าย และยืนยันที่อยู่ต้นทางที่ฝั่งไกลมองเห็น

เครือข่ายย่อยที่ทับซ้อนกันหลีกเลี่ยงไม่ได้

เมื่อทั้งสองเครือข่ายประกาศคำนำหน้าเดียวกัน เคอร์เนลเก็บรายการเดียวสำหรับสองตำแหน่งที่ต่างกันและต้องเลือก เส้นทางระดับโฮสต์ไม่อาจสร้างความแตกต่างที่ขาดหายไป และการปรับเมตริกก็ทำไม่ได้เช่นกัน เปลี่ยนเลขฝั่งหนึ่ง หรือให้ผู้ดูแลฝั่งนั้นแปลช่วงระยะไกลเพื่อให้คำนำหน้าแตกต่างกัน ตรวจเครือข่ายย่อยจริงก่อนโทษไคลเอนต์ เพราะค่าเริ่มต้น 192.168.1.0/24 ของเราเตอร์บ้านชนกับช่วงออฟฟิศบ่อยกว่าที่ใครคาดคิด บันทึกทั้งสองช่วงไว้ในตั๋วเพื่อไม่ให้การเปลี่ยนแปลงครั้งหน้าสร้างการทับซ้อนขึ้นใหม่

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

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