OpenVPN: local nasuprot adresi tunela, dva različita socketa
Adresa koja kontaktira server nije adresa unutar tunela. Čitanje local, remote i nobind kao odvojenih uloga objašnjava većinu grešaka pri vezivanju.
Klijent odbija da se pokrene i žali se da ne može vezati lokalnu adresu, a očigledno rješenje izgleda kao da ga treba usmjeriti na adresu tunela koju očekuje da će dobiti. To ne može raditi, a razlog vrijedi razumjeti: prije nego što tunel postoji nema unutrašnje adrese, a socket koji kontaktira server mora postojati prvo. U igri su dvije različite adrese, a samo jedna od njih može se odabrati lokalno.
Greška pri vezivanju imenuje lokalnu adresu
Kada OpenVPN javi da ne može vezati lokalnu adresu, govori o transportnom socketu: UDP ili TCP krajnjoj točki koja nosi šifrovanu vezu do peera.
Eksplicitna local direktiva traži od daemona da veže taj socket za određenu lokalnu adresu. Adresa mora postojati u mrežnom imenskom prostoru u kojem proces radi i mora biti dodjeljiva u trenutku kada klijent kreće.
Javna adresa prevedena na ruteru ili na ivici oblaka nije lokalna adresa koju daemon može vezati, iako je to adresa koju server vidi. Ta razlika objašnjava zašto jedan profil radi kod kuće, a pada na instanci u oblaku. Objašnjava i zašto dodavanje javne adrese na loopback interfejs ne pomaže, jer bi transport tada uzimao izvor sa adrese na koju mreža ne može da rutira nazad. Pročitajte listu interfejsa prije nego što izmijenite profil.
Šta local i remote zaista biraju
remote imenuje peera sa kojim treba kontaktirati. local veže bliži kraj istog socketa. nobind pušta operativni sistem da izabere i lokalnu adresu i port, zbog čega klijenti iza kućnih rutera obično rade bez ijedne od te dvije direktive.
Nijedna od tih direktiva nema nikakve veze sa adresom unutar tunela.
U kontejneru ili mrežnom imenskom prostoru važi isto pravilo sa užim granicama: adrese hosta nisu prisutne unutra, pa linija local kopirana iz konfiguracije hosta pada iz potpuno drugog razloga nego što bi pala pogrešna adresa.
ip -brief address show
ip route get 203.0.113.10Unutrašnja adresa dolazi od servera
Adresa unutar tunela se pregovara ili dodjeljuje nakon što se uspostavi kontrolni kanal. Sa dinamičkim poolom server to odlučuje u trenutku povezivanja, a sa konfiguracijom specifičnom za klijenta može biti fiksna po identitetu.
Pisanje local sa unutrašnjom adresom ne traži od servera da dodijeli tu adresu. U najboljem slučaju vezivanje pada; u najgorem klijent nađe nepovezanu adresu hosta iste vrijednosti i počne je koristiti za transport.
Interfejsi koje treba čitati su takođe drugačiji. Parametri ifconfig i konfiguracija poola opisuju unutrašnjost, dok remote, local, proto i nobind opisuju spoljašnjost. Držanje te dvije liste odvojenim objašnjava skoro svaki zbunjujući primjer koji ćete naći na forumu. Zato ih OpenVPN 2.6 priručnik dokumentuje u odvojenim odjeljcima.
Zamka: pun tunel koji hvata sopstveni transport
Kada je tunel podignut i nosi zadanu rutu, paketi koji ga održavaju ne smiju se rutirati u njega. To je problem rutiranja, a ne adresiranja, i daemon ga rješava tako što instalira specifičniju rutu do serverove vlastite adrese kroz originalni gateway.
Ako transport prikvačite za određenu lokalnu adresu i kasnije promijenite putanju koju ta adresa koristi, spoljna veza može izgubiti put dok unutrašnjost ostaje konfigurisana. Tunel nastavlja javljati da je povezan jer je unutrašnjost u redu. Samo je transport pokvaren, zbog čega se logovi čitaju kao protivrječnosti.
Simptomi tada izgledaju kao tunel koji se poveže i zamrzne, ili kao onaj koji se ponovo povezuje u petlji bez korisne greške. Provjerite rutu do peerove adrese prije nego što provjerite bilo šta unutar tunela, i potvrdite da lokalna adresa koju ste vezali još pripada interfejsu koji ste očekivali.
Navika koja sprječava zabunu
Pročitajte svaku adresu u profilu i odlučite kojem sloju pripada prije nego što je izmijenite.
Ako imenuje dalji kraj transporta ili veže njegov bliži kraj, to je spoljna adresa i mora postojati prije pokretanja. Ako opisuje šta se dešava unutar tunela, dolazi od servera ili od topologije, i nijedna lokalna direktiva ne može je zamijeniti.
Zapišite te dvije liste u napomene o implementaciji pored profila. Sljedeća sesija rješavanja problema tada počinje slojem, a ne nagađanjem.