Spustite OpenVPN v Dockeri za 2 sekundy

Dobrý deň, obyvatelia Khabrovska! Stretli ste sa už niekedy so situáciou, kedy ste sa naozaj chceli virtuálne previezť do iného mesta, krajiny alebo kontinentu? Túto potrebu mám pomerne často, takže možnosť mať vlastný VPN server, ktorý sa dá spustiť kdekoľvek, za pár sekúnd, bola celkom naliehavá.V tomto článku chcem porozprávať o svojom projekte, ktorý som vymyslel, keď som bol hľadá hotové riešenie, v tomto prípade Docker image, ktorý by vám umožnil rýchlo nastaviť OpenVPN server s minimom nastavení a prijateľnou úrovňou zabezpečenia.

Spustite OpenVPN v Dockeri za 2 sekundy

pravek

Schopnosť spustiť službu na akomkoľvek počítači – či už ide o fyzický server alebo virtuálny súkromný server alebo dokonca kontajnerový priestor v inom systéme správy kontajnerov – bola kritická. Môj pohľad okamžite padol na Dockera. Po prvé, táto služba si získava na popularite, a preto čoraz viac poskytovateľov poskytuje hotové riešenia s jej predinštaláciou; po druhé, existuje centralizované úložisko obrázkov, odkiaľ si môžete stiahnuť a spustiť službu pomocou jedného príkazu v termináli. Napadla ma myšlienka, že takýto projekt by už mal existovať a usilovne som hľadal. Ale väčšina projektov, ktoré som našiel, bola buď príliš ťažkopádna (museli ste vytvoriť kontajner na trvalé ukladanie dát a kontajner s aplikáciou spustiť niekoľkokrát s rôznymi parametrami), alebo bez rozumnej dokumentácie, alebo úplne opustená. Nenašiel som nič prijateľné , začal som pracovať na vašom projekte. Pred študovaním dokumentácie, písaním kódu a ladením nás čakali bezsenné noci, ale nakoniec moja služba uzrela svetlo sveta a začala žiariť všetkými farbami monochromatického LED panela smerovača. Takže vás žiadam o lásku a priazeň - Docker-OpenVPN. Dokonca som si vymyslel aj logo (vyššie, pred strihom), ale neposudzujte to striktne, pretože nie som dizajnér (už) Pri realizácii tohto projektu som uprednostnil rýchlosť nasadenia, min. nastavenia a prijateľnú úroveň zabezpečenia. Pokusom a omylom som našiel optimálnu rovnováhu medzi týmito kritériami, ale na niektorých miestach som musel obetovať rýchlosť nasadenia kvôli bezpečnosti a musel som platiť za prenosnosť pre minimum nastavení: v aktuálnej konfigurácii kontajner vytvorený na jednom serveri nemožno preniesť a spustiť na inom serveri. Napríklad všetky klientske a serverové certifikáty sa vygenerujú pri spustení služby a bude to trvať približne 2 sekundy. Generovanie súboru Hellman Defi sa však muselo zohľadniť pri zostavovaní: vytvára sa počas zostavovania obrazu dockera a môže trvať až 10 minút. Naozaj by som rád získal bezpečnostný audit takéhoto riešenia od rešpektovanej komunity.

Запуск

Na spustenie služby potrebujeme niekoľko vecí:

  1. Server: fyzický alebo virtuálny. Teoreticky je možné spustiť v režime docker-in-docker, ale túto možnosť som rozsiahle netestoval;
  2. Vlastne Docker. Mnoho poskytovateľov hostingu poskytuje hotové riešenia s Dockerom na palube;
  3. Verejná IP adresa.

Ak sú všetky podrobnosti na mieste, všetko, čo musíme urobiť, je spustiť nasledujúci príkaz v konzole vášho 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

Pozorný čitateľ si mohol všimnúť, že IP adresa servera sa určuje automaticky pomocou ipify.org. Ak to z nejakého dôvodu nefunguje, môžete adresu zadať manuálne. Ak boli všetky predchádzajúce kroky dokončené správne, v konzole by sme mali vidieť niečo podobné:

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!

Sme blízko cieľa: teraz musíme kopírovať example.com (vo vašom prípade to bude adresa vášho servera) a vložte ju do panela s adresou vášho prehliadača. Po stlačení klávesu Enter sa stiahne súbor client.ovpn a samotný http server zmizne do zabudnutia. Ak máte pochybnosti o tomto riešení, môžete použiť nasledujúci trik: spustite predchádzajúci príkaz a pridajte príznaky zp a heslo. Teraz, ak vygenerovaný odkaz vložíte do okna prehliadača, dostanete zip archív s heslom.Akonáhle budete mať konfiguračný súbor klienta, môžete použiť ľubovoľného vhodného klienta. Používam Tunnelblick pre Mac.

Video tutoriál

Tento video tutoriál obsahuje podrobné pokyny na nasadenie služby na DigitalOcean.

PS Ak považujete tento projekt za užitočný, dajte mu hviezdičku na GitHub, rozdeľte ho a povedzte to svojim priateľom. Veľmi vítaní sú aj prispievatelia a bezpečnostné audity.PPS Ak tento článok skončí na Habrovi, tak plánujem napísať ďalší o tom, ako som spustil docker-in-docker a docker-in-docker-in-docker, prečo som to urobil a čo z toho vzišlo.
EDIT1:

  1. Opravené chyby v publikácii,
  2. V odpovedi na komentáre som sa rozhodol vložiť tieto informácie sem: na prácu s iptables je potrebný príznak —privileged

EDIT2:

  1. Vylepšený príkaz na spustenie obrazu: teraz nevyžaduje príznak –privileged
  2. Pridaný odkaz na video sprievodcu v ruskom jazyku: youtu.be/A8zvrHsT9A0

Zdroj: hab.com

Pridať komentár