Starta OpenVPN i Docker pÄ 2 sekunder

Hej, Habr-folk! Har ni nÄgonsin stött pÄ en situation dÀr ni verkligen skulle vilja förflytta er virtuellt till en annan stad, ett annat land eller till och med en annan kontinent? Den hÀr behovet uppstÄr ganska ofta för mig, dÀrför har möjligheten att ha en egen VPN-server som kan startas var som helst pÄ bara nÄgra sekunder varit ganska akut. I den hÀr artikeln vill jag berÀtta om mitt projekt, som jag kom pÄ nÀr jag letade efter en fÀrdig lösning, i det hÀr fallet en docker-image, som skulle göra det möjligt att snabbt fÄ igÄng en OpenVPN-server med minimal konfiguration och en acceptabel sÀkerhetsnivÄ.

Starta OpenVPN i Docker pÄ 2 sekunder

Bakgrund

Möjligheten att köra tjĂ€nsten pĂ„ vilken maskin som helst: vare sig det Ă€r en fysisk server, en virtuell privat server, eller till och med ett containerutrymme inom ett annat containerhanteringssystem — var kritiskt viktig. Jag föll omedelbart för Docker. För det första ökar populariteten för den hĂ€r tjĂ€nsten, vilket innebĂ€r att fler och fler tjĂ€nsteleverantörer erbjuder fĂ€rdiga lösningar med dess förinstallation; för det andra — det finns ett centralt lagringsutrymme för images dĂ€r man kan ladda ner och starta tjĂ€nsten med ett enda kommando i terminalen. Tanken att ett liknande projekt redan borde finnas hade förföljt mig, och jag letade envist. Men de flesta projekten jag fann var antingen för klumpiga (man behövde skapa en container för permanent datalagring och starta containern med applikationen flera gĂ„nger med olika parametrar), eller saknade anstĂ€ndig dokumentation, eller helt enkelt var övergivna. Efter att inte ha hittat nĂ„got acceptabelt började jag arbeta pĂ„ mitt projekt. Framför mig lĂ„g sömnlösa nĂ€tter med att studera dokumentation, skriva kod och debugga, men slutligen sĂ„g min tjĂ€nst dagens ljus och lyste med alla fĂ€rger av en monokrom LED-panel pĂ„ routern. SĂ„, lĂ„t mig gĂ€rna presentera — Docker-OpenVPN. Jag har till och med skapat en logotyp (ovan, före stycket), men var inte hĂ„rd mot den, eftersom jag inte Ă€r designer (Ă€n). NĂ€r jag realiserade det hĂ€r projektet lade jag fokus pĂ„ snabb distribution, minimala instĂ€llningar och en acceptabel sĂ€kerhetsnivĂ„. Genom trial and error hittade jag den optimala balansen mellan dessa kriterier, Ă€ven om jag pĂ„ vissa stĂ€llen var tvungen att offra hastigheten för sĂ€kerheten, och för att ha minimala instĂ€llningar fick jag ge upp portabiliteten: i den aktuella konfigurationen kan en container som skapats pĂ„ en server inte flyttas och startas pĂ„ en annan. Till exempel genereras alla klient- och servercertifikat vid tjĂ€nstens start och detta tar cirka 2 sekunder. Dock var jag tvungen att flytta genereringen av Diffie-Hellman-filen till byggtiden: den skapas under bygget av Docker-bilden och kan ta upp till 10 minuter. Jag skulle vĂ€ldigt gĂ€rna vilja fĂ„ en sĂ€kerhetsgranskning av en sĂ„dan lösning frĂ„n det högt respekterade communityt.

Launch

För att starta tjÀnsten behöver vi ett par saker:

  1. Server: fysisk eller virtuell. Teoretiskt kan det köras i Docker-in-Docker-lÀge, men jag har inte genomfört omfattande tester av det alternativet;
  2. Egentligen Docker. MÄnga webbhotell erbjuder fÀrdiga lösningar med Docker "ombord";
  3. En offentlig IP-adress.

Om alla uppgifter Àr pÄ plats ÄterstÄr det bara för oss att köra följande kommando i konsolen 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

Den uppmÀrksamma lÀsaren kan ha lagt mÀrke till att serverns IP-adress automatiskt bestÀms med hjÀlp av ipify.org. Om detta av nÄgon anledning inte fungerar kan adressen anges manuellt. Om alla föregÄende steg har genomförts korrekt bör vi se nÄgot liknande i konsolen:

Sun Jun  9 08:56:11 2019 Initialiseringssekvens slutförd
Sun Jun  9 08:56:12 2019 Client.ovpn-fil har genererats
Sun Jun  9 08:56:12 2019 Konfigurera servern har startats, ladda ner din client.ovpn-konfiguration pÄ http://example.com/
Sun Jun  9 08:56:12 2019 OBS: Efter att du har laddat ner din klientkonfiguration kommer HTTP-servern att stÀngas av!

Vi Ă€r nĂ€ra mĂ„let: nu mĂ„ste vi kopiera example.com (i ditt fall blir det adressen till din server) och klistra in den i webblĂ€sarens adressfĂ€lt. NĂ€r du trycker pĂ„ Enter kommer client.ovpn-filen att laddas ner, och sjĂ€lva http-servern kommer att försvinna. Om detta förslag kĂ€nns tveksamt kan du anvĂ€nda följande knep: kör det föregĂ„ende kommandot och lĂ€gg till flaggor zp och lösenord. Nu, om du klistrar in den genererade lĂ€nken i webblĂ€sarfönstret – fĂ„r du en zip-fil med lösenord. NĂ€r du har filen med klientkonfigurationen kan du anvĂ€nda vilken lĂ€mplig klient som helst. Jag anvĂ€nder Tunnelblick för Mac.

Videotutorial

Denna videotutorial innehÄller en detaljerad instruktion för utplacering av tjÀnsten pÄ DigitalOcean.

Spela video
P.S. Om du tycker att detta projekt Àr anvÀndbart, vÀnligen ge det en stjÀrna pÄ GitHub, gör en fork och berÀtta för vÀnner. Bidragsgivare och sÀkerhetsgranskningar vÀlkomnas ocksÄ.P.P.S. Om denna artikel hamnar pÄ Habr, planerar jag att skriva nÀsta om hur jag körde Docker-in-Docker och Docker-in-Docker-in-Docker, varför jag gjorde det och vad som kom ut av det.
EDIT1:
  1. Jag har rÀttat till felen i publiceringen,
  2. I svar pĂ„ kommentarerna beslutade jag att ta med denna information hĂ€r: flaggan —privileged behövs för att arbeta med iptables

EDIT2:

  1. Jag har förbĂ€ttrat kommandot för att starta bilden: nu krĂ€ver det inte flaggan —privileged
  2. Lagt till lÀnk till rysksprÄkig videoguide: youtu.be/A8zvrHsT9A0

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster