Bốn kiểm tra phân biệt một quy tắc dấu hoạt động với một tuyến hoạt động: quy tắc đọc dấu nào, gói tin còn mang dấu đó tại thời điểm tra cứu hay không, dấu kết nối có được phục hồi trên các gói sau hay không, và liệu mặt nạ và độ ưu tiên của quy tắc khớp có cho phép nó kích hoạt hay không. Một bộ đếm tăng lên chỉ chứng minh rằng một quy tắc nào đó đã khớp với thứ gì đó. Nó không nói gì về những gì gói tin mang khi nhân chọn đường cho nó.

Hai dấu sống ở hai nơi khác nhau và hết hạn theo hai lịch khác nhau.

Hai dấu, hai đời

Dấu gói tin thuộc về một skb, đi cùng nó qua các hook và bị bộ chọn fwmark của định tuyến theo chính sách tiêu thụ. Dấu kết nối thuộc về mục conntrack, tồn tại qua các gói của luồng đó và vô hình với quy tắc định tuyến cho đến khi có thứ gì đó sao chép nó trở lại. Lưu dấu gói tin vào kết nối là một lần lưu; phục hồi nó là một hành động riêng. Cả hai đều không xảy ra ngầm.

Vì thế một bộ quy tắc có thể trông nhất quán trong khi quyết định định tuyến nhìn thấy số không: giá trị đã được lưu, và không gì phục hồi nó.

Sao chép giữa hai bên là một bước bạn viết

Hai câu lệnh quan trọng chạy theo hai hướng ngược nhau: một câu lưu dấu của gói tin vào kết nối, câu kia nạp dấu của kết nối lên gói tin. Bạn cần câu nào tùy thuộc vào thời điểm phân loại so với luồng. Một thiết kế có thể chỉ cần dấu gói tin, và việc thêm đánh dấu qua conntrack vì một cách xử lý tạm dùng cả hai chính là cách một chính sách đơn giản có thêm chế độ hỏng thứ hai.

ct mark set meta mark
meta mark set ct mark

Hãy ghi hướng bên cạnh quy tắc, vì nhìn qua cú pháp thì điều đó không hiển nhiên. Dòng đầu lưu, dòng thứ hai phục hồi, và không dòng nào hàm ý dòng kia.

Phân loại trước lần tra cứu tiêu thụ nó

Lưu lượng sinh ra cục bộ và lưu lượng được chuyển tiếp từ một LAN đi qua các hook khác nhau và đến các quyết định định tuyến ở những thời điểm khác nhau. Một quy tắc đầu ra hoạt động cho các kết nối của chính router không chứng minh rằng gói tin của một máy khách được chuyển tiếp đã được đánh dấu trước lần tra cứu của nó. Đặt phân loại ở nơi lần tra cứu tiêu thụ nó chưa xảy ra, và kiểm tra xem các quy tắc sau trong cùng chuỗi có ghi đè giá trị không. Thứ tự trong một chuỗi là một phần của cấu hình, không phải chi tiết triển khai.

Sự tồn tại của trạng thái kết nối cũng cần một kế hoạch rõ ràng. Nếu chỉ gói đầu tiên của một luồng được phân loại, các gói sau cần được phục hồi dấu đã lưu, nếu không chúng sẽ đi theo đường không có dấu. Đó là khác biệt giữa một dấu mô tả kết nối và một dấu mô tả gói tin.

Hỏi tuyến một câu hỏi có dấu

ip route get 10.77.0.10 mark 0x2

Xem xét các quy tắc và bảng, rồi hỏi tuyến với dấu được đưa vào, cùng với nguồn hoặc giao diện vào khi chúng ảnh hưởng đến chính sách. Một lần tra cứu thông thường không có dấu trả lời một câu hỏi khác và sẽ vui vẻ báo cáo con đường bạn không muốn. Kiểm tra mặt nạ và độ ưu tiên của quy tắc cũng như giá trị của nó, và xác nhận rằng bảng được chọn có một tuyến dùng được.

Một bộ đếm tăng lên là bằng chứng rằng một quy tắc đã khớp với một gói tin. Đó không phải bằng chứng rằng gói cuối cùng mang dấu dự định tại đúng điểm quyết định.

Đọc dấu, hướng, thời điểm và mặt nạ. Bốn kiểm tra, và tuyến không còn là điều bí ẩn.

Bài viết liên quan