Start OpenVPN i Docker på 2 sekunder

Hej Khabrovsk beboere! Har du nogensinde stødt på en situation, hvor du virkelig ønskede at blive virtuelt transporteret til en anden by, et andet land eller et andet kontinent? Jeg har dette behov ret ofte, så muligheden for at have min egen VPN-server, som kan lanceres hvor som helst, på et par sekunder, var ret presserende. I denne artikel vil jeg fortælle om mit projekt, som jeg udtænkte, da jeg var leder efter en færdiglavet løsning, i dette tilfælde Docker et billede, der giver dig mulighed for hurtigt at opsætte en OpenVPN-server med et minimum af indstillinger og et acceptabelt sikkerhedsniveau.

Start OpenVPN i Docker på 2 sekunder

forhistorie

Evnen til at køre tjenesten på en hvilken som helst maskine - det være sig en fysisk server eller en virtuel privat server eller endda en containerplads inde i et andet containerstyringssystem - var kritisk. Mit blik faldt straks på Docker. For det første er denne service ved at vinde popularitet, og derfor leverer flere og flere udbydere færdige løsninger med sin præinstallation; for det andet er der en central lagring af billeder, hvorfra du kan downloade og køre tjenesten ved hjælp af én kommando i terminalen. Tanken om, at sådan et projekt allerede skulle eksistere, kom til mig, og jeg søgte hårdt. Men de fleste af de projekter, jeg fandt, var enten for besværlige (du skulle oprette en container til permanent datalagring og starte containeren med applikationen flere gange med forskellige parametre), eller uden fornuftig dokumentation, eller helt opgivet. Ikke fundet noget acceptabelt , jeg begyndte at arbejde på dit projekt. Der var søvnløse nætter forud for at studere dokumentation, skrive kode og fejlfinde, men i sidste ende så min service dagens lys og begyndte at funkle med alle farverne på routerens monokrome LED-panel. Så jeg beder dig om at elske og favorisere - Docker-OpenVPN. Jeg kom selv med et logo (ovenfor, før klippet), men dømme det ikke strengt, for jeg er ikke designer (længere) Da jeg implementerede dette projekt, prioriterede jeg implementeringshastigheden, minimum indstillinger og et acceptabelt sikkerhedsniveau. Gennem forsøg og fejl fandt jeg den optimale balance mellem disse kriterier, men nogle steder var jeg nødt til at ofre implementeringshastigheden af ​​hensyn til sikkerheden, og jeg skulle betale for portabilitet for et minimum af indstillinger: i den nuværende konfiguration, en container, når den først er oprettet på én server, kan ikke overføres og startes på en anden. For eksempel genereres alle klient- og servercertifikater, når tjenesten starter, og det vil tage omkring 2 sekunder. Genereringen af ​​Hellman Defi-filen skulle dog tages med i byggetiden: den oprettes under opbygningen af ​​docker-billedet og kan vare op til 10 minutter. Jeg vil rigtig gerne modtage en sikkerhedsrevision af sådan en løsning fra det respekterede samfund.

Запуск

For at starte tjenesten har vi brug for flere ting:

  1. Server: fysisk eller virtuel. Det er teoretisk muligt at køre i docker-in-docker-tilstand, men jeg har ikke testet denne mulighed grundigt;
  2. Faktisk Docker. Mange hostingudbydere leverer færdige løsninger med Docker ombord;
  3. Offentlig IP-adresse.

Hvis alle detaljerne er på plads, så skal vi bare køre følgende kommando i konsollen på din 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

En opmærksom læser har måske bemærket, at serverens IP-adresse bestemmes automatisk vha ipify.org. Hvis dette af en eller anden grund ikke virker, så kan du angive adressen manuelt. Hvis alle de foregående trin blev udført korrekt, så skulle vi se noget lignende i konsollen:

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!

Vi er tæt på målet: nu skal vi kopiere example.com (i dit tilfælde vil det være adressen på din server) og indsæt den i adresselinjen i din browser. Når du har trykket på Enter, downloades filen client.ovpn, og selve http-serveren forsvinder i glemmebogen. Hvis denne løsning er i tvivl, kan du bruge følgende trick: kør den forrige kommando og tilføj flag zp og adgangskode. Nu, hvis du indsætter det genererede link i et browservindue, vil du modtage et zip-arkiv med en adgangskode. Når du har en klientkonfigurationsfil, kan du bruge enhver passende klient. Jeg bruger Tunnelblick til Mac.

Video tutorial

Denne videovejledning indeholder detaljerede instruktioner til implementering af tjenesten på DigitalOcean.

PS Hvis du finder dette projekt nyttigt, så giv det en stjerne på GitHub, forkast det og fortæl det til dine venner. Bidragydere og sikkerhedsrevisioner er også meget velkomne.PPS Hvis denne artikel ender på Habr, så planlægger jeg at skrive den næste om, hvordan jeg lancerede docker-in-docker og docker-in-docker-in-docker, hvorfor jeg gjorde det, og hvad der kom ud af det.
EDIT1:

  1. Rettede fejl i publikationen,
  2. Som svar på kommentarer besluttede jeg at placere denne information her: det —privilegerede flag er nødvendigt for at arbejde med iptables

EDIT2:

  1. Forbedret billedstartkommandoen: nu kræver den ikke flaget –privilegeret
  2. Tilføjet et link til den russisksprogede videoguide: youtu.be/A8zvrHsT9A0

Kilde: www.habr.com

Tilføj en kommentar