Spouštíme OpenVPN v Dockeru za 2 sekundy

Ahoj, Habráci! Setkali jste se někdy se situací, kdy byste si přáli virtuálně se přenést do jiného města, země nebo dokonce na jiný kontinent? Tato potřeba mě oslovuje poměrně často, a proto jsem měl velmi silnou potřebu mít svůj VPN server, který bych mohl během pár sekund spustit kdekoli. V tomto článku bych rád prozradil svůj projekt, který jsem si vymyslel, když jsem hledal hotové řešení, v tomto případě docker image, který by umožnil rychlé spuštění OpenVPN serveru s minimem nastavení a přijatelnou úrovní zabezpečení.

Spouštíme OpenVPN v Dockeru za 2 sekundy

Pozadí

Možnost spouštět službu na jakémkoli stroji: ať už fyzickém serveru, virtuálním privátním serveru, nebo dokonce v kontejnerovém prostoru v rámci jiného systému řízení kontejnerů — byla kriticky důležitá. Okamžitě mě zaujal Docker. Zaprvé, tato služba nabírá na popularitě, a tudíž čím dál víc poskytovatelů nabízí hotová řešení s jeho předinstalací; zadruhé — existuje centrální úložiště image, odkud si můžete stáhnout a spustit službu jedním příkazem v terminálu. Měla jsem myšlenku, že takový projekt už by měl existovat, a usilovně jsem hledal. Ale většina projektů, které jsem našel — byly buď příliš komplikované (bylo potřeba vytvářet kontejner pro trvalé uchování dat a několikrát spouštět kontejner s aplikací s různými parametry), nebo bez smysluplné dokumentace, nebo dokonce zcela opuštěné. Když jsem nenašel nic přijatelným, začal jsem pracovat na svém projektu. Předem byly bezesné noci zkoumání dokumentace, psaní kódu a ladění, ale nakonec můj služba uzřela světlo a rozjasnila se všemi barvami monochromatické LED panelu směrovače. Takže, prosím, vítejte — Docker-OpenVPN. Vymyslel jsem dokonce logo (nahoře, před katem), ale nehodnoťte ho příliš přísně, neboť nejsem designér (už). Když jsem realizoval tento projekt, kladl jsem důraz na rychlost nasazení, minimum nastavení a přijatelnou úroveň zabezpečení. Metodou pokusů a omylů jsem našel optimální rovnováhu těchto kritérií, pravda, někde bylo nutné obětovat rychlost nasazení pro bezpečnost, a za minimum nastavení jsem musel zaplatit přenositelností: v aktuální konfiguraci jednou vytvořený kontejner na jednom serveru nelze přesunout a spustit na jiném. Například všechny klientské a serverové certifikáty se generují při spuštění služby a to zabere kolem 2 sekund. Nicméně, generaci souboru DeFi Hellmana bylo nutné přesunout do doby sestavení: ten se vytváří během sestavení Docker obrazu a může trvat až 10 minut. Velmi bych si přál získat audit zabezpečení podobného řešení od váženého společenství.

Spuštění

K provozu služby potřebujeme několik věcí:

  1. Server: fyzický nebo virtuální. Teoreticky je možné spouštět v módu docker-in-docker, ale tuto možnost jsem neprováděl v širokém testování;
  2. Samotný Docker. Mnozí poskytovatelé hostingu nabízejí hotová řešení s Dockerem „na palubě“;
  3. Veřejná IP adresa.

Pokud jsou všechny údaje v pořádku, zbývá nám spustit následující příkaz v konzoli 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 se určuje automaticky pomocí ipify.org. Pokud to z nějakého důvodu nefunguje, lze adresu zadat ručně. Pokud byly všechny předchozí kroky provedeny správně, měli bychom v konzoli 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 your client config, http server will be shut down!

Jsme blízko cíle: nyní musíme zkopírovat example.com (ve vašem případě to bude adresa vašeho serveru) a vložte ji do adresního řádku prohlížeče. Jakmile stisknete Enter, soubor client.ovpn se stáhne a samotný http server zmizí. Pokud to vzbudí pochyby, můžete vyzkoušet následující trik: spusťte předchozí příkaz a přidejte příznaky zp a heslo. Nyní, pokud vložíte vygenerovaný odkaz do okna prohlížeče — získáte zip archiv s heslem. Jakmile máte soubor s klientskou konfigurací, můžete použít jakýkoliv vhodný klient. Já používám Tunnelblick pro Mac.

Video tutoriál

Tento video tutoriál obsahuje podrobný návod k nasazení služby na DigitalOcean.

Přehrát video
P.S. Pokud považujete tento projekt za užitečný, prosím, dejte mu hvězdičku na GitHubu, udělejte fork a řekněte o něm přátelům. Přispěvatelé a kontroly bezpečnosti jsou také široce vítáni.P.P.S. Pokud se tento článek dostane na Habr, plánuji napsat další o tom, jak jsem spouštěl docker-v-docker a docker-v-docker-v-docker, proč jsem to dělal a co z toho vzešlo.
EDIT1:
  1. Opravil jsem chyby v publikaci,
  2. Odpovídajícím na komentáře jsem se rozhodl tuto informaci zde vyčlenit: příznak —privileged je potřebný pro práci s iptables

EDIT2:

  1. Vylepšil jsem příkaz pro spuštění obrazu: nyní nevyžaduje příznak —privileged
  2. Přidal jsem odkaz na rusky mluvící video návod: youtu.be/A8zvrHsT9A0

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster