Većina postavki punog tunela šalje svaki paket kroz VPN, a redirect-gateway je direktiva koja to omogućuje. Jedno odredište ipak se može izuzeti. Dodavanje rute do hosta za tu adresu s rezerviranim mjestom net_gateway govori klijentu da joj pristupi kroz izvorni pristupnik stroja, dok sve ostalo i dalje koristi tunel.

Redak izgleda bezopasno i često to i jest, ali rješava samo jedno pitanje: kamo idu paketi za točno tu adresu IPv4. Ne mijenja DNS, IPv6, politiku vatrozida ni to koji je proces otvorio vezu, a svaka od tih stvari može tiho poništiti iznimku.

Što net_gateway zapravo imenuje

Unos u profilu za tu iznimku jedan je redak: route 198.51.100.77 255.255.255.255 net_gateway. Prva adresa dokumentacijsko je rezervirano mjesto za odredište, maska je pretvara u rutu do jednog hosta, a zadnji token imenuje rezervirano mjesto pristupnika. OpenVPN razrješava rezervirana mjesta pristupnika kada instalira rute. vpn_gateway znači vlastiti pristupnik tunela, dalju stranu VPN veze. net_gateway znači zadani pristupnik koji je host imao prije nego što je VPN išta promijenio, a to je obično lokalni usmjerivač na fizičkoj mreži.

Treće rezervirano mjesto, remote_host, odnosi se na adresu VPN poslužitelja i postoji kako bi tunel mogao doći do poslužitelja fizičkim putem. Zamjena tih triju najčešći je razlog zašto iznimka ode na pogrešno mjesto ili se uopće ne instalira.

Vrijednost se čita u trenutku spajanja, ne upisuje se u datoteku. Ako se stroj premjesti na drugu mrežu, pristupnik prije VPN-a se promijeni i ruta slijedi novi. To je obično ono što želite, ali znači i da ponašanje iznimke ovisi o mreži s koje je klijent krenuo.

Zašto ruta do hosta pobjeđuje zadanu rutu tunela

Usmjeravanje se odlučuje prema najspecifičnijem odgovarajućem prefiksu. redirect-gateway def1 obično ne zamjenjuje zadanu rutu; dodaje dvije polovice, rutu za donju polovicu adresnog prostora i jednu za gornju, pa izvorna zadana ruta ostaje sačuvana za druge namjene. Te su polovice šire od jedne adrese.

Ruta za jednu adresu s maskom 255.255.255.255 je /32, što je najveća specifičnost koju IPv4 može dati. Kada se procjenjuje paket za tu adresu, /32 se podudara i pobjeđuje neovisno o tome koja je ruta prva instalirana. To je mehanizam iza iznimke i djeluje jednako na Linuxu, macOS-u i Windowsima dokle god ruta doista postoji.

Windows dodaje drugu dimenziju. Kada su dvije rute jednako specifične, pobjeđuje ona s nižom metrikom, a VPN adapter može nositi metriku sučelja koja mijenja ishod. /32 je i dalje specifičnija od polovica, pa iznimka obično vrijedi, ali zastarjela ruta iz ranije sesije može dati zbunjujući rezultat ako je jednako specifična.

Što iznimka ne pokriva

DNS je prva praznina. Klijent može progurati interne postavke razrješivača, a operacijski sustav će ih i dalje koristiti za upite. Aplikacija koja razriješi ime prije spajanja može dobiti internu adresu za uslugu koja bi trebala ići izravno, ili vanjsku adresu koja se ispravno razriješi, ali zatim se spotakne o sljedeću prazninu.

IPv6 je druga. Direktiva rute obrađuje samo IPv4. Odredište s dvostrukim stogom može preferirati IPv6, koji prema politici slijedi tunel ili zadanu rutu IPv6 hosta, pa iznimka za IPv4 nikada ne stupa na snagu. Potrebna vam je odgovarajuća ruta IPv6 ili svjesna odluka da za tog klijenta onemogućite IPv6.

Opseg aplikacija treći je. Pravilo se temelji na odredištu, pa svaki proces koji se spaja na tu adresu koristi izravni put, bio to onaj koji ste imali na umu ili ne. Obrnuto, web-mjesto može odgovarati s više adresa, pa izuzimanje jedne /32 ne izuzima mjesto. Ako je stvarni zahtjev usmjeravanje po aplikaciji, tablica ruta klijenta Community pogrešan je alat.

Provjerite iznimku bez zavaravanja sebe

Krenite od instalirane rute, ne od preglednika. Na Linuxu pitajte jezgru koju će rutu i sljedeći skok koristiti za konkretnu adresu; na Windowsima pročitajte tablicu ruta za tu /32. Potvrdite da je pristupnik fizički, a ne tunel. Ako unos nedostaje, profil nije primijenjen ili klijent nije imao ovlasti mijenjati rute.

Zatim testirajte dva odredišta. Zahtjev prema izuzetoj adresi trebao bi izaći kroz fizičko sučelje, a zahtjev prema kontrolnoj internoj adresi trebao bi i dalje koristiti tunel. Testiranje samo izuzete adrese ne dokazuje ništa o ostatku tunela, a testiranje javnog web-mjesta testira adresu na koju se to mjesto razriješilo, koja možda nije ona iz pravila.

Na kraju provjerite kontrole koje mogu nadjačati rutu. Kill switch na strani klijenta ili Windows postavka block-outside-dns može zabraniti izravni promet, što se očituje kao veza koja ne uspijeva iako je ruta ispravna. Ne isključujte te kontrole da bi iznimka izgledala ispravno; ako politika zabranjuje izravni put, iznimka je problem dizajna za vlasnika VPN usluge.

Provjerite ponovno nakon ponovnog spajanja ili promjene mreže, jer su pristupnik prije VPN-a i dostupni put svojstva trenutka, ne profila.

Povezani članci