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

สามขั้น สามขีดจำกัดที่ต่างกัน

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

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

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

StageWho decidesWhat you can see
ParseClient engineAn error naming the option
InstallActivation ownerA route count below the pushed count
OfferServer policyA route absent from the pushed list

ตัวแยกวิเคราะห์พูดก่อน

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

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

บันทึกสตริงเวอร์ชันจากไบนารีที่รันจริง ไม่ใช่จากความคิดของผู้จัดการแพ็กเกจว่าได้ติดตั้งอะไรไว้ สองสิ่งนี้ไม่ตรงกันบ่อยกว่าที่คาด

ตัวติดตั้งมีเพดานของตัวเอง

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

นับสิ่งที่มาถึง ไม่ใช่สิ่งที่ถูกตั้งค่า คำสั่ง ip route show dev tun0 แสดงรายการเส้นทางที่ติดตั้ง และการเทียบจำนวนนั้นกับรายการที่ส่งไปจะแยกเส้นทางที่ถูกทิ้งออกจากเส้นทางที่ไม่เคยถูกส่ง จำนวนที่ตรงกับการส่งจะโยนความสงสัยกลับไปที่เซิร์ฟเวอร์

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

เซิร์ฟเวอร์ตัดสินว่าคุณได้รับข้อเสนออะไร

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

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

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

เปลี่ยนตัวเลขในที่ที่ถูกต้อง

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

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

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