„Дали VPN-от е вклучен?“ се всушност три прашања во една реченица. Кое од нив му треба на вашиот код е првата одлука, и токму тоа го прескокнуваат повеќето имплементации. Дали на овој уред постои тунел, дали сообраќајот кон оваа дестинација излегува низ него, или далечниот крај одговара со идентитетот што го очекувате. Изберете го својството, потоа изберете го сигналот што го мери, и на крајот во дневникот напишете кој навистина го измеривте.

Три својства, три сигнали

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

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

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

Постоење: сопствената состојба на платформата

Windows одговара на ова за нативни профили преку Remote Access Service API. RasEnumConnections наведува што е поврзано, RasGetConnectStatus го пријавува статусот на еден запис, а RasGetLinkStatistics додава брзина, бројачи на бајти и возраст на врската. Границите се поентата: OpenVPN, WireGuard и клиентите на производителите никогаш не регистрираат RAS врска, па здрав тунел од тој тип покажува празна листа и наивниот код го пријавува како исклучен.

Linux десктопите го изложуваат истото својство преку NetworkManager на D-Bus, каде PropertiesChanged на објектот за VPN врска ја претвора проверката во настан, а својството State пријавува кога врската достигнува состојба поврзано. Од школка, nmcli connection show --active ги чита истите информации, и токму тоа го сакате при отстранување грешки. macOS ја држи таа листа во рамката System Configuration, со scutil како нејзин преглед од командната линија. Сите три опишуваат врска што платформата ја управува, и сите три замолчуваат за тунел што таа не го управува.

Патека: каде пакетот навистина оди

Совпаѓањето на имиња е кратенката по која сите прво посегнуваат: набројте интерфејси, тестирајте ја низата против tun, tap, ppp или ipsec, и земете го совпаѓањето како доказ. Тоа е хеуристика, и множеството интерфејси може да изгледа исто без разлика дали нешто се движи низ него. Постарите iOS верзии одговараа така, а подоцнежните престанаа, зашто видливите интерфејси повеќе не ги разликуваа двете состојби.

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

Android има своја верзија на стапицата: емитувањето vpn.connectivity стигнува до примачи објавени во манифестот во некои градби и до примачи регистрирани при извршување во други. Третирајте го како најдобар напор и држете директна проверка зад него.

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

Идентитет: проверете го далечниот крај

Јамка што испраќа ICMP ехо до далечниот крај на неколку секунди е најевтината проверка од овој вид, и таа не успева во корисна насока. Насочете ја кон адреса што постои само во приватната мрежа, зашто јавната одговара преку која било работна нагорна врска и не докажува ништо. Каде ICMP е филтриран, кратка TCP врска до портата на услугата ја врши истата работа.

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

Грубата политика може да живее со тоа. Идентитетот не може, затоа автентицирајте го клиентот наместо да верувате од каде навидум доаѓаат неговите пакети.

Запишете ја категоријата, не пресудата

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

Нивното спојување во едно „VPN е паднат“ сѐ уште ја праќа пријавата до тим што не може да го поправи. Категоријата е корисниот излез; пресудата е она што го прави погрешно.

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