Pokrenite OpenVPN u Dockeru za 2 sekunde

Pozdrav, stanovnici Khabrovsk! Jeste li se ikada susreli sa situacijom kada ste jako htjeli biti virtualno prevezeni u drugi grad, državu ili kontinent? Često imam tu potrebu, pa mi je prilika da imam vlastiti VPN poslužitelj, koji se može pokrenuti bilo gdje, u nekoliko sekundi, bila prilično hitna. U ovom članku želim govoriti o svom projektu koji sam zamislio kada sam tražite gotovo rješenje, u ovom slučaju Docker sliku koja bi vam omogućila brzo postavljanje OpenVPN poslužitelja, uz minimum postavki i prihvatljivu razinu sigurnosti.

Pokrenite OpenVPN u Dockeru za 2 sekunde

prapovijest

Sposobnost pokretanja usluge na bilo kojem stroju - bilo da se radi o fizičkom poslužitelju, ili virtualnom privatnom poslužitelju, ili čak prostoru spremnika unutar drugog sustava upravljanja spremnikom - bila je kritična. Pogled mi je odmah pao na Dockera. Prvo, ova usluga postaje sve popularnija, pa stoga sve više pružatelja usluga nudi gotova rješenja s predinstalacijom; drugo, postoji središnja pohrana slika odakle možete preuzeti i pokrenuti uslugu pomoću jedne naredbe u terminalu. Sinula mi je ideja da bi takav projekt već trebao postojati i intenzivno sam tražio. Ali većina projekata koje sam pronašao bili su ili preglomazni (morali ste stvoriti spremnik za trajnu pohranu podataka i pokrenuti spremnik s aplikacijom nekoliko puta s različitim parametrima), ili bez zdrave dokumentacije, ili potpuno napušteni. Nisam pronašao ništa prihvatljivo , počeo sam raditi na vašem projektu. Bile su besane noći ispred proučavanja dokumentacije, pisanja koda i otklanjanja pogrešaka, ali na kraju je moja usluga ugledala svjetlo dana i počela blistati svim bojama monokromatskog LED panela rutera. Dakle, tražim od vas da volite i favorizirate - Docker-OpenVPN. Smislio sam čak i logo (gore, prije rezanja), ali nemojte ga strogo suditi, jer (više) nisam dizajner. Kada sam implementirao ovaj projekt, prioritet mi je bila brzina postavljanja, minimalno postavke i prihvatljivu razinu sigurnosti. Kroz pokušaje i pogreške pronašao sam optimalnu ravnotežu ovih kriterija, međutim, na nekim sam mjestima morao žrtvovati brzinu postavljanja radi sigurnosti i morao sam platiti prenosivost za minimalne postavke: u trenutnoj konfiguraciji, spremnik jednom stvoren na jednom poslužitelju ne može se prenijeti i pokrenuti na drugom. Na primjer, svi certifikati klijenta i poslužitelja generiraju se kada se usluga pokrene i to će trajati oko 2 sekunde. Međutim, generiranje Hellman Defi datoteke moralo se uzeti u obzir tijekom izrade: ona se stvara tijekom izgradnje docker slike i može trajati do 10 minuta. Zaista bih želio dobiti sigurnosnu reviziju takvog rješenja od cijenjene zajednice.

lansiranje

Za pokretanje usluge potrebno nam je nekoliko stvari:

  1. Poslužitelj: fizički ili virtualni. Teoretski je moguće pokrenuti u docker-in-docker modu, ali nisam opširno testirao ovu opciju;
  2. Zapravo Docker. Mnogi pružatelji usluga hostinga nude gotova rješenja s Dockerom;
  3. Javna IP adresa.

Ako su svi detalji na mjestu, onda sve što trebamo učiniti je pokrenuti sljedeću naredbu u konzoli vašeg poslužitelja:

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 čitatelj mogao je primijetiti da se IP adresa poslužitelja određuje automatski pomoću ipify.org. Ako iz nekog razloga to ne uspije, adresu možete odrediti ručno. Ako su svi prethodni koraci ispravno izvršeni, trebali bismo vidjeti nešto slično na 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 kopirati example.com (u vašem slučaju to će biti adresa vašeg poslužitelja) i zalijepite je u adresnu traku vašeg preglednika. Nakon što pritisnete Enter, datoteka client.ovpn bit će preuzeta, a sam http poslužitelj nestat će u zaborav. Ako niste sigurni u ovo rješenje, možete upotrijebiti sljedeći trik: pokrenite prethodnu naredbu i dodajte oznake zp i lozinku. Sada, ako zalijepite generiranu poveznicu u prozor preglednika, dobit ćete zip arhivu s lozinkom. Nakon što imate konfiguracijsku datoteku klijenta, možete koristiti bilo koji odgovarajući klijent. Koristim Tunnelblick za Mac.

Video tutorial

Ovaj video vodič sadrži detaljne upute za implementaciju usluge na DigitalOcean.

PS Ako smatrate da je ovaj projekt koristan, dajte mu zvjezdicu na GitHubu, račvajte ga i recite svojim prijateljima. Suradnici i sigurnosne revizije također su š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 napravio i što je iz toga ispalo.
EDIT1:

  1. Ispravljene greške u objavi,
  2. Odgovarajući na komentare, odlučio sam staviti ovu informaciju ovdje: oznaka —privileged potrebna je za rad s iptables

EDIT2:

  1. Poboljšana je naredba za pokretanje slike: sada ne zahtijeva oznaku –privileged
  2. Dodana poveznica na video vodič na ruskom jeziku: youtu.be/A8zvrHsT9A0

Izvor: www.habr.com

Dodajte komentar