De routeregel leest de pakketmarkering, niet conntrack
Beleidsroutering leest de pakketmarkering; conntrack bewaart een andere waarde met een langer leven. Kopiëren tussen beide is een stap die iemand moet schrijven.
Vier controles scheiden een werkende markeringsregel van een werkende route: welke markering de regel leest, of het pakket die bij de lookup nog draagt, of een verbindingsmarkering op latere pakketten is hersteld, en of of masker en prioriteit van de overeenkomende regel het toestaan te vuren. Een teller die oploopt bewijst alleen dat een of andere regel op iets is gematcht. Hij zegt niets over wat het pakket droeg toen de kernel zijn pad koos.
De twee markeringen leven op verschillende plekken en verlopen volgens verschillende schema's.
Twee markeringen, twee levens
Een pakketmarkering hoort bij één skb, reist ermee door de hooks en wordt verbruikt door de fwmark-selector van beleidsroutering. Een verbindingsmarkering hoort bij de conntrack-regel, blijft bestaan over de pakketten van die flow en is onzichtbaar voor de routeregel tot iets hem terugkopieert. Een pakketmarkering in de verbinding opslaan is een opslag; hem herstellen is een aparte handeling. Geen van beide gebeurt impliciet.
Daarom kan een regelset consistent lijken terwijl de routeringsbeslissing nul ziet: de waarde werd opgeslagen en niets herstelde hem.
Kopiëren tussen beide is een stap die u schrijft
De twee belangrijke uitspraken lopen in tegengestelde richtingen: de ene slaat de markering van het pakket op in de verbinding, de andere laadt de markering van de verbinding op het pakket. Welke u nodig hebt, hangt af van wanneer de classificatie ten opzichte van de flow plaatsvindt. Een ontwerp kan alleen de pakketmarkering nodig hebben, en conntrack-markering toevoegen omdat een omweg beide gebruikte is hoe een eenvoudig beleid een tweede faalmodus krijgt.
ct mark set meta mark meta mark set ct mark
Schrijf de richting naast de regel, want die is op het eerste gezicht niet duidelijk uit de syntaxis. De eerste regel slaat op, de tweede herstelt, en geen van beide impliceert de andere.
Classificeer vóór de lookup die het verbruikt
Lokaal gegenereerd verkeer en verkeer dat van een LAN wordt doorgestuurd, passeren verschillende hooks en bereiken routeringsbeslissingen op verschillende momenten. Een uitvoerregel die werkt voor de eigen verbindingen van de router bewijst niet dat het pakket van een doorgestuurde client vóór zijn lookup is gemarkeerd. Plaats de classificatie waar de lookup die haar verbruikt nog niet heeft plaatsgevonden, en controleer of latere regels in dezelfde keten de waarde overschrijven. De volgorde binnen een keten is deel van de configuratie, geen implementatiedetail.
Ook persistentie van verbindingsstatus vraagt een expliciet plan. Als alleen het eerste pakket van een flow wordt geclassificeerd, moeten latere pakketten de opgeslagen markering hersteld krijgen, anders nemen ze het ongemarkeerde pad. Dat is het verschil tussen een markering die een verbinding beschrijft en een die een pakket beschrijft.
Stel de route een gemarkeerde vraag
ip route get 10.77.0.10 mark 0x2
Inspecteer de regels en de tabel en vraag dan de route op met de markering erbij, plus de bron of de inkomende interface wanneer die het beleid beïnvloeden. Een gewone ongemarkeerde lookup beantwoordt een andere vraag en meldt met plezier het pad dat u niet wilde. Controleer het masker en de prioriteit van de regel evenals de waarde, en bevestig dat de gekozen tabel een bruikbare route bevat.
Een oplopende teller is bewijs dat een of andere regel op een of ander pakket is gematcht. Het is geen bewijs dat het uiteindelijke pakket de bedoelde markering op het juiste beslispunt droeg.
Lees de markering, de richting, het tijdstip en het masker. Vier controles, en de route is geen raadsel meer.