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

เครื่องหมายสองอย่างอาศัยอยู่คนละที่และหมดอายุตามตารางต่างกัน

สองเครื่องหมาย สองอายุ

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

นี่คือเหตุผลที่ชุดกฎอาจดูสอดคล้องกันในขณะที่การตัดสินใจเลือกเส้นทางเห็นศูนย์: ค่าถูกจัดเก็บไว้ และไม่มีอะไรเรียกคืนมัน

การคัดลอกระหว่างสองสิ่งนี้เป็นขั้นตอนที่คุณเขียน

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

ct mark set meta mark
meta mark set ct mark

เขียนทิศทางไว้ข้างกฎ เพราะมองแรกจากไวยากรณ์ไม่ชัดเจน บรรทัดแรกบันทึก บรรทัดที่สองเรียกคืน และไม่มีอันใดสื่อถึงอีกอัน

จำแนกประเภทก่อนการค้นหาที่ใช้มัน

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

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

ถามเส้นทางด้วยคำถามที่มีเครื่องหมาย

ip route get 10.77.0.10 mark 0x2

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

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

อ่านเครื่องหมาย ทิศทาง เวลา และมาสก์ การตรวจสอบสี่อย่าง และเส้นทางก็ไม่เป็นปริศนาอีกต่อไป

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