OpenVPN: lokalna adresa nasuprot adresi tunela — dva različita soketa
Adresa koja kontaktira server nije adresa unutar tunela. Ako local, remote i nobind čitate kao odvojene uloge, većina grešaka pri vezivanju postaje jasna.
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 dobije. To ne može funkcionisati, a razlog vrijedi razumjeti: prije nego što tunel postoji nema unutrašnje adrese, a soket koji kontaktira server mora postojati prvi. Uključene su dvije različite adrese i 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 soketu: UDP ili TCP krajnjoj tački koja nosi šifrovanu vezu prema peeru.
Eksplicitna local direktiva traži od daemona da taj soket veže na 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 cloud instanci. Ona objašnjava i zašto dodavanje javne adrese na loopback interfejs ne pomaže, jer bi transport tada izlazio s adrese na koju mreža ne može vratiti odgovor. Pročitajte listu interfejsa prije uređivanja profila.
Šta local i remote zapravo biraju
remote imenuje peer s kojim treba kontaktirati. local veže bliži kraj istog soketa. nobind pušta operativni sistem da odabere i lokalnu adresu i port, zbog čega klijenti iza kućnih rutera obično rade bez ijedne od tih direktiva.
Nijedna direktiva nema nikakve veze s adresom unutar tunela.
U kontejneru ili mrežnom imenskom prostoru vrijedi isto pravilo s užim granicama: adrese hosta nisu prisutne unutra, pa local linija kopirana iz konfiguracije hosta pada zbog potpuno drugačijeg razloga nego pogrešna adresa.
ip -brief address show
ip route get 203.0.113.10Unutrašnja adresa dolazi sa servera
Adresa unutar tunela pregovara se ili dodjeljuje nakon što se uspostavi kontrolni kanal. U dinamičkom poolu server to odlučuje pri povezivanju, a u konfiguraciji specifičnoj za klijenta može biti fiksna po identitetu.
Pisanje local s unutrašnjom adresom ne traži od servera da dodijeli tu adresu. U najboljem slučaju vezivanje pada; u najgorem klijent pronađe nepovezanu adresu hosta iste vrijednosti i počne je koristiti za transport.
Interfejsi koje treba čitati takođe su različiti. ifconfig parametri i konfiguracija poola opisuju unutrašnjost, dok remote, local, proto i nobind opisuju vanjštinu. Držanje dvije liste odvojeno objašnjava gotovo svaki zbunjujući primjer koji ćete naći na forumu. OpenVPN 2.6 priručnik ih zato dokumentuje u odvojenim odjeljcima.
Zamka: puni tunel koji zarobi vlastiti transport
Kad je tunel podignut i nosi zadanu rutu, paketi koji ga održavaju ne smiju biti rutirani u njega. To je problem rutiranja, a ne adresiranja, i daemon ga rješava instaliranjem specifičnije rute do serverove vlastite adrese kroz izvorni gateway.
Ako transport prikvačite na određenu lokalnu adresu i poslije promijenite putanju koju ta adresa koristi, vanjska 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 i zato se logovi čitaju kao protivrječnosti.
Simptomi tada izgledaju kao tunel koji se poveže i zamrzne, ili kao tunel koji se u petlji ponovo povezuje bez korisne greške. Provjerite rutu do peerove adrese prije nego provjerite bilo šta unutar tunela i potvrdite da lokalna adresa koju ste vezali još pripada interfejsu koji očekujete.
Navika koja sprječava zabunu
Pročitajte svaku adresu u profilu i odlučite kojoj sloji pripada prije nego je uredite.
Ako imenuje dalji kraj transporta ili veže njegov bliži kraj, to je vanjska 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.
Upišite dvije liste u bilješke za postavljanje pored profila. Sljedeća sesija rješavanja problema tada počinje slojem, a ne nagađanjem.