Pokrenite OpenVPN u Dockeru za 2 sekunde

Zdravo, stanovnici Khabrovska! Da li ste se ikada susreli sa situacijom kada ste zaista želeli da budete virtuelno transportovani u drugi grad, državu ili kontinent? Često imam ovu potrebu, tako da mi je bila hitna prilika da imam svoj VPN server, koji se može pokrenuti bilo gdje, za par sekundi.U ovom članku želim govoriti o svom projektu koji sam osmislio kada sam bio u potrazi za gotovim rješenjem, u ovom slučaju Docker slikom koja bi vam omogućila brzo postavljanje OpenVPN servera, uz minimum postavki i prihvatljiv nivo sigurnosti.

Pokrenite OpenVPN u Dockeru za 2 sekunde

prapovijest

Sposobnost pokretanja usluge na bilo kojoj mašini - bilo da se radi o fizičkom serveru, ili virtuelnom privatnom serveru, ili čak kontejnerskom prostoru unutar drugog sistema za upravljanje kontejnerima - bila je kritična. Pogled mi je odmah pao na Dockera. Prvo, ova usluga postaje sve popularnija, pa stoga sve više provajdera nudi gotova rješenja uz njenu predinstalaciju; drugo, postoji centralizovano skladištenje slika odakle možete preuzeti i pokrenuti uslugu pomoću jedne komande u terminalu. Ideja da bi takav projekat već trebalo da postoji pala mi je na pamet i teško sam tražio. Ali većina projekata koje sam pronašao je bio ili preglomazan (morao si napraviti kontejner za trajno skladištenje podataka i pokrenuti kontejner s aplikacijom nekoliko puta s različitim parametrima), ili bez razumne dokumentacije, ili potpuno napušten. Nisam našao ništa prihvatljivo , počeo sam raditi na vašem projektu. Bile su besane noći pred proučavanjem dokumentacije, pisanjem koda i otklanjanjem grešaka, ali na kraju je moj servis ugledao svjetlo dana i počeo blistati svim bojama monohromatskog LED panela rutera. Dakle, molim te da voliš i nakloniš - Docker-OpenVPN. Čak sam smislio i logo (iznad, prije rezanja), ali nemojte strogo suditi, jer nisam dizajner (više). Kada sam implementirao ovaj projekat, prioritet sam dao brzini implementacije, minimalno postavke i prihvatljiv nivo sigurnosti. Putem pokušaja i grešaka pronašao sam optimalnu ravnotežu ovih kriterija, međutim, na nekim mjestima sam morao žrtvovati brzinu implementacije radi sigurnosti i morao sam platiti prenosivost za minimum postavki: u trenutnoj konfiguraciji, kontejner jednom kreiran na jednom serveru ne može se prenijeti i pokrenuti na drugom. Na primjer, svi klijentski i serverski certifikati se generiraju kada se servis pokrene i to će trajati oko 2 sekunde. Međutim, generisanje datoteke Hellman Defi je moralo biti uzeto u vrijeme izrade: kreira se tokom izgradnje docker slike i može trajati do 10 minuta. Zaista bih volio da dobijem sigurnosnu reviziju ovakvog rješenja od uvažene zajednice.

Запуск

Za pokretanje usluge potrebno nam je nekoliko stvari:

  1. Server: fizički ili virtuelni. Teoretski je moguće pokrenuti u docker-with-docker modu, ali nisam opširno testirao ovu opciju;
  2. Zapravo Docker. Mnogi hosting provajderi pružaju gotova rješenja s Dockerom;
  3. Javna IP adresa.

Ako su svi detalji na svom mjestu, sve što treba da uradimo je da pokrenemo sljedeću naredbu u konzoli vašeg servera:

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/openvpn

Pažljivi čitalac bi mogao primijetiti da se IP adresa servera automatski određuje pomoću ipify.org. Ako iz nekog razloga ovo ne radi, adresu možete odrediti ručno. Ako su svi prethodni koraci ispravno obavljeni, trebali bismo vidjeti nešto slično u konzoli:

Sun Jun  9 08:56:11 2019 Initialization Sequence Completed
Sun Jun  9 08:56:12 2019 Client.ovpn file has been generated
Sun Jun  9 08:56:12 2019 Config server started, download your client.ovpn config at http://example.com/
Sun Jun  9 08:56:12 2019 NOTE: After you download you client config, http server will be shut down!

Blizu smo cilja: sada treba da kopiramo example.com (u vašem slučaju to će biti adresa vašeg servera) i zalijepite je u adresnu traku vašeg pretraživača. Nakon što pritisnete Enter, datoteka client.ovpn će se preuzeti, a sam http server će nestati u zaborav. Ako je ovo rješenje upitno, možete koristiti sljedeći trik: pokrenite prethodnu naredbu i dodajte zastavice zp i lozinku. Sada, ako zalijepite generiranu vezu u prozor pretraživača, dobit ćete zip arhivu sa lozinkom.Kada imate konfiguracijski fajl klijenta, možete koristiti bilo koji odgovarajući klijent. Koristim Tunnelblick za Mac.

Video tutorial

Ovaj video vodič sadrži detaljna uputstva za implementaciju usluge na DigitalOcean.

PS Ako smatrate da je ovaj projekat koristan, dajte mu zvjezdicu na GitHub-u, razdvojite ga i recite svojim prijateljima. Saradnici i bezbednosne revizije su takođe široko dobrodošli.PPS Ako ovaj članak završi na Habru, onda planiram napisati sljedeći o tome kako sam pokrenuo docker-in-docker i docker-in-docker-in-docker, zašto sam to učinio i šta je iz toga proizašlo.
EDIT1:

  1. Ispravljene greške u publikaciji,
  2. Odgovarajući na komentare, odlučio sam da stavim ovu informaciju ovdje: —privilegirana zastavica je potrebna za rad s iptables

EDIT2:

  1. Poboljšana komanda za pokretanje slike: sada nije potrebna oznaka –privileged
  2. Dodan link do video vodiča na ruskom jeziku: youtu.be/A8zvrHsT9A0

izvor: www.habr.com

Dodajte komentar