Start OpenVPN in Docker in 2 seconden

Hallo, inwoners van Khabrovsk! Ben je ooit een situatie tegengekomen waarin je echt virtueel vervoerd wilde worden naar een andere stad, land of continent? Ik heb deze behoefte nogal vaak, dus de mogelijkheid om mijn eigen VPN-server te hebben, die overal binnen een paar seconden kan worden gelanceerd, was behoorlijk urgent. In dit artikel wil ik het hebben over mijn project, dat ik bedacht toen ik op zoek naar een kant-en-klare oplossing, in dit geval Docker een image waarmee je snel een OpenVPN-server kunt opzetten, met een minimum aan instellingen en een acceptabel beveiligingsniveau.

Start OpenVPN in Docker in 2 seconden

prehistorie

De mogelijkheid om de service op elke machine uit te voeren – of het nu een fysieke server of een virtuele privéserver was, of zelfs een containerruimte binnen een ander containerbeheersysteem – was van cruciaal belang. Mijn blik viel meteen op Docker. Ten eerste wint deze dienst aan populariteit en daarom bieden steeds meer aanbieders kant-en-klare oplossingen met pre-installatie; ten tweede is er een gecentraliseerde opslag van afbeeldingen van waaruit u de service kunt downloaden en uitvoeren met één opdracht in de terminal. Het idee dat zo’n project al zou moeten bestaan, kwam bij mij op en ik heb hard gezocht. Maar de meeste projecten die ik tegenkwam, waren ofwel te omslachtig (je moest een container maken voor permanente gegevensopslag en de container meerdere keren met de applicatie starten met verschillende parameters), of zonder goede documentatie, of volledig verlaten. , Ik ben aan je project begonnen. Er volgden slapeloze nachten voordat ik documentatie bestudeerde, code schreef en fouten opspoorde, maar uiteindelijk zag mijn dienst het levenslicht en begon te schitteren met alle kleuren van het monochrome LED-paneel van de router. Dus ik vraag je om lief te hebben en te begunstigen - Docker-OpenVPN. Ik heb zelfs een logo bedacht (hierboven, vóór het knippen), maar oordeel er niet strikt over, omdat ik geen ontwerper (meer) ben. Toen ik dit project implementeerde, gaf ik prioriteit aan de snelheid van implementatie, minimaal instellingen en een acceptabel beveiligingsniveau. Met vallen en opstaan ​​vond ik de optimale balans tussen deze criteria, maar op sommige plaatsen moest ik de implementatiesnelheid opofferen omwille van de veiligheid, en voor het minimum aan instellingen moest ik betalen voor draagbaarheid: in de huidige configuratie is een container die eenmaal op de ene server is gemaakt, kan niet worden overgedragen en gelanceerd op een andere. Alle client- en servercertificaten worden bijvoorbeeld gegenereerd wanneer de service start en dit duurt ongeveer 2 seconden. Het genereren van het Hellman Defi-bestand moest echter in de bouwtijd worden opgenomen: het wordt gemaakt tijdens het bouwen van de docker-image en kan maximaal 10 minuten duren. Ik zou heel graag een beveiligingsaudit van een dergelijke oplossing willen ontvangen van de gerespecteerde gemeenschap.

lancering

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

  1. Server: fysiek of virtueel. Het is theoretisch mogelijk om in de docker-in-docker-modus te draaien, maar ik heb deze optie niet uitgebreid getest;
  2. Eigenlijk Docker. Veel hostingproviders bieden kant-en-klare oplossingen met Docker aan boord;
  3. Openbaar IP-adres.

Als alle details aanwezig zijn, hoeven we alleen maar de volgende opdracht uit te voeren in de console van uw server:

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

Een oplettende lezer heeft misschien gemerkt dat het IP-adres van de server automatisch wordt bepaald ipify.org. Als dit om de een of andere reden niet werkt, kunt u het adres handmatig opgeven. Als alle voorgaande stappen correct zijn voltooid, zouden we iets soortgelijks in de console moeten zien:

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!

We zijn dicht bij het doel: nu moeten we kopiëren example.com (in uw geval zal dit het adres van uw server zijn) en plak dit in de adresbalk van uw browser. Nadat u op Enter hebt gedrukt, wordt het bestand client.ovpn gedownload en verdwijnt de http-server zelf in de vergetelheid. Als u twijfelt over deze oplossing, kunt u de volgende truc gebruiken: voer de vorige opdracht uit en voeg vlaggen toe zp en wachtwoord. Als u nu de gegenereerde link in een browservenster plakt, ontvangt u een zip-archief met een wachtwoord. Zodra u een clientconfiguratiebestand heeft, kunt u elke geschikte client gebruiken. Ik gebruik Tunnelblick voor Mac.

Video uitleg

Deze videotutorial bevat gedetailleerde instructies voor het implementeren van de service op DigitalOcean.

PS Als je dit project nuttig vindt, geef het dan een ster op GitHub, fork het en vertel het aan je vrienden. Bijdragers en beveiligingsaudits worden ook breed verwelkomd.PPS Als dit artikel op Habr terechtkomt, ben ik van plan het volgende te schrijven over hoe ik docker-in-docker en docker-in-docker-in-docker lanceerde, waarom ik het deed en wat eruit kwam.
EDIT1:

  1. Fouten in de publicatie gecorrigeerd,
  2. In reactie op opmerkingen besloot ik deze informatie hier te plaatsen: de vlag —privileged is nodig om met iptables te werken

EDIT2:

  1. Verbeterde opdracht voor het starten van afbeeldingen: nu is de vlag –privileged niet meer nodig
  2. Een link toegevoegd naar de Russischtalige videogids: youtu.be/A8zvrHsT9A0

Bron: www.habr.com

Voeg een reactie