Zdravo, članovi Habra! Da li ste se ikada suočili sa situacijom kada ste zaista želeli da se virtuelno preselite u neki drugi grad, zemlju ili čak na drugi kontinent? Meni je ta potreba često prisutna, zbog čega je mogućnost imanja svog VPN servera, koji se može pokrenuti bilo gde u samo nekoliko sekundi, bila veoma važna. U ovom članku želim da vas upoznam sa svojim projektom, koji sam osmislio dok sam tražio rešenje, u ovom slučaju Docker sliku koja bi omogućila brzo podizanje OpenVPN servera, uz minimum podešavanja i prihvatljiv nivo sigurnosti.
Pozadina
Mogućnost pokretanja servisa na bilo kojoj mašini: bilo da je reč o fizičkom serveru, virtuelnom privatnom serveru ili čak kontejnerskom prostoru unutar drugog sistema za upravljanje kontejnerima — bila je od suštinskog značaja. Moj fokus odmah je bio na Docker-u. Prvo, ova usluga dobija na popularnosti, a to znači da sve više i više provajdera nudi gotova rešenja sa njegovom instalacijom; drugo — postoji centralizovano skladište slika iz kojeg se može preuzeti i pokrenuti usluga jednom komandom u terminalu. Mislio sam da ovakav projekat već mora postojati i uporno sam tražio. Međutim, većina projekata koje sam našao bila je ili previše obimna (potrebno je bilo kreirati kontejner za trajno skladištenje podataka i više puta pokrenuti kontejner sa aplikacijom sa različitim parametrima), ili nije imala odgovarajuću dokumentaciju, ili su bile potpuno napuštene. Ne nalazeći ništa prihvatljivo, počeo sam rad na svom projektu. Ispred su bile besane noći proučavanja dokumentacije, pisanja koda i otklanjanja grešaka, ali na kraju je moj servis ugledao svetlost dana i zasvetleo svim bojama monohromatske LED panela rutera. Dakle, molim vas da prihvatite — . Naredil sem celo logotip (zgoraj, pred prehodom), a ne sodite ga strogo, ker nisem oblikovalec (že). Ko sem izvajal ta projekt, sem postavil hitrost namestitve, minimalne nastavitve in sprejemljivo raven varnosti na prvo mesto. S poskusi in napakami sem našel optimalno ravnotežje med temi kriteriji, vendar sem nekje moral žrtvovati hitrost namestitve za varnost, minimalne nastavitve pa so plačale ceno prenosljivosti: v trenutni konfiguraciji enkrat ustvarjenega kontejnerja na enem strežniku ni mogoče prenesti in zagnati na drugem. Na primer, vsi klientski in strežniški certifikati se generirajo ob zagonu storitve in to traja okoli 2 sekundi. Kljub temu sem moral ustvarjanje datoteke Diffie-Hellman prenesti v čas gradnje: ta se ustvari med gradnjo Docker slike in lahko traja do 10 minut. Zelo bi rad prejel varnostni audit takega rešenja od ugledne skupnosti.
Pokretanje
Za zagon storitve potrebujemo nekaj stvari:
- Strežnik: fizični ali virtualni. Teoretično je možno zagnati v načinu docker-v-docker, a te možnosti nisem obsežno testiral;
- Sama Docker. Veliko ponudnikov gostovanja ponuja pripravljene rešitve z Dockerjem 'na krovu';
- Javni IP naslov.
Če so vsi podatki na mestu, nam ostane le še zagnati naslednji ukaz v konzoli vašega strežnika:
docker run --cap-add=NET_ADMIN
-it -p 1194:1194/udp -p 80:8080/tcp
-e HOST_ADDR=$(curl -s https://api.ipify.org)
alekslitvinenk/openvpnPozoren bralec bi lahko opazil, da se IP naslov strežnika samodejno določi s pomočjo ipify.org. Če iz kakršnegakoli razloga to ne deluje, lahko naslov vnesete ročno. Če so vsi prejšnji koraki pravilno izvedeni, bi morali v konzoli videti nekaj takega:
Sun Jun 9 08:56:11 2019 Inicializacijska sekvenca zaključena
Sun Jun 9 08:56:12 2019 Datoteka Client.ovpn je bila ustvarjena
Sun Jun 9 08:56:12 2019 Konfiguracija strežnika je začela, prenesite svojo konfiguracijo client.ovpn na http://example.com/
Sun Jun 9 08:56:12 2019 OPOMBA: Po prenosu vaše konfiguracije klienta, se bo HTTP strežnik izklopil!Bližamo se cilju: zdaj moramo kopirati (v vašem primeru bo to naslov vašega strežnika) in ga prilepite v naslovno vrstico brskalnika. Ko pritisnete Enter, se bo datoteka client.ovpn naložila, http strežnik pa bo izginil. Če imate dvome o tem rešitvi, lahko uporabite naslednji trik: zažene prejšnji ukaz in dodate zastavice zp in geslo. Zdaj, če prilepite ustvarjeno povezavo v okno brskalnika — boste prejeli zip arhiv z geslom. Ko imate datoteko s konfiguracijo odjemalca, lahko uporabite katerikoli ustrezen odjemalec. Jaz uporabljam Tunnelblick za Mac.
Video tutrial
Ta video tutrial vsebuje podrobna navodila za uvajanje storitve na DigitalOcean.

EDIT1:
- Popravil napake v objavi,
- Odgovarjajoč na komentarje, sem se odločil to informacijo prenesti sem: zastava —privileged je potrebna za delo z iptables
EDIT2:
- Izboljšal sem ukaz za zagon slike: zdaj ne zahteva zastave —privileged
- Dodano poveznico na video priročnik v ruščini:
Izvor: habr.com
