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.

Artigos relacionados