Новыя злучэнні праз новы выхад VPN, старыя патокі застаюцца як ёсць
Планавае зліванне перамяшчае толькі некласіфікаваныя патокі. Параўнайце гэта з заменай маршруту і паглядзіце на пазнакі, табліцы і стан conntrack, якія гэта ўтрымліваюць.
Два здаровыя выхады VPN, адно доўгае запампоўванне ўжо ідзе, і патрабаванне, каб наступнае злучэнне выкарыстоўвала іншы тунель. Ёсць два спосабы задаволіць гэта, і толькі адзін з іх бяспечны на працуючым шлюзе. Замена маршруту па змаўчанні перамяшчае кожны пакет, уключаючы тыя, што належаць запампоўванню. Планавае зліванне змяняе выбар для новых злучэнняў, пакідаючы адсочваемыя патокі на шляху, з якога яны пачаліся.
Два спосабы пераключыць выхад
Замена маршруту — гэта адна каманда, і яе можна адкаціць за секунды, таму яе выкарыстоўваюць падчас інцыдэнтаў. Яна таксама неразборлівая: пакеты існуючага запампоўвання раптам выходзяць праз іншы тунель, з іншым публічным адрасам крыніцы і асобным станам трансляцыі.
Калі далёкі бок адсочвае патокі па адрасе крыніцы, запампоўванне можа проста перастаць пазнавацца. Зліванне пазбягае гэтага, прымаючы рашэнне аднойчы на злучэнне і захоўваючы яго, таму старое запампоўванне захоўвае свой выхад, пакуль не скончыцца. У гэтым уся каштоўнасць практыкавання: далёкі бок не бачыць ніякіх змен, якія трэба інтэрпрэтаваць. Ён працягвае атрымліваць пакеты, што адпавядаюць злучэнню, якое ён ужо ведае.
Кошт — складанасць: дзве табліцы маршрутызацыі, класіфікатар, які працуе на патрэбным перахопе, і пазнакі, якія трэба ўзгадняць з усім астатнім на машыне.
Дайце кожнаму выхаду ўласную табліцу
Зарэзервуйце табліцу маршрутызацыі для кожнага выхаду і асобныя значэнні пазнак або біты для двух варыянтаў. Кожнай табліцы патрэбныя маршруты, адпаведныя яе ролі, а не проста назва, і ёй патрэбны наўмысны вынік збою для выпадку адсутнасці. Пустая табліца, якая моўчкі правальваецца ў асноўную табліцу — гэта так, як трафік выходзіць праз выхад, якога ніхто не выбраў.
ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102Дадайце маршрут blackhole у канец кожнай табліцы, каб пошук, які не знайшоў супадзення, гучна правальваўся, а не ўцякаў у маршрут па змаўчанні, які вы не выбіралі.
Выбірайце аднойчы, на першым пакеце
Класіфікуйце пасля ўзнікнення адсочвання злучэнняў і перад важным пошукам маршруту. Для новага, некласіфікаванага злучэння LAN выберыце выхад і захавайце яго ў стане злучэння. На наступных пакетах аднавіце захаванае значэнне ў пазнаку пакета, якую чытае палітычная маршрутызацыя.
Дробязь — у тым, што значыць новае. Conntrack можа па-ранейшаму паведамляць NEW для ранніх пакетаў і паўторных перадач, пакуль не ўбачаны адказ, таму класіфікатар, які абапіраецца толькі на гэты стан, можа перазапісаць ужо зроблены выбар. Праверце, што для злучэння не захаваны ніякі выхад, перш чым прызначыць адзін.
nftables трымае пазнакі пакетаў і злучэнняў асобна, і даведнік па метаінфармацыі дакументуе яўное капіраванне паміж імі. Пазнака злучэння не становіцца сама па сабе пазнакай пакета, з якой супадае ваша правіла, і гэта найчасцейшая прычына таго, што старанна напісаны класіфікатар не дзейнічае.
Абмяжуйце аднаўленне напрамкам і трафікам, якія вы маеце на ўвазе. Прымяненне пазнакі інтэрнэт-выхаду да пакетаў, што вяртаюцца, можа накіраваць адказы да выхаду замест LAN, і сімптом — аднабаковае злучэнне, якое выглядае як праблема пажарнай сцяны. Прачытайце шлях адказу, перш чым чапаць правіла пажарнай сцяны, бо пакет маршрутызуецца, проста не назад да адпраўніка.
Чатыры фазы злівання
Падрыхтуйце B, не чапаючы A: маршрутызацыя, перасылка, аўтарызацыя, NAT і зваротны шлях. Усталюйце яго табліцу і палітыку выбару праз існуючага ўладальніка канфігурацыі шлюза.
Пераключыце класіфікатар, каб новыя, некласіфікаваныя злучэнні выбіралі B, захоўваючы захаваныя выбары. Атамная транзакцыя nftables пазбягае акна, у якім трэба ачысціць стары стан.
Пакіньце A ўключаным, пакуль яго патокі не скончацца. Яго інтэрфейс, табліца, далёкі выхад і адлюстраванні NAT па-ранейшаму частка гэтых патокаў, а рэдагаванне правіла NAT не перабудоўвае прывязкі, якія ўжо існуюць.
Зніміце A, калі ўмова злівання выканана, ацэньваючы па стане злучэнняў і паводзінах праграмы, а не па адным ціхім інтэрвале.
Чаго зліванне не можа абяцаць
Запыт браўзера — гэта не новае транспартнае злучэнне; пул працягвае адпраўляць запыты праз старое. Наадварот, паток UDP можа састарэць у conntrack, і наступны пакет класіфікуецца нанова. Зліванне ідзе за адсочваемымі патокамі, а не за ўяўленнем праграмы пра сесію.
Калі A адмовіць раней, чым скончацца яго патокі, захаваная пазнака іх не выратуе. Яны перападключаюцца праз B або не перападключаюцца зусім. Планавае зліванне купляе бесперапыннасць, пакуль зыходны шлях здаровы; гэта не рэплікацыя стану паміж незалежнымі выхадамі.
Праверце абедзве паловы
Пачніце доўгае дазволенае злучэнне перад змяненнем і сапраўды новае пасля. Пацвердзіце, які тунель выкарыстоўвае кожнае і які публічны адрас крыніцы бачыць далёкі бок, затым праверце, што зваротны трафік вяртаецца.
Не ачышчайце табліцу conntrack, каб новы выбар з’явіўся. Гэта знішчае менавіта той стан, які зліванне павінна захаваць, і ператварае кантраляваную міграцыю ў перапынак з чыстым на выгляд тэстам.