Hej, Habrowdere! Har du nogensinde oplevet en situation, hvor du virkelig ønskede at kunne teleportere dig selv til en anden by, et andet land eller en anden kontinent? Jeg har ofte denne nødvendighed, så muligheden for at have min egen VPN-server, som jeg kan starte hvor som helst på få sekunder, har været meget presserende. I denne artikel vil jeg fortælle om mit projekt, som jeg kom på, da jeg søgte efter en klar løsning, i dette tilfælde en Docker-billede, der ville gøre det muligt hurtigt at opsætte en OpenVPN-server med minimum af indstillinger og et acceptabelt sikkerhedsniveau.
Background
Muligheden for at køre tjenesten på enhver maskine: hvad enten det er en fysisk server, en virtuel privat server, eller faktisk containerområde inden for et andet containersystem — var kritisk vigtig. Mit blik faldt straks på Docker. For det første, denne tjeneste vinder popularitet, så flere og flere udbydere tilbyder færdige løsninger med dens forudinstallering; for det andet — der er et centreret lager af billeder, hvorfra man kan downloade og køre tjenesten med én kommando i terminalen. Tanken om, at et sådant projekt allerede burde eksistere, besøgte mig, og jeg søgte ihærdigt. Men de fleste projekter, jeg fandt, var enten for klodsede (man skulle oprette en container til permanent datalagring og køre containeren med applikationen flere gange med forskellige parametre), eller uden nogen ordentlig dokumentation, eller helt forladte. Efter ikke at have fundet noget acceptabelt, begyndte jeg at arbejde på mit projekt. Forude var søvnløse nætter med at studere dokumentationen, skrive kode og fejlfinde, men i sidste ende så min tjeneste dagens lys og lyste i alle farverne på den monokrome LED-panel router. Så, jeg beder om jeres kærlighed og omtanke — . Jeg har endda designet et logo (ophængt over, før brudlinjen), men døm ikke hårdt, da jeg ikke er designer (allerede).Da jeg implementerede dette projekt, havde jeg fokus på hurtig deploying, minimum indstillinger og et acceptabelt niveau af sikkerhed. Gennem forsøg og fejl fandt jeg den optimale balance mellem disse kriterier, men nogle steder måtte jeg ofre hastigheden på udrulningen for sikkerhed, og for minimumsindstillinger måtte jeg betale med portabilitet: i den nuværende konfiguration kan en container, der er oprettet én gang på én server, ikke overføres og køres på en anden. For eksempel genereres alle klient- og serversertifikater ved opstart af tjenesten, og dette tager cirka 2 sekunder. Dog blev genereringen af Defi Hellman-filen nødt til at flyttes til build-tiden: den oprettes under opbygning af docker-billedet og kan tage op til 10 minutter. Jeg ville virkelig gerne modtage en sikkerhedsaudit af en sådan løsning fra det højt agtede fællesskab.
Kørsel
For at starte tjenesten har vi brug for flere ting:
- Server: fysisk eller virtuel. Teoretisk set kan man køre i docker-in-docker tilstand, men jeg har ikke udført omfattende test af denne mulighed;
- Eigen Docker. Mange hostingudbydere tilbyder færdige løsninger med Docker 'ombord';
- Offentlig IP-adresse.
Hvis alle oplysninger er i orden, skal vi derefter 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/openvpnDen opmærksomme læser kunne have bemærket, at IP-adressen for serveren bestemmes automatisk ved hjælp af ipify.org. Hvis dette ikke virker af en eller anden grund, kan man angive adressen manuelt. Hvis alle tidligere trin er udført korrekt, bør vi se noget liggende i konsollen:
Sun Jun 9 08:56:11 2019 Initialiseringssekvens afsluttet
Sun Jun 9 08:56:12 2019 Client.ovpn-fil er blevet genereret
Sun Jun 9 08:56:12 2019 Konfigurér serveren startet, download din client.ovpn-konfiguration på http://example.com/
Sun Jun 9 08:56:12 2019 NOTE: Efter du har downloadet din client-konfiguration, vil http-serveren blive lukket ned!Vi er tæt på målet: nu skal vi kopiere (i dit tilfælde vil det være adressen på din server) og indsætte det i browserens adresselinje. Når du trykker på Enter, downloader klient.ovpn filen, og HTTP-serveren går i dvale. Hvis denne løsning giver anledning til tvivl, kan du bruge følgende trick: kør den forrige kommando og tilføj flags zp og adgangskoden. Nu, hvis du indsætter det genererede link i browservinduet — får du en zip-arkiv med adgangskoden. Når du har en fil med klientkonfiguration, kan du bruge enhver passende klient. Jeg bruger Tunnelblick til Mac.
Video tutorial
Denne video tutorial indeholder en detaljeret vejledning til at implementere tjenesten på DigitalOcean.

EDIT1:
- Har rettet fejl i offentliggørelsen,
- I besvarelsen af kommentarer besluttede jeg at tage denne information her: flaget —privileged er nødvendigt for at arbejde med iptables
EDIT2:
- Forbedrede kommandoen til at starte billedet: nu kræver den ikke flaget —privileged
- Tilføjede et link til den russisktalende video vejledning:
Kilde: habr.com
