Pravidlo směrování čte značku paketu, ne conntrack
Směrování podle zásad čte značku paketu; conntrack ukládá jinou hodnotu s delší životností. Kopírování mezi nimi je krok, který musí někdo napsat.
Čtyři kontroly oddělují funkční pravidlo značky od funkční trasy: kterou značku pravidlo čte, zda ji paket při vyhledání ještě nese, zda byla značka spojení obnovena na pozdější pakety a zda maska a priorita odpovídajícího pravidla mu umožňují se uplatnit. Počítadlo, které roste, dokazuje jen to, že nějaké pravidlo odpovídalo něčemu. Nic neříká o tom, co paket nesl, když jádro volilo jeho cestu.
Dvě značky žijí na různých místech a vyprší podle různých plánů.
Dvě značky, dva životy
Značka paketu patří jednomu skb, cestuje s ním skrz háčky a spotřebovává ji selektor fwmark směrování podle zásad. Značka spojení patří záznamu conntrack, přetrvává přes pakety tohoto toku a je pro pravidlo směrování neviditelná, dokud ji něco nezkopíruje zpět. Uložení značky paketu do spojení je zápis; obnovení je samostatná akce. Ani jedno se neděje implicitně.
Proto může sada pravidel vypadat konzistentně, zatímco rozhodnutí o trase vidí nulu: hodnota byla uložena a nic ji neobnovilo.
Kopírování mezi nimi je krok, který píšete vy
Dvě podstatné konstrukce jdou opačným směrem: jedna ukládá značku paketu do spojení, druhá nahrává značku spojení na paket. Kterou potřebujete, závisí na tom, kdy klasifikace probíhá vůči toku. Návrh může potřebovat jen značku paketu, a přidání značení přes conntrack proto, že nějaká náhradní cesta používala obojí, je způsob, jak jednoduchá zásada získá druhý režim selhání.
ct mark set meta mark meta mark set ct mark
Zapište směr vedle pravidla, protože ze syntaxe na první pohled není zřejmý. První řádek ukládá, druhý obnovuje a ani jeden neimplikuje ten druhý.
Klasifikujte dřív než vyhledání, které to spotřebuje
Lokálně generovaný provoz a provoz předávaný z LAN procházejí různými háčky a k rozhodnutím o trase dospívají v různých okamžicích. Výstupní pravidlo, které funguje pro vlastní spojení routeru, nedokazuje, že paket předávaného klienta byl označen před svým vyhledáním. Umístěte klasifikaci tam, kde vyhledání, které ji spotřebuje, ještě neproběhlo, a zkontrolujte, zda pozdější pravidla ve stejném řetězci hodnotu nepřepisují. Pořadí v řetězci je součástí konfigurace, ne implementační detail.
Trvalost stavu spojení také potřebuje výslovný plán. Pokud se klasifikuje jen první paket toku, pozdější pakety potřebují obnovit uloženou značku, jinak vezmou cestu bez značky. To je rozdíl mezi značkou, která popisuje spojení, a značkou, která popisuje paket.
Ptejte se trasy označeným dotazem
ip route get 10.77.0.10 mark 0x2
Prohlédněte pravidla a tabulku, pak se zeptejte na trasu s uvedenou značkou, navíc se zdrojem nebo vstupním rozhraním, pokud ovlivňují zásadu. Obyčejné vyhledání bez značky odpovídá na jinou otázku a s chutí nahlásí cestu, kterou jste nechtěli. Zkontrolujte masku a prioritu pravidla i jeho hodnotu a potvrďte, že zvolená tabulka obsahuje použitelnou trasu.
Rostoucí počítadlo je důkaz, že nějaké pravidlo odpovídalo nějakému paketu. Není to důkaz, že konečný paket nesl zamýšlenou značku ve správném místě rozhodnutí.
Čtěte značku, směr, časování a masku. Čtyři kontroly a trasa přestává být záhadou.