Тунелі — рэч часовая; палітыка такой быць не павінна. На шлюзе Linux правіла nftables, якое супастаўляе інтэрфейс тунеля па імені, можна загрузіць адзін раз, і яно будзе прымяняцца кожны раз, калі гэты інтэрфейс з'яўляецца. Інтэрфейс па-ранейшаму мае ўласны жыццёвы цыкл: ён ствараецца, знікае, а маршруты і трансляцыі вакол яго ідуць па сваім раскладзе. Менавіта раздзяленне гэтых уладальнікаў трымае доступ стабільным падчас перападлучэння.

Супадзенне па імені перажывае інтэрфейс

nftables прапануе лікавыя супадзенні індэкса інтэрфейса і дынамічныя супадзенні па імені iifname і oifname. Правілы з такімі імёнамі загружаюцца без памылак, нават калі прылада тунеля яшчэ не створана, што якраз і патрэбна набору правілаў на час загрузкі. Супадзенне спыняецца, калі інтэрфейс пераймяноўваюць, і аднаўляецца, калі новае імя атрымлівае новы інтэрфейс. Лікавы індэкс такой уласцівасці не мае, таму форма з іменем — звычайны выбар для тунеля.

Імя — гэта ключ супадзення, а не доказ таго, хто знаходзіцца на другім канцы. Аўтэнтыфікацыя партнёра застаецца задачай VPN.

Прачытайце ланцужок перад даданнем правілаў

Паглядзіце, што зараз змяшчае набор правілаў і дзе размясцілася б новае правіла, бо парадак вырашае вынік.

nft list ruleset
nft -c -f /etc/nftables.conf

Лістынг паказвае ланцужкі, правілы і дэскрыптары, а рэжым праверкі валідуе файл-кандыдат, не загружаючы яго. Дазвол толькі для тунеля, пастаўлены пасля ранейшага прыняцця для таго ж патоку, нічога не змяняе, бо перамагае першае адпаведнае правіла. Таму позняе правіла можа выглядаць правільным і не мець эфекту. Чытайце ланцужок па парадку і ўпэўніцеся, што забарона для трафіку ад кліента да вышэйшага канала па-ранейшаму ідзе перад любым больш шырокім правілам.

Маршруты, трансляцыя і патокі маюць іншых уладальнікаў

Наяўнасць інтэрфейса не стварае маршрутаў і не аўтэнтыфікуе партнёра. Гэта належыць кіраўніку VPN, а ў трансляцыі трэці жыццёвы цыкл.

conntrack -L -s 10.20.0.0/24 | head
ip route show dev vpn0

Лістынг conntrack паказвае існуючыя патокі з іх першапачатковымі і перакладзенымі значэннямі, а лістынг маршрутаў — што кіраўнік усталяваў для інтэрфейса. Правілы NAT ствараюць стан адсочвання злучэння на першым пакеце, таму ўсталяваны паток захоўвае сваю трансляцыю нават пасля змены правіла. Таму абноўленае правіла і паток, які выкарыстоўвае новы шлях, — розныя сцвярджэнні. Вырашыце, якія сеансы павінны перападключыцца, і не чапайце незвязаныя патокі.

Прымайце халодны старт, страту і аднаўленне

Праверце шлюз з адсутным тунелем пры загрузцы, потым з наяўным, потым пасля абрыву і вяртання. Упэўніцеся, што забароненая перадача застаецца забароненай, пакуль тунель адсутнічае, што новы дазволены паток працуе пасля аўтэнтыфікацыі партнёра, і што аднаўленне не патрабуе ачысткі незвязанага стану. Не ачышчайце ўвесь ланцужок POSTROUTING ці кожны запіс conntrack як дзеянне спынення аднаго профілю, бо іншыя службы дзеляць іх. Запішыце, які кампанент змяніў інтэрфейс, маршрут і палітыку, а не толькі тое, што хук запуску выйшаў з нулём.

Палітыка, якая перажывае перападлучэнне, — гэта тая, чые ўладальнікі названыя і чые правілы правераныя пры тунелі і выключаным, і ўключаным. Хук, які паведамляе пра поспех, даказвае толькі тое, што хук запусціўся.

Падобныя артыкулы