อะไรที่เราเตอร์นโยบายเปลี่ยนในทราฟฟิก VPN และอะไรที่ไม่เปลี่ยน
กฎเป็นตัวเลือกว่าจะสอบถามตารางใด ดังนั้นเส้นทางเริ่มต้นในตารางหลักจึงมักไม่อธิบายอะไรเลย อ่านลำดับความสำคัญ เครื่องหมาย และแหล่งที่มาพร้อมกันก่อนเพิ่มกฎ
การเราเตอร์ตามนโยบายตอบคำถามคนละข้อกับที่บันทึกการแก้ปัญหาส่วนใหญ่ถาม ตารางหลักบอกว่าเส้นทางปลายทางไปที่ใด ส่วนกฎนโยบายบอกว่าจะสอบถามตารางใดเลย และกฎเหล่านั้นตัดสินได้จากที่อยู่ต้นทาง เครื่องหมายแพ็กเก็ต หรืออินเทอร์เฟซที่แพ็กเก็ตเข้ามา เมื่ออุโมงค์ทำงานไม่สม่ำเสมอ ชุดกฎมักเป็นสาเหตุ และตารางเราเตอร์มักไม่ใช่
กฎเลือกตาราง แล้วตารางเลือกเส้นทาง
แต่ละกฎมีลำดับความสำคัญ เงื่อนไขการจับคู่ และตารางปลายทาง เคอร์เนลไล่กฎตามลำดับความสำคัญและหยุดที่การจับคู่ครั้งแรก จากนั้นค้นหาคำนำหน้าที่สั้นหรือยาวที่สุดตามปกติในตารางนั้น กฎที่ชี้ไปยังตารางว่างจะตกไปยังสิ่งที่กฎถัดไปเลือก และนั่นคือเหตุผลที่กฎซึ่งเขียนอย่างระมัดระวังอาจดูเหมือนไม่ได้ทำอะไรเลย
นั่นคือเหตุผลที่การดัมป์ตารางหลักแทบไม่อธิบายไคลเอนต์ VPN ที่ทำงานอยู่ ไคลเอนต์มักแทรกกฎที่หมายเลขลำดับความสำคัญต่ำ ก่อนกฎเริ่มต้นของตารางหลักมาก แพ็กเก็ตจึงไม่เคยไปถึงเส้นทางที่คุณจ้องอยู่ การลดเมตริกในตารางหลักไม่เปลี่ยนอะไรกับทราฟฟิกที่ถูกเบี่ยงไปแล้ว
กฎยังทำให้คำนำหน้าเป็นหลุมดำหรือเข้าถึงไม่ได้โดยเจตนาได้ ไคลเอนต์บางตัวเพิ่มกฎเช่นนั้นเป็นสวิตช์นิรภัย แล้วการทิ้งแพ็กเก็ตก็ดูเหมือนอุโมงค์ที่พัง ไม่ใช่อุโมงค์ที่กำหนดค่าไว้
อ่านชุดกฎเป็นลำดับ ไม่ใช่เป็นรายการ
พิมพ์กฎพร้อมลำดับความสำคัญและตารางที่อ้างถึง จากนั้นพิมพ์ทุกตารางที่มีเส้นทางเริ่มต้นหรือเส้นทางอุโมงค์ ลำดับคือส่วนที่สำคัญ และเป็นส่วนที่ภาพหน้าจอมักละไว้:
ip rule show ip route show table all | sed -n '1,60p' ip route get 198.51.100.20 from 10.8.0.2 ip route get 198.51.100.20 from 10.8.0.2 mark 0x1
สองคำสั่งสุดท้ายคือสิ่งที่เปลี่ยนทฤษฎีให้เป็นการสังเกต เพราะมันถามว่า เคอร์เนลจะทำอะไรกับแหล่งที่มาและเครื่องหมายนั้น หากคำตอบเปลี่ยนเมื่อเครื่องหมายเปลี่ยน แสดงว่ากฎอิงเครื่องหมายกำลังทำงาน และการทดสอบใดที่ละเครื่องหมายกำลังทดสอบแพ็กเก็ตอื่น การเชื่อมต่อภายนอกสมควรมีกฎของตัวเอง อุโมงค์ที่เราเตอร์ทราฟฟิกทั้งหมดผ่านตัวเองต้องยกเว้นที่อยู่ปลายทางที่มันเชื่อมต่อ มิฉะนั้นแพ็กเก็ตที่เข้ารหัสจะถูกส่งกลับเข้าไปในอุโมงค์ที่เพิ่งออกมา ไคลเอนต์ส่วนใหญ่แทรกการยกเว้นนั้นอัตโนมัติ และชุดกฎที่แก้ด้วยมือคือจุดที่มันหายไป
เครื่องหมายและซ็อกเก็ต: สองวิธีที่ไคลเอนต์แบ่งทราฟฟิก
ไคลเอนต์บางตัวทำเครื่องหมายแพ็กเก็ตในไฟร์วอลล์และเพิ่มกฎที่ตรงกับเครื่องหมาย ตัวอื่นใช้การเราเตอร์ระดับซ็อกเก็ต โดยวางเส้นทางบนซ็อกเก็ตก่อนเชื่อมต่อ วิธีแรกมองเห็นได้ใน ip rule วิธีที่สองไม่ และจะไม่ปรากฏในการค้นหาทั่วไป
หากโปรแกรมทดสอบทำงานต่างจากแอปพลิเคชันที่มันควรเป็นตัวแทน ให้ตรวจสอบว่าแอปพลิเคชันวางเครื่องหมายหรือผูกกับอุปกรณ์ ความแตกต่างนั้นไม่ใช่ปริศนาเมื่อกลไกมีชื่อเรียก และอธิบายว่าทำไม curl จากเชลล์กับแท็บเบราว์เซอร์จึงเดินคนละเส้นทางบนเครื่องเดียวกันได้ ทั้งสองเทคนิคคือการเราเตอร์ตามนโยบายในความหมายกว้าง ทั้งคู่เลือกเส้นทางด้วยสิ่งอื่นที่ไม่ใช่ปลายทาง ไม่มีตัวใดอนุญาตทราฟฟิก และไม่มีตัวใดแทนที่กฎไฟร์วอลล์หรือข้อมูลรับรองที่อีกฝ่ายคาดหวัง
ตามรอยเจ้าของก่อนเพิ่มกฎอีกข้อ
กฎถูกติดตั้งโดยบางสิ่ง ไคลเอนต์ VPN ตัวจัดการเครือข่าย และสคริปต์ที่เขียนด้วยมือต่างเพิ่มกฎตอนเริ่มทำงานได้ และตรรกะการเชื่อมต่อใหม่ก็อาจทิ้งชุดก่อนหน้าไว้ กฎเก่าสองข้อจากโปรไฟล์ก่อนหน้าจะยังนำทราฟฟิกต่อไปอีกนานหลังจากลบโปรไฟล์แล้ว
ค้นหาว่ากระบวนการใดเป็นเจ้าของกฎจากลำดับความสำคัญและรูปร่าง แล้วตรวจสอบว่าเจ้าของนั้นเขียนชุดใหม่ทุกการเชื่อมต่อหรือไม่ หากเขียน กฎที่เพิ่มด้วยมือวันนี้จะหายไปพรุ่งนี้ และการแก้ไขเป็นเรื่องของการกำหนดค่าไคลเอนต์ ไม่ใช่ไฟล์ประวัติเชลล์ การล้างชุดกฎทั้งหมดเพื่อทดสอบเป็นทางลัดที่น่าดึงดูดโดยมีต้นทุนที่คาดเดาได้ คือมันลบกฎที่ไคลเอนต์ต้องใช้เพื่อให้อุโมงค์ของตัวเองทำงานด้วย ลบทีละกฎ หรือทดสอบบนเครื่องที่รีบูตได้
พิสูจน์ขอบเขตด้วยสองโฟลว์ ไม่ใช่หนึ่ง
การแก้ไขจะตรวจสอบได้ด้วยโฟลว์ที่ควรได้รับผลกระทบและโฟลว์ที่ไม่ควรเท่านั้น เลือกปลายทางที่นโยบายเราเตอร์เข้าไปในอุโมงค์ และอีกหนึ่งที่ต้องอยู่ข้างนอก จากนั้นเปรียบเทียบการค้นหาและการดักจับของทั้งสอง:
ip route get 198.51.100.20 from 192.0.2.44 ip route get 198.51.100.21 from 192.0.2.44 tcpdump -ni any host 198.51.100.21 and port 443
เมื่อการค้นหาสองครั้งคืนอินเทอร์เฟซต่างกัน แสดงว่ากฎกำลังทำอะไรบางอย่าง เมื่อคืนอินเทอร์เฟซเดียวกัน แสดงว่ากฎตรงกว้างกว่าที่ตั้งใจ และนั่นคือความล้มเหลวที่ส่งทั้งซับเน็ตผ่านอุโมงค์ที่ตั้งใจไว้สำหรับแอปเดียวอย่างเงียบ ๆ
บันทึกลำดับความสำคัญของกฎและบริการที่เป็นเจ้าของในตั๋ว พร้อมที่อยู่ทดสอบสองที่ แล้วคนถัดไปจะมีคู่ที่ทำซ้ำได้แทนคำอธิบายอาการ และบอกได้ในหนึ่งนาทีว่าการเราเตอร์ตามนโยบายยังทำงานอยู่หรือไม่