Avviamo OpenVPN in Docker in 2 secondi

Ciao, hobroviani! Vi è mai capitato di desiderare di spostarvi virtualmente in un'altra città, paese o continente? A me capita abbastanza spesso, quindi la possibilità di avere un server VPN che posso avviare ovunque, in pochi secondi, era molto importante. In questo articolo voglio parlarvi del mio progetto, che ho pensato quando cercavo una soluzione pronta, in questo caso un'immagine Docker, che permettesse di avviare rapidamente un server OpenVPN, con un minimo di configurazioni e un livello di sicurezza accettabile.

Avviamo OpenVPN in Docker in 2 secondi

Antefatti

La possibilità di avviare il servizio su qualsiasi macchina: sia un server fisico, un server privato virtuale o, addirittura, uno spazio container all’interno di un altro sistema di gestione dei container, era di vitale importanza. La mia attenzione si è subito concentrata su Docker. Innanzitutto, questo servizio sta guadagnando popolarità, e quindi sempre più fornitori offrono soluzioni pronte con il suo pre-installato; in secondo luogo — c'è un repository centralizzato di immagini, da cui è possibile scaricare e avviare il servizio con un solo comando nel terminale. Pensavo che un progetto simile dovesse già esistere, e ho cercato incessantemente. Ma la maggior parte dei progetti che trovavo erano o troppo complessi (era necessario creare un container per la memorizzazione permanente dei dati e avviare più volte il container con l'applicazione con parametri diversi), o senza documentazione valida, oppure totalmente abbandonati. Non trovando nulla di accettabile, ho iniziato a lavorare al mio progetto. Davanti a me c’erano notti insonni passate a studiare la documentazione, scrivere codice e fare debugging, 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 — Docker-OpenVPN. Ho persino creato un logo (sopra, prima del taglio), ma non giudicatelo troppo severamente, in quanto 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 prove ed errori ho trovato un equilibrio ottimale tra questi criteri; tuttavia, in alcuni casi ho dovuto sacrificare la velocità di distribuzione per motivi di sicurezza, mentre per il minimo di configurazioni ho dovuto rinunciare alla portabilità: nell'attuale configurazione, un container 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 questo richiede circa 2 secondi. Tuttavia, la generazione del file Diffie-Hellman ha dovuto essere spostata nel tempo di build: viene creato durante la costruzione dell'immagine Docker e può richiedere fino a 10 minuti. Mi piacerebbe molto ottenere un audit della sicurezza di una soluzione simile dalla rispettabile comunità.

Avvio

Per avviare il servizio abbiamo bisogno di alcune cose:

  1. Server: fisico o virtuale. Teoricamente, è possibile avviare in modalità Docker-in-Docker, ma non ho effettuato test su larga scala di questa opzione;
  2. Docker stesso. Molti provider di hosting offrono soluzioni pronte con Docker "a bordo";
  3. Indirizzo IP pubblico.

Se tutti i requisiti sono a posto, ci resta solo da eseguire il seguente comando nella console del 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 avrà notato che l'indirizzo IP del server viene determinato automaticamente tramite ipify.org. Se per qualche motivo ciò 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 tua configurazione client, il server HTTP verrà spento!

Siamo vicini all'obiettivo: ora dobbiamo copiare example.com (nel vostro caso sarà l'indirizzo del vostro server) e incollarlo nella barra degli indirizzi del browser. Dopo aver premuto Invio, il file client.ovpn verrà scaricato, e il server http scomparirà. Se questa soluzione solleva dei dubbi, è possibile utilizzare il seguente trucco: eseguire il comando precedente ed aggiungere i flag zp e la password. Ora, se incollate il link generato nella finestra del browser, otterrete un archivio zip con la password. Quando avrete il file di configurazione del client, potrete utilizzare qualsiasi client appropriato. Io utilizzo Tunnelblick per Mac.

Video tutorial

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

Guarda il video
P.S. Se ritenete utile questo progetto, per favore mettete una stella su GitHub, fate un fork e raccontate ai vostri amici. I contributi e le audit di sicurezza sono anche molto apprezzati.P.P.S. Se questo articolo finisse su Habr, intendo scrivere il prossimo su come ho eseguito docker-in-docker e docker-in-docker-in-docker, per quale motivo l'ho fatto e che ne è uscito.
EDIT1:
  1. Ho corretto 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 di avvio dell'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