Avviamo OpenVPN in Docker in 2 secondi

Ciao, amici di Habr! Vi è mai capitato di desiderare di poter virtualmente trasferirvi in un'altra città, paese o continente? A me succede piuttosto spesso, quindi la possibilità di avere un server VPN da avviare ovunque in pochi secondi è molto importante. In questo articolo voglio parlare del mio progetto, che ho pensato mentre cercavo una soluzione pronta, in questo caso un'immagine Docker che permettesse di creare rapidamente un server OpenVPN, con un minimo di configurazione e un livello di sicurezza accettabile.

Avviamo OpenVPN in Docker in 2 secondi

Contesto

La possibilità di eseguire il servizio su qualsiasi macchina, sia essa un server fisico, un server privato virtuale, o persino uno spazio container all'interno di un altro sistema di gestione dei container, era fondamentale. La mia attenzione si è subito rivolta a Docker. In primo luogo, questo servizio sta guadagnando popolarità, il che significa che sempre più fornitori offrono soluzioni pronte con il suo pre-setup; in secondo luogo, c'è un repository centralizzato di immagini, da cui è possibile scaricare e avviare il servizio con un solo comando nel terminale. L'idea che un progetto simile dovesse già esistere mi ha assalito e ho cercato con determinazione. Tuttavia, la maggior parte dei progetti che trovavo erano o troppo ingombranti (era necessario creare un container per la memorizzazione persistente dei dati e avviare più volte il container con l'applicazione con parametri diversi), oppure senza una documentazione decente, o addirittura abbandonati. Non trovando nulla di accettabile, ho iniziato a lavorare sul mio progetto. Davanti a me ci sono state notti insonni di studio della documentazione, scrittura di codice e debug, ma alla fine il mio servizio ha visto la luce e ha brillato con tutti i colori del pannello LED monocromatico del router. Quindi, vi presento il mio progetto — Docker-OpenVPN. Ho persino inventato un logo (qui sopra, prima del taglio), ma non giudicatelo troppo severamente, poiché non sono un designer (ancora). Quando ho realizzato questo progetto, ho messo al primo posto la velocità di distribuzione, il minimo di configurazioni e un livello di sicurezza accettabile. Attraverso tentativi ed errori ho trovato un equilibrio ottimale tra questi criteri, anche se in alcuni casi ho dovuto sacrificare la velocità di distribuzione per la sicurezza, e per il minimo di configurazioni ho dovuto pagare con la portabilità: nell'attuale configurazione, un container creato una volta 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ò richiede circa 2 secondi. Tuttavia, la generazione del file di Diffie-Hellman è stata spostata nel tempo di build: viene creata durante la costruzione dell'immagine Docker e può richiedere fino a 10 minuti. Mi piacerebbe molto ricevere una valutazione della sicurezza di una soluzione del genere dalla comunità rispettata.

Avvio

Per avviare il servizio abbiamo bisogno di alcune cose:

  1. Server: fisico o virtuale. Teoricamente, è possibile eseguire in modalità docker-in-docker, ma non ho testato ampiamente questa opzione;
  2. Proprio Docker. Molti provider di hosting offrono soluzioni pronte con Docker "a bordo";
  3. Indirizzo IP pubblico.

Se tutte le credenziali sono a posto, dobbiamo solo 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

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

Sun Jun  9 08:56:11 2019 Sequenza di inizializzazione completata
Sun Jun  9 08:56:12 2019 Il file Client.ovpn è stato generato
Sun Jun  9 08:56:12 2019 Server di configurazione avviato, scarica la tua configurazione client.ovpn su http://example.com/
Sun Jun  9 08:56:12 2019 NOTA: Dopo aver scaricato la configurazione del client, il server http verrà arrestato!

Siamo vicini all'obiettivo: ora dobbiamo copiare example.com (nel tuo caso sarà l'indirizzo del tuo server) e incollalo nella barra degli indirizzi del browser. Dopo aver premuto Invio, il file client.ovpn verrà scaricato e il server http scomparirà. Se questa soluzione suscita dubbi, puoi utilizzare il seguente trucco: esegui il comando precedente e aggiungi i flag zp e la password. Ora, se incolli il link generato nella finestra del browser, otterrai un archivio zip con la password. Quando hai il file di configurazione del client, puoi utilizzare qualsiasi client compatibile. Io utilizzo Tunnelblick per Mac.

Tutorial video

Questo tutorial video contiene istruzioni dettagliate su come implementare il servizio su DigitalOcean.

Riproduci video
P.S. Se ritieni che questo progetto sia utile, ti preghiamo di mettergli una stella su GitHub, fare un fork e raccontare ai tuoi amici. Anche i contributi e le revisioni della sicurezza sono molto apprezzati.P.P.S. Se questo articolo arriverà su Habr, ho intenzione di scrivere il prossimo su come ho eseguito Docker-in-Docker e Docker-in-Docker-in-Docker, perché l'ho fatto e cosa ne è uscito.
EDIT1:
  1. Ho corretto gli errori nella pubblicazione.
  2. Rispondendo ai commenti, ho deciso di portare queste informazioni qui: il flag —privileged è necessario per lavorare con iptables

EDIT2:

  1. Ho migliorato il comando per avviare l'immagine: ora non richiede il flag —privileged
  2. Ho aggiunto un link a una guida video in russo: youtu.be/A8zvrHsT9A0

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster