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

Поврзани статии