La regla d'encaminament llegeix la marca del paquet, no el conntrack
L'encaminament per política llegeix la marca del paquet; el conntrack desa un valor diferent amb una vida més llarga. Copiar entre tots dos és un pas que algú ha d'escriure.
Quatre comprovacions separen una regla de marca que funciona d'una ruta que funciona: quina marca llegeix la regla, si el paquet encara la porta en el moment de la consulta, si s'ha restaurat una marca de connexió als paquets posteriors i si la màscara i la prioritat de la regla corresponent la deixen actuar. Un comptador que s'incrementa només demostra que alguna regla ha coincidit amb alguna cosa. No diu res sobre què portava el paquet quan el nucli va triar el seu camí.
Les dues marques viuen en llocs diferents i caduquen segons calendaris diferents.
Dues marques, dues vides
Una marca de paquet pertany a un sol skb, viatja amb ell pels ganxos i la consumeix el selector fwmark de l'encaminament per política. Una marca de connexió pertany a l'entrada de conntrack, persisteix durant els paquets d'aquest flux i és invisible per a la regla d'encaminament fins que alguna cosa la torna a copiar. Desar una marca de paquet a la connexió és un emmagatzematge; restaurar-la és una acció separada. Cap de les dues no passa implícitament.
Per això un conjunt de regles pot semblar coherent mentre la decisió d'encaminament veu zero: el valor es va desar i res no el va restaurar.
Copiar entre elles és un pas que escriviu vosaltres
Les dues ordres que importen van en direccions oposades: una desa la marca del paquet a la connexió, l'altra carrega la marca de la connexió al paquet. Quina necessiteu depèn de quan passa la classificació respecte del flux. Un disseny pot necessitar només la marca del paquet, i afegir el marcatge per conntrack perquè una solució alternativa feia servir totes dues és com una política simple adquireix un segon mode de fallada.
ct mark set meta mark meta mark set ct mark
Escriviu la direcció al costat de la regla, perquè no és òbvia a primera vista a partir de la sintaxi. La primera línia desa, la segona restaura, i cap de les dues no implica l'altra.
Classifiqueu abans de la consulta que ho consumeix
El trànsit generat localment i el trànsit reenviat des d'una LAN travessen ganxos diferents i arriben a decisions d'encaminament en moments diferents. Una regla de sortida que funciona per a les connexions del propi encaminador no demostra que el paquet d'un client reenviat s'hagi marcat abans de la seva consulta. Poseu la classificació on la consulta que la consumeix encara no ha passat, i comproveu si les regles posteriors de la mateixa cadena sobreescriuen el valor. L'ordre dins d'una cadena forma part de la configuració, no és un detall d'implementació.
La persistència de l'estat de connexió també necessita un pla explícit. Si només es classifica el primer paquet d'un flux, els paquets posteriors necessiten que es restauri la marca desada, o bé prendran el camí sense marca. Aquesta és la diferència entre una marca que descriu una connexió i una que descriu un paquet.
Pregunteu a la ruta una pregunta amb marca
ip route get 10.77.0.10 mark 0x2
Inspeccioneu les regles i la taula, i després consulteu la ruta amb la marca inclosa, més l'origen o la interfície d'entrada quan afectin la política. Una consulta normal sense marca respon una altra pregunta i us informarà encantada del camí que no volíeu. Comproveu la màscara i la prioritat de la regla, així com el seu valor, i confirmeu que la taula seleccionada conté una ruta utilitzable.
Un comptador que s'incrementa és una prova que alguna regla ha coincidit amb algun paquet. No és una prova que el paquet final portés la marca prevista en el punt de decisió correcte.
Llegiu la marca, la direcció, el moment i la màscara. Quatre comprovacions, i la ruta deixa de ser un misteri.