Маркер, зададен в nftables, би трябвало да насочи един клас трафик през тунела, а трафикът продължава да излиза през физическия интерфейс. Наборът от правила изглежда правилен сам по себе си. Обикновено се е случило това, че нещо друго е записало същия маркер, или правилото за маршрутизация съвпада с маска, която новата стойност вече не удовлетворява.

Проверка 1: прочетете правилото, което ядрото съпоставя

Започнете с правилото на политиката, а не с файъруола. Ядрото преглежда правилата по ред на приоритет и първото съвпадение определя таблицата. Прочетете стойността на fwmark и маската от самото правило, после потвърдете, че пакет с маркера, който сте задали, наистина му съвпада. Правило, което очаква пълна 32-битова стойност, няма да съвпадне с пакет, носещ само един бит.

След това потвърдете коя таблица избира това правило и какво съдържа таблицата. Правило, сочещо към празна таблица, предизвиква неуспешно търсене, което в много системи означава, че пакетът пропада към следващото правило и излиза през физическия интерфейс.

Две команди решават въпроса: списъкът с правила и търсенето на маршрут до дестинацията в тази таблица.

Проверка 2: маркер на пакета или маркер на връзката

nftables може да зададе маркер на пакета и маркер на записа за проследяване на връзки, и това са различни обекти. Маркерът на пакета живее за прохода на обработка на пакета, докато маркерът на връзката се запазва за потока и трябва да бъде копиран умишлено. Задаването на единия и очакването на другия е често срещано половинчато решение.

Ако правилото за маршрутизация разчита на маркера на пакета, възстановяването на маркера на връзката по-късно в пътя не прави нищо за това решение, защото решението вече е взето.

Решете кой обект притежава сигнала за маршрутизация, после го задайте в точката, където се взема решението за маршрутизация.

Проверка 3: кой друг записва този маркер

Собствените инструменти на WireGuard маркират своите UDP пакети, за да не бъде криптираният транспорт маршрутизиран обратно в тунела, към който принадлежи. Ако вашият набор от правила задава несвързана стойност на същото поле, това изключване изчезва и външният трафик на тунела се опитва да влезе в себе си. Симптомът е тунел, който се установява и след това спира да пропуска трафик.

Маркерите се използват и от други файъруол инструменти, от контейнерни мрежи и от маршрутизация по политика за други цели, така че два подсистеми, записващи цялото поле, са конфликт, дори когато всяка поотделно е правилна.

Изброете записващите, преди да добавите още един.

Проверка 4: маската решава какво запазвате

Маркерът е 32-битово поле и маските са начинът, по който няколко собственика го споделят. Задаването на стойност с маска запазва битовете, които не притежавате; задаването на цялото поле унищожава битовете на всички останали. Прочетете маската във всяко правило, което докосва полето, включително тези, които не сте написали.

Документирайте разпределението на битовете до набора от правила.

Иначе следващият човек ще използва повторно стойност, която вече има собственик, а конфликт тук изглежда като грешка в маршрутизацията, докато всъщност е грешка в адресирането. Документацията на nftables за метаданните на пакета описва самите операции с маркери.

Проверка 5: проверявайте с реален поток, не с търсене

Обикновеното търсене на маршрут не носи маркер, така че може да покаже различен път от реалния пакет. Генерирайте трафика, който ви интересува, и наблюдавайте броячите, записа за проследяване на връзки и интерфейса, през който той действително излиза. Тествайте както включения клас, така и изключения клас, защото твърде широк маркер разваля изключването, докато изглежда успешен. Ако включеният клас работи, а изключеният клас също влиза в тунела, маркерът е твърде широк, а не твърде тесен.

Избягвайте изчистване на състоянието на връзките, за да принудите обновяване по време на жива сесия, тъй като новите и съществуващите потоци могат законно да поемат по различни пътища.

Запишете маркера, маската и таблицата на едно място и следващата редакция става прегледима.

Подобни статии