Start OpenVPN in Docker in 2 seconden

Hallo, Habr-gemeenschap! Hebben jullie ooit de situatie meegemaakt waarin je graag virtueel naar een andere stad, land of continent wilt verhuizen? Ik heb die behoefte best vaak, daarom is de mogelijkheid om mijn eigen VPN-server te hebben, die ik binnen enkele seconden overal kan opzetten, erg belangrijk voor mij. In dit artikel wil ik praten over mijn project, dat ik heb bedacht toen ik op zoek was naar een kant-en-klare oplossing, in dit geval een Docker-image dat het mogelijk maakte om snel een OpenVPN-server op te zetten met minimale instellingen en een acceptabel niveau van beveiliging.

Start OpenVPN in Docker in 2 seconden

Achtergrond

De mogelijkheid om de service op elke machine te draaien: of het nu een fysieke server, een virtuele privéserver of zelfs een containeromgeving binnen een ander containersysteem is, was van cruciaal belang. Mijn aandacht viel onmiddellijk op Docker. Ten eerste wint deze service aan populariteit, wat betekent dat steeds meer providers kant-en-klare oplossingen met voorgeïnstalleerde software aanbieden; ten tweede is er een gecentraliseerde opslagplaats voor images, waar je de service kunt downloaden en met één commando in de terminal kunt opstarten. De gedachte dat zo'n project al zou moeten bestaan, hield me bezig en ik zocht hard. Maar de meeste projecten die ik vond, waren ofwel te omslachtig (je moest een container creëren voor permanente opslag en de container meerdere keren opstarten met verschillende parameters), of waren zonder redelijke documentatie, of gewoon in de vergetelheid geraakt. Toen ik niets geschikts kon vinden, begon ik aan mijn project. Voor me lagen slapeloze nachten van het bestuderen van documentatie, coderen en debuggen, maar uiteindelijk kwam mijn service tot leven en lichtte op in alle kleuren van het monochrome LED-paneel van de router. Dus, ik vraag je, verwelkom mijn project — Docker-OpenVPN. Ik heb zelfs een logo bedacht (hierboven, vóór de cat), maar oordeel er niet te hard over, want ik ben geen ontwerper (meer). Toen ik dit project realiseerde, stelde ik snelheid van uitrol, minimalisatie van instellingen en een acceptabel niveau van veiligheid voorop. Door middel van proberen en falen vond ik de optimale balans tussen deze criteria, hoewel ik soms snelheid van uitrol moest opofferen voor veiligheid, en de minimuminstellingen kwamen met de prijs van draagbaarheid: in de huidige configuratie kan een eenmaal aangemaakt container op één server niet worden overgebracht en gestart op een andere. Bijvoorbeeld, alle klant- en servercertificaten worden gegenereerd bij het starten van de service en dat duurt ongeveer 2 seconden. Echter, de generatie van het Diffie-Hellman bestand moest naar de build-tijd worden verplaatst: het wordt aangemaakt tijdens het bouwen van het docker image en kan tot 10 minuten duren. Ik zou heel graag een veiligheidsaudit van een dergelijke oplossing willen ontvangen van het zeer gewaardeerde publiek.

Start

Om de service te starten hebben we een paar dingen nodig:

  1. Server: fysiek of virtueel. Theoretisch kan het draaien in docker-in-docker, maar ik heb deze optie niet op grote schaal getest;
  2. Eigenlijk Docker. Veel hostingproviders bieden kant-en-klare oplossingen met Docker "aan boord";
  3. Publiek IP-adres.

Als alle gegevens aanwezig zijn, kunnen we de volgende opdracht in de console van uw server uitvoeren:

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

De oplettende lezer heeft misschien opgemerkt dat het IP-adres van de server automatisch wordt bepaald met behulp van ipify.org. Als dit om welke reden dan ook niet werkt, kan het adres handmatig worden opgegeven. Als alle vorige stappen correct zijn uitgevoerd, zouden we iets dergelijks in de console moeten zien:

Zon Jun  9 08:56:11 2019 Initialisatie Voltooid
Zon Jun  9 08:56:12 2019 Client.ovpn bestand is gegenereerd
Zon Jun  9 08:56:12 2019 Config server gestart, download uw client.ovpn config op http://example.com/
Zon Jun  9 08:56:12 2019 OPMERKING: Nadat u uw clientconfiguratie heeft gedownload, wordt de http-server afgesloten!

We zijn dichtbij ons doel: nu moeten we kopiëren example.com (in uw geval is dit het adres van uw server) en plak het in de adresbalk van uw browser. Nadat u op Enter drukt, wordt het client.ovpn-bestand gedownload en gaat de http-server de vergetelheid in. Als deze oplossing twijfel oproept, kunt u de volgende truc gebruiken: Voer het vorige commando uit en voeg de vlaggen toe. zp en wachtwoord. Nu, als u de gegenereerde link in het browservenster plakt, krijgt u een zip-archief met het wachtwoord. Wanneer u een bestand met de clientconfiguratie heeft, kunt u elke geschikte client gebruiken. Ik gebruik Tunnelblick voor Mac.

Videotutorial

Deze videotutorial bevat een gedetailleerde handleiding voor het opzetten van de service op DigitalOcean.

Video afspelen
P.S. Als u dit project nuttig vindt, geef het dan alsjeblieft een ster op GitHub, fork het en vertel het aan uw vrienden. Bijdragers en veiligheidsaudits worden ook zeer gewaardeerd.P.P.S. Als dit artikel op Habr komt, ben ik van plan de volgende te schrijven over hoe ik docker-in-docker en docker-in-docker-in-docker heb uitgevoerd, waarom ik dit deed en wat daaruit kwam.
EDIT1:
  1. Ik heb fouten in de publicatie gecorrigeerd,
  2. In antwoord op de opmerkingen heb ik besloten deze informatie hier te plaatsen: de vlag —privileged is nodig voor het werken met iptables.

EDIT2:

  1. Ik heb het commando voor het starten van de afbeelding verbeterd: nu is de vlag —privileged niet meer nodig.
  2. Ik heb een link toegevoegd naar de Nederlandstalige videotutorial: youtu.be/A8zvrHsT9A0

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster