Spusťte OpenVPN v Dockeru za 2 sekundy

Dobrý den, obyvatelé Chabrovska! Už jste se někdy setkali se situací, kdy jste se opravdu chtěli virtuálně přepravit do jiného města, země nebo kontinentu? Tuto potřebu mám poměrně často, takže možnost mít svůj vlastní VPN server, který lze spustit kdekoli během několika sekund, byla docela naléhavá.V tomto článku chci mluvit o svém projektu, který jsem vymyslel, když jsem byl hledáte hotové řešení, v tomto případě Docker image, který by vám umožnil rychle nastavit OpenVPN server s minimem nastavení a přijatelnou úrovní zabezpečení.

Spusťte OpenVPN v Dockeru za 2 sekundy

pravěk

Schopnost provozovat službu na jakémkoli počítači – ať už jde o fyzický server nebo virtuální privátní server nebo dokonce kontejnerový prostor v jiném systému pro správu kontejnerů – byla kritická. Můj pohled okamžitě padl na Dockera. Za prvé, tato služba si získává na popularitě, a proto stále více poskytovatelů poskytuje hotová řešení s její předinstalací; za druhé, existuje centralizované úložiště obrázků, odkud si můžete službu stáhnout a spustit pomocí jednoho příkazu v terminálu. Napadla mě myšlenka, že by takový projekt už měl existovat a usilovně jsem hledal. Ale většina projektů, které jsem našel, byla buď příliš těžkopádná (museli jste vytvořit kontejner pro trvalé ukládání dat a kontejner s aplikací spustit několikrát s různými parametry), nebo bez rozumné dokumentace, nebo úplně opuštěná. Nenašel jsem nic přijatelného , začal jsem pracovat na vašem projektu. Čekaly nás bezesné noci studování dokumentace, psaní kódu a ladění, ale nakonec moje služba spatřila světlo světa a začala zářit všemi barvami monochromatického LED panelu routeru. Takže tě žádám o lásku a přízeň - Docker-OpenVPN. Dokonce mě napadlo i logo (nahoře, před střihem), ale neposuzujte to striktně, protože nejsem designér (už) Při realizaci tohoto projektu jsem upřednostnil rychlost nasazení, minimum nastavení a přijatelnou úroveň zabezpečení. Pokusem a omylem jsem našel optimální rovnováhu těchto kritérií, ale na některých místech jsem musel obětovat rychlost nasazení kvůli bezpečnosti a musel jsem platit za přenositelnost s minimálním nastavením: v aktuální konfiguraci kontejner jednou vytvořený na jednom serveru nelze přenést a spustit na jiném. Například všechny klientské a serverové certifikáty jsou generovány při spuštění služby a to bude trvat asi 2 sekundy. Generování souboru Hellman Defi však muselo být zohledněno v době sestavení: vytváří se během sestavení obrazu dockeru a může trvat až 10 minut. Opravdu bych si přál získat bezpečnostní audit takového řešení od respektované komunity.

Spusťte

Ke spuštění služby potřebujeme několik věcí:

  1. Server: fyzický nebo virtuální. Teoreticky je možné spustit v režimu docker-in-docker, ale tuto možnost jsem nijak rozsáhle netestoval;
  2. Vlastně Docker. Mnoho poskytovatelů hostingu poskytuje hotová řešení s Dockerem na palubě;
  3. Veřejná IP adresa.

Pokud jsou všechny podrobnosti na místě, pak vše, co musíme udělat, je spustit následující příkaz v konzole vašeho serveru:

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ý čtenář si mohl všimnout, že IP adresa serveru je určena automaticky pomocí ipify.org. Pokud to z nějakého důvodu nefunguje, můžete adresu zadat ručně. Pokud byly všechny předchozí kroky dokončeny správně, měli bychom v konzole vidět něco podobného:

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!

Jsme blízko cíle: teď musíme kopírovat example.com (ve vašem případě to bude adresa vašeho serveru) a vložte ji do adresního řádku vašeho prohlížeče. Po stisknutí klávesy Enter se stáhne soubor client.ovpn a samotný http server zmizí v zapomnění. Pokud máte o tomto řešení pochybnosti, můžete použít následující trik: spusťte předchozí příkaz a přidejte příznaky zp a heslo. Nyní, pokud vygenerovaný odkaz vložíte do okna prohlížeče, obdržíte zip archiv s heslem, jakmile budete mít konfigurační soubor klienta, můžete použít libovolného vhodného klienta. Používám Tunnelblick pro Mac.

Video tutoriál

Toto video tutoriál obsahuje podrobné pokyny pro nasazení služby na DigitalOcean.

PS Pokud považujete tento projekt za užitečný, dejte mu hvězdičku na GitHubu, rozklikněte jej a řekněte to svým přátelům. Přispěvatelé a bezpečnostní audity jsou také široce vítáni.PPS Pokud tento článek skončí na Habrovi, pak plánuji napsat další o tom, jak jsem spustil docker-in-docker a docker-in-docker-in-docker, proč jsem to udělal a co z toho vzešlo.
EDIT1:

  1. Opravené chyby v publikaci,
  2. V reakci na komentáře jsem se rozhodl vložit tuto informaci sem: pro práci s iptables je potřeba příznak —privileged

EDIT2:

  1. Vylepšený příkaz pro spuštění obrazu: nyní nevyžaduje příznak –privileged
  2. Přidán odkaz na video průvodce v ruském jazyce: youtu.be/A8zvrHsT9A0

Zdroj: www.habr.com

Přidat komentář