กฎการกำหนดเส้นทางอ่านเครื่องหมายของแพ็กเก็ต ไม่ใช่ conntrack
การกำหนดเส้นทางตามนโยบายอ่านเครื่องหมายของแพ็กเก็ต ส่วน conntrack เก็บค่าอื่นที่มีอายุยาวกว่า การคัดลอกระหว่างสองสิ่งนี้เป็นขั้นตอนที่ต้องมีคนเขียน
การตรวจสอบสี่อย่างแยกกฎเครื่องหมายที่ใช้งานได้ออกจากเส้นทางที่ใช้งานได้: กฎอ่านเครื่องหมายใด แพ็กเก็ตยังพาเครื่องหมายนั้นอยู่หรือไม่ตอนค้นหา เครื่องหมายการเชื่อมต่อถูกเรียกคืนบนแพ็กเก็ตถัดไปหรือไม่ และมาสก์และลำดับความสำคัญของกฎที่ตรงกันยอมให้ทำงานหรือไม่ ตัวนับที่เพิ่มขึ้นพิสูจน์เพียงว่ากฎบางข้อตรงกับบางสิ่ง ไม่ได้บอกอะไรเกี่ยวกับสิ่งที่แพ็กเก็ตพาไปตอนที่เคอร์เนลเลือกเส้นทาง
เครื่องหมายสองอย่างอาศัยอยู่คนละที่และหมดอายุตามตารางต่างกัน
สองเครื่องหมาย สองอายุ
เครื่องหมายแพ็กเก็ตเป็นของ skb หนึ่งตัว เคลื่อนที่ไปกับมันผ่านฮุกและถูกใช้โดยตัวเลือก fwmark ของการกำหนดเส้นทางตามนโยบาย ส่วนเครื่องหมายการเชื่อมต่อเป็นของรายการ conntrack คงอยู่ตลอดแพ็กเก็ตของโฟลว์นั้นและมองไม่เห็นสำหรับกฎการกำหนดเส้นทางจนกว่าอะไรบางอย่างจะคัดลอกกลับมา การบันทึกเครื่องหมายแพ็กเก็ตลงในการเชื่อมต่อคือการจัดเก็บ การเรียกคืนเป็นอีกการกระทำหนึ่ง ทั้งสองไม่เกิดขึ้นโดยปริยาย
นี่คือเหตุผลที่ชุดกฎอาจดูสอดคล้องกันในขณะที่การตัดสินใจเลือกเส้นทางเห็นศูนย์: ค่าถูกจัดเก็บไว้ และไม่มีอะไรเรียกคืนมัน
การคัดลอกระหว่างสองสิ่งนี้เป็นขั้นตอนที่คุณเขียน
สองประโยคที่สำคัญวิ่งไปคนละทิศ: อันหนึ่งบันทึกเครื่องหมายของแพ็กเก็ตลงในการเชื่อมต่อ อีกอันโหลดเครื่องหมายของการเชื่อมต่อลงบนแพ็กเก็ต คุณต้องใช้อันไหนขึ้นอยู่กับว่าการจำแนกประเภทเกิดขึ้นเมื่อใดเทียบกับโฟลว์ ดีไซน์หนึ่งอาจต้องการเพียงเครื่องหมายแพ็กเก็ต และการเพิ่มการทำเครื่องหมายผ่าน conntrack เพราะวิธีเลี่ยงบางอย่างใช้ทั้งสองอย่างคือหนทางที่สนโยบายง่าย ๆ ได้โหมดล้มเหลวที่สอง
ct mark set meta mark meta mark set ct mark
เขียนทิศทางไว้ข้างกฎ เพราะมองแรกจากไวยากรณ์ไม่ชัดเจน บรรทัดแรกบันทึก บรรทัดที่สองเรียกคืน และไม่มีอันใดสื่อถึงอีกอัน
จำแนกประเภทก่อนการค้นหาที่ใช้มัน
ทราฟฟิกที่สร้างขึ้นภายในและทราฟฟิกที่ส่งต่อจาก LAN ผ่านฮุกต่างกันและไปถึงการตัดสินใจเลือกเส้นทางต่างเวลา กฎขาออกที่ใช้ได้กับการเชื่อมต่อของเราเตอร์เองไม่ได้พิสูจน์ว่าแพ็กเก็ตของไคลเอนต์ที่ส่งต่อถูกทำเครื่องหมายก่อนการค้นหา วางการจำแนกประเภทไว้ที่ที่การค้นหาที่ใช้มันยังไม่เกิดขึ้น และตรวจสอบว่ากฎถัดไปในเชนเดียวกันเขียนทับค่าหรือไม่ ลำดับภายในเชนเป็นส่วนหนึ่งของการกำหนดค่า ไม่ใช่รายละเอียดการใช้งาน
ความคงอยู่ของสถานะการเชื่อมต่อก็ต้องการแผนที่ชัดเจนเช่นกัน หากจำแนกเฉพาะแพ็กเก็ตแรกของโฟลว์ แพ็กเก็ตถัดไปต้องได้รับการเรียกคืนเครื่องหมายที่บันทึกไว้ มิฉะนั้นจะใช้เส้นทางที่ไม่มีเครื่องหมาย นี่คือความต่างระหว่างเครื่องหมายที่อธิบายการเชื่อมต่อกับเครื่องหมายที่อธิบายแพ็กเก็ต
ถามเส้นทางด้วยคำถามที่มีเครื่องหมาย
ip route get 10.77.0.10 mark 0x2
ตรวจดูกฎและตาราง แล้วถามเส้นทางโดยรวมเครื่องหมายไว้ด้วย พร้อมแหล่งที่มาหรืออินเทอร์เฟซขาเข้าเมื่อสิ่งเหล่านั้นมีผลต่อนโยบาย การค้นหาปกติที่ไม่มีเครื่องหมายตอบคำถามอื่นและจะรายงานเส้นทางที่คุณไม่ต้องการอย่างยินดี ตรวจสอบมาสก์และลำดับความสำคัญของกฎรวมถึงค่าของมัน และยืนยันว่าตารางที่เลือกมีเส้นทางที่ใช้งานได้
ตัวนับที่เพิ่มขึ้นเป็นหลักฐานว่ากฎบางข้อตรงกับแพ็กเก็ตบางตัว ไม่ใช่หลักฐานว่าแพ็กเก็ตสุดท้ายพาเครื่องหมายที่ตั้งใจไว้ ณ จุดตัดสินใจที่ถูกต้อง
อ่านเครื่องหมาย ทิศทาง เวลา และมาสก์ การตรวจสอบสี่อย่าง และเส้นทางก็ไม่เป็นปริศนาอีกต่อไป