Dva profila koji se razlikuju u jednom redu ponašaju se drukčije onog trenutka kada drugi klijent krene na istom hostu. Jedan nosi nobind i uzima bilo koji lokalni port koji mu kernel dodijeli; drugi rezerviše 1194, a druga instanca umire s adresom koja je već u upotrebi. Taj red odlučuje ko bira izvorni port, što opet odlučuje može li profil koegzistirati s bilo čim drugim na mašini. Tri pitanja to rješavaju, a prvo odgovara za većinu profila prije nego dođete do ostalih dvaju.

Šta nobind zapravo preskače

Po defaultu klijent veže lokalni socket prije nego što se javi, a lokalni port je 1194 osim ako profil ne kaže drukčije. nobind uklanja tu rezervaciju, pa stek dodjeljuje neiskorišten port u trenutku povezivanja. To je izuzetak, a ne default, i klijent bez tog reda drži 1194, što je upravo razlog zašto se neprikovana druga instanca sudara. Većina isporučenih klijentskih profila nosi tu direktivu upravo zato, a to što primjer datoteke nešto radi nije isto kao da mehanizam to radi po defaultu.

Ono što se ne mijenja jest druga strana. Server i dalje sluša tamo gdje profil kaže da sluša, a odredišni port u konfiguraciji i dalje je odredišni port. Dinamički izvorni port mijenja povratnu adresu vašeg socketa i ništa na serverovom.

Također ništa ne skriva. Vaša javna adresa je ono u što je put pretvori, paket i dalje prelazi lokalnu mrežu, a ko god upravlja tom mrežom i dalje vidi tok. nobind nije ni značajka privatnosti ni zaobilazak firewalla.

Tri uslova koja to odlučuju

Jedno pitanje odlučuje ostala dva, pa odgovorite na njega prije bilo kakvog uređivanja. Ako se partner javlja, preostala pitanja samo preciziraju već donesenu odluku. Ako prihvata dolazne veze, nikakvo podešavanje lokalnog porta ne čini ga dostupnim.

Pokreće li taj partner vezu? Ako se javlja, dinamički izvorni port je bezopasan i obično poželjniji, jer odgovor slijedi isti tok natrag. Ako čeka dolazne veze, dinamički port čini ga nedostupnim osim ako nešto ispred ne objavi port. Taj jedan odgovor razdvaja svaki klijentski profil od svakog serverskog.

Filtrira li put po izvornom portu? Strogo pravilo napisano za jedan poznati port zahtijeva izričiti lokalni port, a profil treba zabilježiti kojem pravilu udovoljava. Većina mreža filtrira samo po odredištu, pa je taj uslov rjeđi od prvog. Gdje se primjenjuje, nadjačava sklonost dinamičkom portu.

Dijeli li više instanci host? Jedan fiksni port ne može poslužiti dvije od njih, a restartovana instanca može naći 1194 još u stanju zatvaranja. Dinamički portovi uklanjaju taj sukob ne mijenjajući ništa drugo. Ako na ovo ne možete pouzdano odgovoriti, pretpostavite da dijeli i pustite kernel da bira.

Gdje je prikovan port pravi odgovor

Neke mreže filtriraju i po izvornom portu i po odredištu, pa je operater možda napisao pravilo koje propušta promet samo s jednog poznatog porta. Prikivanje lokalnog porta tada je ispravno, a profil treba nositi komentar koji imenuje pravilo kojem udovoljava. Prikivanje radi simetrije sa serverskim portom nije razlog, jer ta dva broja nemaju ništa jedno s drugim. Ako prikivanje postoji samo zato što ga je predložak imao, izbrišite ga.

Inače prikovan port kupuje nevolju: dva klijenta na jednoj mašini ne mogu oba držati 1194, a drugi pada s greškom koja pokazuje na port, a ne na profil. Kontejner koji se brzo restartuje udara u isti zid. Popravka je direktiva koju su isporučeni profili već sadržavali.

Server i klijent nisu simetrični

OpenVPN 2.6 priručnik stavlja nobind uz lport, što je argument u jednom redu: jedna opcija kaže da kernel bira, druga da birate vi. Dinamički lokalni port radi samo za partnera koji se javlja, jer strana koja odgovara ne može unaprijed znati port. Zato kopiranje klijentskog profila na server stvara slušača do kojeg nitko ne može doći.

Na hostu s više mrežnih sučelja adresa je odvojena odluka od porta. Vezivanje određenog lokalnog sučelja i vezivanje određenog porta dvije su različite postavke, a server s dva uzlazna linka obično prikiva oboje. Klijent koji prikiva oboje preuzeo je istu krutost bez ikakve koristi.

Sažetak se odnosi na uloge, a ne na sigurnost: ko se javlja može biti fleksibilan u pogledu svog izvora, a ko odgovara ne može. Nijedan izbor ne mijenja ono što druga strana sazna o vašem identitetu. Zato se direktiva pojavljuje u klijentskim primjerima i gotovo nikad u serverskim.

Provjerite port koji je kernel odabrao

Nakon povezivanja čitajte socket, a ne konfiguraciju, jer konfiguracija iskazuje namjeru, a socket ono što se dogodilo. Činjenice koje vrijedi zabilježiti jesu lokalni port, udaljena krajnja tačka i sluša li još nešto. Na Linux hostu sve troje je udaljeno jednu komandu.

ss -unp | grep openvpn
ss -lunp | grep openvpn
sudo lsof -nP -i | grep openvpn

Klijent s nobind pokazuje visok lokalni port i konfigurirani udaljeni port, što je očekivani oblik. Server pokazuje socket koji sluša na svom konfiguriranom portu, a ako taj socket nedostaje, profil ili nije slušač ili se nije uspio vezati. Kada tok postoji ali paketi se ne vraćaju, uporedite odabrani izvorni port sa bilo kojim filterom portova na putu prije nego uredite profil. Promijenite jednu stvar, ponovo se povežite i ponovo pročitajte socket.

Povezani članci