Start OpenVPN i Docker på 2 sekunder

Hei, innbyggere i Khabrovsk! Har du noen gang vært borti en situasjon der du virkelig ønsker å bli praktisk talt transportert til en annen by, land eller kontinent? Jeg har dette behovet ganske ofte, så muligheten til å ha min egen VPN-server, som kan startes hvor som helst, i løpet av et par sekunder, var ganske presserende. I denne artikkelen vil jeg snakke om prosjektet mitt, som jeg unnfanget da jeg var ser etter en ferdig løsning, i dette tilfellet Docker et bilde som lar deg raskt sette opp en OpenVPN-server, med et minimum av innstillinger og et akseptabelt sikkerhetsnivå.

Start OpenVPN i Docker på 2 sekunder

forhistorie

Muligheten til å kjøre tjenesten på en hvilken som helst maskin - det være seg en fysisk server, eller en virtuell privat server, eller til og med en containerplass inne i et annet containerstyringssystem - var kritisk. Blikket mitt falt umiddelbart på Docker. For det første blir denne tjenesten stadig mer populær, og derfor leverer flere og flere leverandører ferdige løsninger med sin forhåndsinstallasjon; for det andre er det en sentralisert lagring av bilder hvorfra du kan laste ned og kjøre tjenesten ved å bruke én kommando i terminalen. Ideen om at et slikt prosjekt allerede burde eksistere kom til meg og jeg søkte hardt. Men de fleste prosjektene jeg fant var enten for tungvinte (du måtte lage en beholder for permanent datalagring og starte beholderen med applikasjonen flere ganger med forskjellige parametere), eller uten fornuftig dokumentasjon, eller helt forlatt. Fant ikke noe akseptabelt , jeg begynte å jobbe med prosjektet ditt. Det var søvnløse netter i forkant av å studere dokumentasjon, skrive kode og feilsøke, men til slutt så tjenesten min dagens lys og begynte å gnistre av alle fargene på ruterens monokrome LED-panel. Så jeg ber deg om å elske og favorisere - Docker-OpenVPN. Jeg kom til og med opp med en logo (over, før kuttet), men ikke døm den strengt, for jeg er ikke designer (lenger) Da jeg implementerte dette prosjektet prioriterte jeg utrullingshastigheten, minimum innstillinger og et akseptabelt sikkerhetsnivå. Gjennom prøving og feiling fant jeg den optimale balansen mellom disse kriteriene, men noen steder måtte jeg ofre distribusjonshastighet for sikkerhets skyld, og jeg måtte betale for portabilitet for et minimum av innstillinger: i den nåværende konfigurasjonen, en container som er opprettet på en server, kan ikke overføres og startes på en annen. For eksempel genereres alle klient- og serversertifikater når tjenesten starter, og dette vil ta ca. 2 sekunder. Genereringen av Hellman Defi-filen måtte imidlertid tas med i byggetiden: den opprettes under byggingen av docker-bildet og kan vare i opptil 10 minutter. Jeg vil veldig gjerne motta en sikkerhetsrevisjon av en slik løsning fra det respekterte samfunnet.

lanseringen

For å starte tjenesten trenger vi flere ting:

  1. Server: fysisk eller virtuell. Det er teoretisk mulig å kjøre i docker-innen-docker-modus, men jeg har ikke testet dette alternativet grundig;
  2. Faktisk Docker. Mange hostingleverandører leverer ferdige løsninger med Docker om bord;
  3. Offentlig IP-adresse.

Hvis alle detaljene er på plass, er alt vi trenger å gjøre å kjøre følgende kommando i konsollen på serveren din:

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 oppmerksom leser kan ha lagt merke til at serverens IP-adresse bestemmes automatisk ved hjelp av ipify.org. Hvis dette av en eller annen grunn ikke fungerer, kan du spesifisere adressen manuelt. Hvis alle de foregående trinnene ble fullført riktig, bør vi se noe 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 nær målet: nå må vi kopiere example.com (i ditt tilfelle vil det være adressen til serveren din) og lim den inn i adressefeltet til nettleseren din. Etter at du har trykket på Enter, vil client.ovpn-filen lastes ned, og selve http-serveren forsvinner i glemmeboken. Hvis denne løsningen er i tvil, kan du bruke følgende triks: kjør forrige kommando og legg til flagg zp og passord. Nå, hvis du limer inn den genererte lenken i et nettleservindu, vil du motta et zip-arkiv med et passord. Når du har en klientkonfigurasjonsfil, kan du bruke hvilken som helst passende klient. Jeg bruker Tunnelblick for Mac.

Videoopplæring

Denne videoopplæringen inneholder detaljerte instruksjoner for distribusjon av tjenesten på DigitalOcean.

PS Hvis du synes dette prosjektet er nyttig, vennligst gi det en stjerne på GitHub, fortell det og fortell det til vennene dine. Bidragsytere og sikkerhetsrevisjoner er også hjertelig velkommen.PPS Hvis denne artikkelen havner på Habr, så planlegger jeg å skrive den neste om hvordan jeg lanserte docker-in-docker og docker-in-docker-in-docker, hvorfor jeg gjorde det og hva som kom ut av det.
EDIT1:

  1. Rettet feil i publikasjonen,
  2. Som svar på kommentarer, bestemte jeg meg for å legge denne informasjonen her: det —privilegerte flagget er nødvendig for å jobbe med iptables

EDIT2:

  1. Forbedret bildelanseringskommandoen: nå krever den ikke flagget –privilegert
  2. La til en lenke til den russiskspråklige videoguiden: youtu.be/A8zvrHsT9A0

Kilde: www.habr.com

Legg til en kommentar