Два здрава 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-у, а симптом је једносмерна веза која изгледа као проблем са заштитним зидом. Прочитајте путању одговора пре него што дотакнете правило заштитног зида, јер се пакет рутира, само не назад ка пошиљаоцу.

Четири фазе исцеђивања

  1. Припремите B без дирања A: рутирање, прослеђивање, ауторизација, NAT и повратна путања. Инсталирајте његову табелу и политику избора кроз постојећег власника конфигурације порте.

  2. Пребаците класификатор тако да нове, некласификоване везе бирају B, чувајући сачуване изборе. Атомска трансакција nftables избегава прозор у ком стара состојба мора бити очишћена.

  3. Оставите A укључен док се његови токови не заврше. Његов интерфејс, табела, далеки излаз и NAT мапирања су још део тих токова, а уређивање NAT правила не преизграђује везе које већ постоје.

  4. Повуците A када је услов исцеђивања испуњен, процењено по стању веза и понашању апликације, а не по једном тихом интервалу.

Шта исцеђивање не може да обећа

Захтев прегледача није нова транспортна веза; груписање наставља да шаље захтеве преко старе. Обрнуто, UDP ток може да остари из conntrack-а и каснији пакет се класификује изнова. Исцеђивање следи праћене токове, не идеју апликације о сесији.

Ако A откаже пре него што се његови токови заврше, сачувана ознака их не спасава. Поново се повезују кроз B, или се уопште не повезују. Планирано исцеђивање купује континуитет док је оригинална путања здрава; то није репликација стања између независних излаза.

Проверите обе половине

Покрените дуготрајну дозвољену везу пре промене и заиста нову после ње. Потврдите који тунел користи свака и коју јавну изворну адресу види далеки крај, затим проверите да се повратни саобраћај враћа.

Не празните conntrack табелу да би се нови избор појавио. То уништава управо оно стање које исцеђивање треба да сачува, и претвара контролисану миграцију у прекид са чисто изгледајућим тестом.

Повезани чланци