Avvia OpenVPN in Docker in 2 secondi

Ciao, residenti di Khabrovsk! Hai mai riscontrato una situazione in cui volevi davvero essere trasportato virtualmente in un'altra città, paese o continente? Ho questa esigenza abbastanza spesso, quindi l'opportunità di avere un mio server VPN, che può essere lanciato ovunque, in un paio di secondi, era piuttosto urgente. In questo articolo voglio parlare del mio progetto, che ho concepito quando ero alla ricerca di una soluzione già pronta, in questo caso Docker un'immagine che consentisse di configurare rapidamente un server OpenVPN, con un minimo di impostazioni e un livello di sicurezza accettabile.

Avvia OpenVPN in Docker in 2 secondi

Sfondo

La capacità di eseguire il servizio su qualsiasi macchina, sia essa un server fisico, un server privato virtuale o anche uno spazio container all'interno di un altro sistema di gestione dei container, era fondamentale. Il mio sguardo si è subito posato su Docker. In primo luogo, questo servizio sta guadagnando popolarità e quindi sempre più fornitori forniscono soluzioni già pronte con la sua preinstallazione; in secondo luogo, esiste un archivio centralizzato di immagini da cui è possibile scaricare ed eseguire il servizio utilizzando un comando nel terminale. Mi è venuta l’idea che un progetto del genere dovesse già esistere e ho cercato a lungo. Ma la maggior parte dei progetti che ho trovato erano o troppo macchinosi (dovevi creare un contenitore per l'archiviazione permanente dei dati e lanciare il contenitore con l'applicazione più volte con parametri diversi), o senza una documentazione sensata, o completamente abbandonati. , ho iniziato a lavorare sul tuo progetto. Ci sono state notti insonni prima di studiare documentazione, scrivere codice e eseguire il debug, ma alla fine il mio servizio ha visto la luce e ha iniziato a brillare con tutti i colori del pannello LED monocromatico del router. Quindi, ti chiedo di amare e favorire... Docker-OpenVPN. Mi è venuto in mente anche un logo (sopra, prima del taglio), ma non giudicatelo in modo rigoroso, perché non sono (più) un designer. Quando ho implementato questo progetto, ho dato priorità alla velocità di implementazione, un minimo di impostazioni e un livello di sicurezza accettabile. Attraverso tentativi ed errori, ho trovato l'equilibrio ottimale di questi criteri, tuttavia, in alcuni punti ho dovuto sacrificare la velocità di distribuzione per motivi di sicurezza e ho dovuto pagare per la portabilità per un minimo di impostazioni: nella configurazione attuale, a il contenitore una volta creato su un server non può essere trasferito e avviato su un altro. Ad esempio, tutti i certificati client e server vengono generati all'avvio del servizio e ciò richiederà circa 2 secondi. Tuttavia, la generazione del file Hellman Defi ha dovuto avvenire in fase di compilazione: viene creato durante la compilazione dell'immagine docker e può durare fino a 10 minuti. Mi piacerebbe davvero ricevere un controllo di sicurezza di tale soluzione da parte della comunità rispettata.

Запуск

Per avviare il servizio abbiamo bisogno di diverse cose:

  1. Server: fisico o virtuale. In teoria è possibile eseguire la modalità docker-in-docker, ma non ho testato approfonditamente questa opzione;
  2. In realtà Docker. Molti provider di hosting forniscono soluzioni già pronte con Docker a bordo;
  3. Indirizzo IP pubblico.

Se tutti i dettagli sono a posto, tutto ciò che dobbiamo fare è eseguire il seguente comando nella console del tuo 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

Un lettore attento potrebbe aver notato che l'indirizzo IP del server viene determinato automaticamente utilizzando ipify.org. Se per qualche motivo questo non funziona, puoi specificare l'indirizzo manualmente. Se tutti i passaggi precedenti sono stati completati correttamente, dovremmo vedere qualcosa di simile nella console:

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!

Siamo vicini all’obiettivo: ora bisogna copiare example.com (nel tuo caso sarà l'indirizzo del tuo server) e incollalo nella barra degli indirizzi del tuo browser. Dopo aver premuto Invio, il file client.ovpn verrà scaricato e il server http stesso scomparirà nell'oblio. Se questa soluzione è in dubbio, puoi utilizzare il seguente trucco: esegui il comando precedente e aggiungi flag zp e password. Ora, se incolli il collegamento generato in una finestra del browser, riceverai un archivio zip con una password.Una volta ottenuto un file di configurazione del client, puoi utilizzare qualsiasi client adatto. Utilizzo Tunnelblick per Mac.

Esercitazione video

Questo tutorial video contiene istruzioni dettagliate per l'implementazione del servizio su DigitalOcean.

PS Se trovi utile questo progetto, assegnagli una stella su GitHub, effettua un fork e dillo ai tuoi amici. Anche i contributori e gli audit di sicurezza sono ampiamente accolti.PPS Se questo articolo finisce su Habr, ho intenzione di scrivere il prossimo su come ho lanciato docker-in-docker e docker-in-docker-in-docker, perché l'ho fatto e cosa ne è venuto fuori.
EDIT1:

  1. Corretti errori nella pubblicazione,
  2. Rispondendo ai commenti, ho deciso di inserire qui questa informazione: il flag —privileged è necessario per funzionare con iptables

EDIT2:

  1. Migliorato il comando di lancio dell'immagine: ora non richiede il flag –privileged
  2. Aggiunto un collegamento alla videoguida in lingua russa: youtu.be/A8zvrHsT9A0

Fonte: habr.com

Aggiungi un commento