OpenVPN indítása Dockerben 2 másodperc alatt

Helló, Habr-rajongók! Volt-e már olyan helyzet, amikor nagyon is eggyel más városba, országba vagy akár egy másik kontinensre szeretett volna eltávolodni? Én elég gyakran találkozom ezzel a szükséglettel, ezért az a lehetőség, hogy legyen egy saját VPN szerverem, amit bárhol, pár másodperc alatt elindíthatok, rendkívül fontos volt számomra. Ebben a cikkben szeretném bemutatni a projektet, amelyet akkor terveztem, amikor kész megoldást kerestem, jelen esetben egy Docker képet, amely lehetővé tette az OpenVPN szerver gyors felállítását minimális beállítással és elfogadható biztonsági szinttel.

OpenVPN indítása Dockerben 2 másodperc alatt

Háttér

A szolgáltatás bármilyen gépen való indításának lehetősége: legyen az fizikális szerver, virtuális magánszerver vagy akár egy másik konténerkezelő rendszer belsejében lévő konténeres tér — kritikus fontosságú volt. Azonnal a Dockerra esett a választásom. Először is, ez a szolgáltatás egyre népszerűbbé válik, ezért egyre több szolgáltató kínál kész megoldásokat előtelepítve; másodsorban — van egy központosított képgyűjtő, ahonnan egy parancs segítségével letöltheted és elindíthatod a szolgáltatást a terminálon. Az a gondolat, hogy egy hasonló projekt már léteznie kellene, sokszor átfutott az agyamon, és makacsul kerestem. De a legtöbb projekt, amit találtam — vagy túl bonyolult volt (konténert kellett létrehozni az állandó adatok tárolására, és többször kellett indítani a konténert a különböző paraméterekkel), vagy nem volt megfelelő dokumentációval ellátva, vagy teljesen elhagyottnak tűnt. Miután nem találtam semmit, ami megfelelne, elkezdtem dolgozni a projektemen. Előttem álltak az álmatlan éjszakák a dokumentáció tanulmányozásával, a kód írásával és a hibakereséssel, de végül a szolgáltatásom napvilágot látott, és minden színében megcsillant a router monokrom LED-panelei. Tehát, fogadjátok szeretettel — Docker-OpenVPN. Még a logót is kitaláltam (feljebb, a kat előtt), de ne bíráljátok túlságosan, mert nem vagyok dizájner (már). Amikor ezt a projektet megvalósítottam, a telepítési sebesség, a minimális beállítások és a megfelelő szintű biztonság állt a középpontban. Kísérletezés és hibázás módszerével találtam meg e kritériumok optimális egyensúlyát, igaz, néhol a telepítési sebesség rovására kellett áldoznom a biztonság kedvéért, míg a minimális beállításokért a hordozhatósággal kellett fizetnem: a jelenlegi konfiguráció szerint egyszer létrehozott konténert egy szerveren nem lehet áthelyezni és egy másikon elindítani. Például, az összes kliens- és szerver tanúsítvány a szolgáltatás indításakor generálódik, és ehhez körülbelül 2 másodperc szükséges. Azonban a Difi-Hellman fájl generálását a build időbe kellett helyeznem: ez a Docker kép építése közben jön létre, és akár 10 percig is tarthat. Nagyon szeretném, ha a tisztelt közösségtől egy ilyen megoldás biztonsági auditját kapnám.

Indítás

A szolgáltatás indításához néhány dologra van szükség:

  1. Szerver: fizikai vagy virtuális. Elméletileg futtatható Docker-in-Docker módban, de nem végeztem elméleti tesztelést e lehetőség mellett;
  2. Magának a Dockernak. Sok hosting szolgáltató kínál kész megoldásokat Dockerral "fedélzeten";
  3. Nyilvános IP-cím.

Ha minden adat a helyén van, akkor a következő parancsot kell futtatnunk a szerverünk konzoljában:

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

A figyelmes olvasó észrevehette, hogy a szerver IP címe automatikusan kerül meghatározásra a ipify.org. Ha valamilyen okból ez nem működik, akkor az IP címet kézzel is megadhatjuk. Ha az összes korábbi lépést helyesen hajtottuk végre, akkor a konzolban valami hasonlót kell látnunk:

Sun Jun  9 08:56:11 2019 Inicializálási szakasz befejezve
Sun Jun  9 08:56:12 2019 Client.ovpn fájl generálva
Sun Jun  9 08:56:12 2019 Config server indult, töltse le a client.ovpn konfigurációját a http://example.com/
Sun Jun  9 08:56:12 2019 MEGJEGYZÉS: Miután letöltötte a kliens konfigurációját, a http szerver le lesz állítva!

Közel vagyunk a célhoz: most másolnunk kell example.com (az ön esetében a szerverének címe) és kattintson a böngésző címsorába. Miután megnyomta az Enter-t, a client.ovpn fájl letöltődik, és a http szerver eltűnik. Ha ez a megoldás kétségeket kelt, próbálkozhat a következő trükkel: indítsa el az előző parancsot, és adjon hozzá zászlókat zp és jelszó. Most, ha a generált hivatkozást beilleszti a böngésző ablakába — egy jelszóval védett zip archívumot kap. Ha megvan a kliens konfigurációs fájlja, bármely megfelelő klienst használhat. Én a Tunnelblicket használom Mac-en.

Videó útmutató

Ez a videó útmutató részletes utasításokat tartalmaz a szolgáltatás kiépítéséről a DigitalOcean-on.

Videó lejátszása
P.S. Ha ezt a projektet hasznosnak találja, kérjük, adjon neki csillagot a GitHub-on, fork-olja, és meséljen róla barátainak. A hozzájárulásokat és a biztonsági auditokat szívesen fogadjuk.P.P.S. Ha ez a cikk megjelenik a Habr-on, tervezem, hogy a következőt írom arról, hogy hogyan indítottam el a dockert dockeren és a dockeren belüli dockert, hogy miért csináltam, és mi lett belőle.
EDIT1:
  1. Kijavítottam a publikációban lévő hibákat,
  2. A kommentekre válaszolva ezt az információt ide emeltem: a —privileged zászló szükséges az iptables használatához

EDIT2:

  1. Javítottam a képzés indító parancsát: most már nem szükséges a —privileged zászló
  2. Hozzáadtam egy hivatkozást orosz nyelvű videó útmutatóra: youtu.be/A8zvrHsT9A0

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster