A regra de encamiñamento le a marca do paquete, non conntrack
O encamiñamento por políticas le a marca do paquete; conntrack garda un valor distinto cunha vida máis longa. Copiar entre ambos é un paso que alguén ten que escribir.
Catro comprobacións separan unha regra de marca que funciona dunha ruta que funciona: que marca le a regra, se o paquete aínda a leva no momento da consulta, se se restaurou unha marca de conexión nos paquetes posteriores e se a máscara e a prioridade da regra correspondente lle permiten activarse. Un contador que se incrementa só demostra que algunha regra coincidiu con algo. Non di nada sobre o que levaba o paquete cando o núcleo escolleu o seu camiño.
As dúas marcas viven en lugares distintos e caducan segundo calendarios distintos.
Dúas marcas, dúas vidas
Unha marca de paquete pertence a un só skb, viaxa con el polos ganchos e cómsuma o selector fwmark do encamiñamento por políticas. Unha marca de conexión pertence á entrada de conntrack, persiste a través dos paquetes dese fluxo e é invisible para a regra de encamiñamento ata que algo a volve copiar. Gardar unha marca de paquete na conexión é un almacenamento; restaurala é unha acción aparte. Ningunha das dúas ocorre de forma implícita.
Por iso un conxunto de regras pode parecer coherente mentres a decisión de encamiñamento ve cero: o valor gardouse e nada o restaurou.
Copiar entre elas é un paso que escribes ti
As dúas sentenzas que importan van en direccións opostas: unha garda a marca do paquete na conexión, a outra carga a marca da conexión no paquete. Cal necesitas depende de cando ocorre a clasificación respecto do fluxo. Un deseño pode necesitar só a marca do paquete, e engadir marcado por conntrack porque algún apaño usaba as dúas é a forma en que unha política sinxela adquire un segundo modo de fallo.
ct mark set meta mark meta mark set ct mark
Escribe a dirección xunto á regra, porque non é obvia a primeira vista a partir da sintaxe. A primeira liña garda, a segunda restaura, e ningunha implica a outra.
Clasifica antes da consulta que o consume
O tráfico xerado localmente e o tráfico reenviado desde unha LAN atravesan ganchos distintos e chegan a decisións de encamiñamento en momentos distintos. Unha regra de saída que funciona para as conexións do propio router non demostra que o paquete dun cliente reenviado se marcara antes da súa consulta. Coloca a clasificación onde a consulta que a consume aínda non ocorreu, e comproba se as regras posteriores da mesma cadea sobrescriben o valor. A orde dentro dunha cadea é parte da configuración, non un detalle de implementación.
A persistencia do estado de conexión tamén necesita un plan explícito. Se só se clasifica o primeiro paquete dun fluxo, os paquetes posteriores necesitan que se restaure a marca gardada, ou tomarán o camiño sen marca. Esa é a diferenza entre unha marca que describe unha conexión e unha que describe un paquete.
Faille á ruta unha pregunta con marca
ip route get 10.77.0.10 mark 0x2
Inspecciona as regras e a táboa, logo consulta a ruta coa marca incluída, ademais da orixe ou a interface de entrada cando afecten a política. Unha consulta normal sen marca responde outra pregunta e informarache encantada do camiño que non querías. Comproba a máscara e a prioridade da regra ademais do seu valor, e confirma que a táboa seleccionada contén unha ruta utilizable.
Un contador que se incrementa é proba de que algunha regra coincidiu con algún paquete. Non é proba de que o paquete final levase a marca prevista no punto de decisión correcto.
Le a marca, a dirección, o momento e a máscara. Catro comprobacións, e a ruta deixa de ser un misterio.