Uobičajena zaštita od petlje je ruta domaćina: pošaljite saobraćaj na javnu adresu VPN servera kroz uplink, tako da šifrovana sesija nikada ne uđe u vlastiti tunel. To funkcioniše tačno do trenutka kada želite kroz tunel dosegnuti i web uslugu na istom serveru, jer je izuzetak vezan za odredište, a odredište je identično. Izlaz je prestati klasificirati po odredištu i početi klasificirati po tome koji je socket poslao paket.

Počnite s dva toka koja želite razdvojiti

Jedan tok je sam šifrovani OpenVPN transport, koji mora izaći kroz uplink, inače bi tunel nosio vlastitu vanjsku vezu. Drugi je običan HTTPS zahtjev na istu javnu adresu, koji želite unutar tunela da bi do usluge stigao iz izvora tunela. Isto odredište, u mnogim slučajevima isti broj porta, drugačiji potrebni put.

Za ovaj pregled pretpostavite klijenta na 10.90.0.10 preko tun1, javnu adresu servera 198.51.100.25 i netaknutu glavnu tabelu čija zadana ruta pokazuje na uobičajeni uplink. Strana servera također mora prihvatiti web uslugu na unutrašnjem putu i vraćati saobraćaj izvoru tunela; slanje paketa na javnu adresu ne zaobilazi listener ni firewall politiku servera.

Prije nego što bilo šta promijenite, zabilježite trenutna pravila domaćina i odaberite vrijednosti koje niko drugi ne koristi: oznaku, broj tabele i tri prioriteta pravila. Održite put nazad u mašinu koji ne ide kroz ovu vezu, jer greška ovdje uklanja vaš vlastiti udaljeni pristup, a ne samo kvari karticu preglednika.

Označite socket koji nosi kovertu

Konfiguracija klijenta dobija oznaku za svoje šifrovane odlazne pakete i prestaje sama instalirati rute, tako da je zamjenska politika jedina koja odlučuje o putevima:

mark 42
route-noexec
disable-dco

Decimalno 42 je heksadecimalno 0x2a, i heksadecimalni oblik je ono na što će se rute pravila podudarati. Referenca za link-options opisuje mark kao nešto što se primjenjuje na šifrovane odlazne pakete na Linuxu, što je upravo socket čijim putem morate upravljati. Isključivanje offloada data kanala zadržava ovaj primjer na putu korisničkog prostora, gdje je ponašanje oznake ono opisano.

route-noexec potiskuje automatsko dodavanje i uklanjanje ruta od strane OpenVPN-a. Ne instalira ništa na njihovo mjesto, pa od ovog trenutka vlasnik ruta mora održavati svaku rutu koju tunel treba. Ako privatno odredište nestane nakon promjene, to je nedostajuća zamjenska politika, a ne greška u oznaci.

Ne držite rutu domaćina u glavnoj tabeli za 198.51.100.25 dok ovo radite. Takva ruta ponovo uvodi upravo izuzetak koji dizajn pokušava suziti, i pobijedit će za HTTPS tok prije nego što se konsultuje bilo koja od politika ispod.

Pošaljite sve ostalo u tabelu tunela

Kada interfejs tunela postoji i ima svoju adresu, politika izgleda ovako:

ip -4 route add default dev tun1 src 10.90.0.10 table 47100
ip -4 rule add priority 20000 lookup main suppress_prefixlength 0
ip -4 rule add priority 20001 not fwmark 0x2a lookup 47100
ip -4 rule add priority 20002 not fwmark 0x2a unreachable

Prvo pravilo drži specifične rute domaćina vidljivim, uključujući svaku odobrenu lokalnu mrežu, dok zadanu rutu glavne tabele čini nevidljivom za ovu pretragu. Ta razlika je važna: potiskivanje zadane rute nije isto što i ignorisanje tabele, a lokalni izuzeci koji su vam još potrebni preživljavaju upravo zbog toga. Čitajte te izuzetke jedan po jedan umjesto da pretpostavite da je rezultat univerzalni prekidač za nuždu.

Neoznačeni saobraćaj tada pada u tabelu tunela, preuzima izvor tunela i izlazi kroz VPN. Označeni saobraćaj pada na fwmark testu na sljedeća dva pravila i nastavlja do obične glavne pretrage niže na listi, gdje još stoji zadana ruta uplinka. Završno unreachable pravilo je ono koje sprječava neoznačeni tok da tiho padne natrag na uplink kada nedostaje ruta tunela. Selektor je oznaka od početka do kraja, a adresa odredišta nikada ne ulazi u odluku.

Držite tu zaštitu na mjestu kroz prekide veze i instalirajte je zajedno s ostatkom politike, a ne ručno. Pravilo koje nestane s interfejsom nije politika, to je slučajnost. Brisanje politike kada tunel padne mijenja način kvara s „blokirano” na „procurilo”, a zastarjela ruta tunela koja kasnije istekne je mnogo lakši problem za objasniti od saobraćaja koji je izašao kroz pogrešan interfejs.

Neka povratni put vidi istu oznaku

Odlazne oznake su samo polovina mehanizma, i ovo je dio koji većina reprodukcija izostavlja. Odgovori na šifrovanu sesiju dolaze kroz uplink i podliježu validaciji povratnog puta, koja pita bi li izvor bio rutiran natrag istim putem. Bez pomoći, ta pretraga primjenjuje vašu neoznačenu politiku tunela i zaključuje da je paket na pogrešnom interfejsu.

Ispravka pripada vlasniku firewalla: sačuvajte oznaku na odlaznoj vezi, vratite je na odgovarajuće dolazne pakete i omogućite obradu oznaka validiranu izvorom za relevantni put. To što OpenVPN postavlja socket oznaku ne čini nijednu od te tri stvari, a recept koji navodi samo klijentske opcije je nepotpun. Zatražite tu integraciju pismeno, jer je to najmanje vidljiv dio dizajna i najlakše se gubi pri ponovnoj izgradnji.

Ni labava provjera povratnog puta nije zamjena. Labav način rada i dalje zahtijeva da postoji neka ruta za izvor, a unreachable zaštita koju ste dodali namjerno uklanja jednu za neoznačene pretrage. Dovršite i pregledajte integraciju oznake veze prije nego što se pouzdate u ovaj dizajn, i tretirajte filtere domaćina kao odvojeno pitanje: oznaka je signal rutiranja, a ne dozvola. Ako integracija nedostaje, simptom je sesija koja se uspostavi i zatim utihne čim odgovori počnu pristizati.

Dokažite to s dvije pretrage ruta

Uporedite šta jezgro odlučuje za dva konteksta i čitajte polja dev i src umjesto izlaznog statusa:

ip -4 route get 198.51.100.25
ip -4 route get 198.51.100.25 mark 0x2a

Prva pretraga bi trebala riješiti na tun1 s izvorom tunela, a druga na uplink. To su sintetičke pretrage, pa dokazuju politiku, a ne proces koji radi: potvrdite odvojeno stvarni transportni put klijenta koji radi, a zatim uputite pravi HTTPS zahtjev s uključenom provjerom certifikata.

Zapišite šta dizajn ne pokriva prije nego što ga proglasite završenim. DNS, IPv6 i životni ciklus pravila trebaju svaki svoju odluku, a ovo je primjer IPv4 rutiranja, a ne potpuna konfiguracija privatnosti. Njegova vrijednost je selektor: koverta dobija izuzetak uplinka, a obična usluga na istoj adresi ne mora ga naslijediti.

Povezani članci