Cztery kontrole oddzielają działającą regułę znacznika od działającej trasy: który znacznik czyta reguła, czy pakiet nadal go nosi w chwili wyszukiwania, czy znacznik połączenia został przywrócony na późniejszych pakietach i czy czy maska i priorytet pasującej reguły pozwalają jej zadziałać. Rosnący licznik dowodzi jedynie, że jakaś reguła na coś pasowała. Nie mówi nic o tym, co niósł pakiet, gdy jądro wybierało jego ścieżkę.

Oba znaczniki żyją w różnych miejscach i wygasają według różnych harmonogramów.

Dwa znaczniki, dwa życia

Znacznik pakietu należy do jednego skb, podróżuje z nim przez haki i jest zużywany przez selektor fwmark routingu politycznego. Znacznik połączenia należy do wpisu conntrack, utrzymuje się przez pakiety tego przepływu i jest niewidoczny dla reguły routingu, dopóki coś go nie skopiuje z powrotem. Zapisanie znacznika pakietu w połączeniu jest zapisem; przywrócenie go to osobna czynność. Żadne z nich nie dzieje się domyślnie.

Dlatego zestaw reguł może wyglądać spójnie, podczas gdy decyzja o trasie widzi zero: wartość została zapisana i nic jej nie przywróciło.

Kopiowanie między nimi to krok, który piszesz sam

Dwa istotne polecenia działają w przeciwnych kierunkach: jedno zapisuje znacznik pakietu w połączeniu, drugie wczytuje znacznik połączenia na pakiet. Którego potrzebujesz, zależy od tego, kiedy odbywa się klasyfikacja względem przepływu. Projekt może wymagać tylko znacznika pakietu, a dodanie oznaczania przez conntrack dlatego, że jakieś obejście używało obu, jest sposobem, w jaki prosta polityka zyskuje drugi tryb awarii.

ct mark set meta mark
meta mark set ct mark

Zapisz kierunek obok reguły, bo na pierwszy rzut oka nie jest on oczywisty ze składni. Pierwszy wiersz zapisuje, drugi przywraca, i żaden nie implikuje drugiego.

Klasyfikuj przed wyszukiwaniem, które to zużywa

Ruch generowany lokalnie i ruch przekazywany z sieci LAN przechodzą przez różne haki i docierają do decyzji o trasie w różnych momentach. Reguła wyjściowa działająca dla połączeń samego routera nie dowodzi, że pakiet przekazywanego klienta został oznaczony przed swoim wyszukiwaniem. Umieść klasyfikację tam, gdzie wyszukiwanie, które ją zużywa, jeszcze nie nastąpiło, i sprawdź, czy późniejsze reguły w tym samym łańcuchu nie nadpisują wartości. Kolejność w łańcuchu jest częścią konfiguracji, a nie szczegółem implementacji.

Trwałość stanu połączenia również wymaga wyraźnego planu. Jeśli klasyfikowany jest tylko pierwszy pakiet przepływu, późniejsze pakiety potrzebują przywrócenia zapisanego znacznika, inaczej pójdą ścieżką bez znacznika. To jest różnica między znacznikiem opisującym połączenie a znacznikiem opisującym pakiet.

Zadaj trasie oznaczone pytanie

ip route get 10.77.0.10 mark 0x2

Przejrzyj reguły i tabelę, a następnie zapytaj trasę z uwzględnieniem znacznika, plus źródło lub interfejs wejściowy, gdy wpływają na politykę. Zwykłe wyszukiwanie bez znacznika odpowiada na inne pytanie i chętnie zgłosi ścieżkę, której nie chciałeś. Sprawdź maskę i priorytet reguły oraz jej wartość, i potwierdź, że wybrana tabela zawiera użyteczną trasę.

Rosnący licznik jest dowodem, że jakaś reguła pasowała do jakiegoś pakietu. Nie jest dowodem, że końcowy pakiet niósł zamierzony znacznik w prawidłowym punkcie decyzji.

Czytaj znacznik, kierunek, moment i maskę. Cztery kontrole, a trasa przestaje być zagadką.

Powiązane artykuły