Избирате сервер што изгледа поблиску, притискате поврзи, и прелистувачот престанува да вчитува пред новиот тунел да се подигне. Иконата преминува во состојба на поврзување и останува таму додека секој таб не истече. Оваа пауза обично е kill switch што работи како што е предвидено: сообраќајот е блокиран додека клиентот нема тунел низ кој би го испратил. Дали паузата е прифатлива зависи од тоа што прави клиентот во тие секунди и дали блокот се трга кога тој вели дека е тргнат.

Што прави клиентот меѓу два сервера

Промената на крајна точка е неколку чекори, а не еден прекинувач. Клиентот го растура тековниот тунел, ги ажурира своите правила за блокирање, ја решава новата крајна точка и ја достигнува надвор од тунелот, потоа ги поставува новите правци и го крева блокот. Празнината што ја чувствувате е меѓу првиот и последниот чекор.

Редоследот овде е поважен од брзината. Ако правилата за блокирање стапат на сила пред исклучокот за новата крајна точка, клиентот не може да го заврши ракувањето и останува во состојба на поврзување до истекот на времето. Ако исклучокот е копија од адресата на стариот сервер, новото ракување изгледа како секој друг излезен пакет и се отфрла. Двата случаи изгледаат исто од прелистувачот, затоа промена што се опоравува по шест секунди и онаа што никогаш не се опоравува може да имаат иста причина.

На новата крајна точка ѝ треба дупка во блокот

За да го изгради тунелот, клиентот мора да испраќа пакети до адресата и портата на новиот сервер преку физичкиот интерфејс, на пример UDP 51820 за типичен WireGuard профил или 1194 и 443 за OpenVPN, што и да наведе вашиот профил. Тој сообраќај не е во тунелот што штотуку се создава, така што блокот за целиот уред го голта, освен ако не постои соодветно правило за дозвола.

Профилите засновани на име на домаќин додаваат втор услов: самата проверка. Ако клиентот ја реши крајната точка пред блокот да се крене, може да користи кеширана адреса, но кога профилот ќе ги смени адресите или кешираниот запис ќе остари, ракувањето тргнува кон адреса што правилото за дозвола не ја покрива. IPv6 го прави ова видливо, бидејќи крајна точка со двоен стек може да објави и A и AAAA запис, а правило за дозвола што ја покрива само адресата v4 го остава клиентот постојано да се обидува против блокирана адреса v6.

Имињата на опциите и стандардните вредности се разликуваат според клиентот и верзијата, затоа прочитајте го документираниот список за вашиот наместо да погодувате од слики од екранот. Референцата за поставки на OpenVPN Connect на openvpn.net/connect-docs/app-settings-windows е еден пример како клиентот ги опишува своите опции за блокирање и поделен тунел.

Fail-closed е машина на состојби, а не прекинувач

Повеќето клиенти го изразуваат блокот како огнено-ѕидна политика во три состојби: тунел подигнат, со сообраќај низ тунелот и без блок; тунел спуштен, со активен блок; и премин, со активен блок плус привремени исклучоци за крајната точка. Токму во третата состојба живеат грешките, бидејќи таа мора да се смени двапати во неколку секунди, а неисполнувањето да се излезе од неа изгледа точно како постојан блок.

Механизмот се разликува според платформата, а и дефектот. Филтрите на Windows Filtering Platform имаат тежина, така што блокирачки филтер што ја надминува вашата дозвола продолжува да отфрла пакети иако дозволата постои, и филтри што ги остави убиен клиентски процес можат да го држат уредот офлајн откако апликацијата ќе исчезне. Клиентите на macOS обично пишуваат pf правила во сидро, каде редоследот на правилата и брзите одлуки одредуваат кое правило важи. Клиентите на Linux обично управуваат со nftables или iptables синџир со drop политика и експлицитни дозволи за крајната точка, тунелскиот интерфејс и loopback. Always-on VPN на Android со опцијата за блокирање врски без VPN е најстрог во групата, бидејќи оперативниот систем го применува блокот на целиот уред, а не по апликација.

WireGuard заслужува сопствена забелешка, бидејќи AllowedIPs е избирач на правци, а не блокер. Тој одлучува кои одредишта влегуваат во тунелот; не прави ништо за да спречи пакет без тунел да излезе преку Wi-Fi. Во поставка само со WireGuard и без огнено-ѕидно правило, kill switch всушност е отсуство на пат, и по отфрлено ракување може да излезе вистински пакет преку физичкиот интерфејс.

Мерете ја празнината наместо да ја гледате иконата

Следете пакети, а не светлото за состојба. На Linux стартувајте бавен ping кон јавна адреса во еден терминал и фатете го транспортен порт на тунелот на физичкиот интерфејс во друг:

ping -i 0.2 -c 100 1.1.1.1 | tail -5

sudo tcpdump -ni eth0 'udp port 51820'

Сменете го серверот во клиентот додека работат и двете. Три работи се важни: колку долго запираат ping-овите, дали фаќањето покажува дека ракувањето стигнува до новата крајна точка и дали сообраќајот се враќа пред или по промената на состојбата на клиентот во поврзан. Ако празнината во ping-овите заврши прва, или блокот е тргнат прерано или тунелот е подигнат пред индикаторот да го признае. Ако празнината заврши подоцна, индикаторот е премногу оптимистичен.

На Windows netsh wfp show state запишува снимка во која можете да барате блокирачки филтри што уште постојат додека клиентот тврди дека е исклучен. На macOS sudo pfctl -sr ги наведува вчитаните правила и нивниот редослед. Поврзете која било снимка со сопствениот дневник на клиентот; временската линија од вашиот ping ви кажува дали блокот завршил доцна или никогаш.

Нормално затемнување наспроти заглавен блок

Извесно прекинување е смислата на оваа функција, затоа направете тријажа пред да смените која било поставка:

What you seeUsually meansNext check
Two or three seconds of timeouts, then normal browsingExpected fail-closed gapNothing to fix
State says connected, traffic stays deadBlock filter or route left behindFirewall snapshot, client log
One app dead while others workTCP session bound to the old exit addressRestart the app
LAN devices unreachable after the switchLAN exception not reappliedAllow-LAN or split-tunnel setting
New server hangs, the old one reconnectsPermit covers only the old addressResolved address of the new host, including AAAA

Ако завршите во вториот или петтиот ред, не го исклучувајте kill switch за тест, бидејќи тоа претвора грешка во рутирањето во истекување. Рестартирајте ја услугата на клиентот или рестартирајте го уредот таму каде филтрите преживуваат убивање на процес, потоа видете дали блокот се чисти. Ако се исчисти, дефектот е во чистењето при промената, а не во самиот блок.

Пред следната промена потврдете четири работи: дозволата за крајната точка покрива секое семејство адреси што го решава вашиот профил, дневникот на клиентот покажува завршен премин, вашиот ping тест ја мери празнината, а не иконата, и затворањето на клиентот ја враќа нормалната поврзаност. Kill switch што издржува за време на промената и потоа отпушта ја врши својата работа. Тој што отпушта рано или никогаш, вреди да се дебагира.

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