Server VPN su Google Compute Engine con OpenVPN


13

Sto cercando di utilizzare il server Google Compute Engine come server VPN per tutto il mio traffico (vivo in Russia, abbiamo alcuni problemi con la censura qui).

C'è un mini tutorial sulla VPN su GCE , ma riguarda la rete tra 2 server all'interno di GCE e non con OpenVPN.

Ho fatto tutti i passaggi di un altro tutorial, sull'impostazione di VPN con OpenVPN su Debian , posso collegarmi alla VPN dal client, ma poi non riesco ad aprire le connessioni (non riesco nemmeno a eseguire il ping di Google). Sul server posso eseguire il ping e scaricare tutto come al solito.

Ho una VPN su Linode con la stessa configurazione e funziona benissimo. Quindi il problema è nel routing della rete GCE o nelle regole del firewall.

Ho provato molte varianti ma nulla funziona. Per favore, guarda le impostazioni e dimmi cosa devo cambiare.

// le righe di configurazione sono state rimosse perché il problema è stato risolto //


C'è un modo per abilitare l'inoltro IP? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin

@AlecIstomin, sì, è fatto. Ho una VPN su Linode con la stessa configurazione e funziona benissimo. Quindi il problema riguarda il routing della rete GCE o le regole del firewall.
OZ_

Forse chiedi supporto a GCE? Sembra il tipo di cosa a cui potrebbero rispondere rapidamente.
Bill Weiss,

Il prezzo di @BillWeiss per i loro piani di supporto parte da $ 150 / al mese, ma se questo problema non verrà risolto in settimana, penso che li pagherò. Inoltre proverò a trovare qualcuno su oDesk per risolverlo e poi scriverò tutorial nel mio blog.
OZ_

odesk.com/jobs/~01c4b1438a64f31fdd - non esitare ad applicare, se puoi aiutare, ragazzi.
OZ_

Risposte:


7

Innanzitutto, grazie a @Shivox per la sua risposta .

Ed ecco la rapida procedura:

  • Vi consiglio di creare una rete supplementare (vedi "Reti" tab ") delle preferenze di rete in, aggiungere regole che consentano di: tcp: 22 (se non esiste), tcp: 9700, tcp:. 17619 . 17619 qui è variabile - il cambiamento a qualsiasi porta che ti piace (l'intervallo è 9075-65534). Hai solo bisogno di 3 regole e 2 percorsi predefiniti, nient'altro.
  • Vai su "Crea istanza di Compute Engine", fai clic su "Mostra opzioni avanzate", consenti il ​​port forwarding, seleziona la posizione del server.
  • Ora (quando hai selezionato la posizione), aggiungi un IP statico al server.
  • Seleziona l'immagine di Ubuntu 14.04 (esattamente questa versione).
  • Crea istanza
  • Connetti tramite SSH (il modo più semplice - usa lo strumento nel browser dal pannello GCE)
  • sudo su
  • apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && add-apt-repository -y ppa:pritunl && apt-get update && apt-get -y install pritunl
  • Nel browser aperto https://instance_ip:9700
  • Per domande su DB, fai clic su "Salva"
  • Nella finestra di accesso, utilizzare pritunlcome nome utente e password
  • Ora cambia nome utente e password dell'utente amministratore
  • Aggiungi organizzazione, quindi 2 utenti (per desktop e dispositivi mobili)
  • Fai clic su "Aggiungi server" nella scheda "Server"
  • Utilizzare il numero di porta dal primo passaggio ( 17619 come esempio) e il protocollo tcp.
  • Collega l'organizzazione al server
  • Avvia il server
  • Nella scheda "Utenti" scarica le chiavi per entrambi gli utenti (archivi tar con file ovpn all'interno).

Uso Viscosity per OS X e OpenVPN connect per iOS come client. In Viscosità, attiva l'opzione "Invia tutto il traffico tramite connessione VPN" nella scheda "Rete".


Solo per notare: Google Cloud Platform offre una prova gratuita con $ 300 per 60 giorni.
OZ_

1
Le istruzioni per installare Pritunl su Ubuntu 14.04 sono cambiate: github.com/pritunl/pritunl#ubuntu-trusty
motobói,

6

Puoi risolvere il problema di non essere in grado di navigare sul Web attraverso la VPN nonostante sia in grado di eseguire il ping, traceroute ... in uno dei due modi seguenti:

Innanzitutto, è possibile utilizzare il protocollo TCP anziché UDP, modificando "proto udp" in "proto tcp" nei file conf client e server.

In secondo luogo, è possibile utilizzare il dispositivo tap anziché tun, modificando "dev tun" in "dev tap" nei file conf client e server.

Non sono sicuro di quale sia il problema, sembra che sia un problema da parte di Google.


1
Tu sei il mio eroe! Grazie mille! Passare a TCP ha fatto il trucco. Espanderò il "how-to" completo in una risposta separata. Quella sensazione quando il sogno da molto tempo diventa realtà ... Grazie!
OZ_

4

Ricorda che Google VPC sta rilasciando pacchetti che hanno source_ipun IP diverso da quello interno di una VM con IP esterno.

Questo documento https://cloud.google.com/compute/docs/vpc/advanced-vpc afferma:

La rete VPC riscrive l'intestazione IP per dichiarare l'indirizzo IP esterno dell'istanza come origine. Se l'istanza non ha un indirizzo IP esterno, la chiamata non è consentita e la rete VPC rilascia il pacchetto senza informare il mittente.

Quindi, se openVPN sta semplicemente inoltrando i pacchetti dall'altra rete, i pacchetti verso il pubblico interno verranno eliminati in quanto source_ipnon corrispondono a nessun IP interno della VM esistente. Per questo motivo devi NAT i pacchetti che escono dalla tua rete locale, ad es. Sul tuo nodo VPN.

Chain POSTROUTING (policy ACCEPT)
target      prot opt source              destination         
MASQUERADE  all  --  192.168.0.0/16      !192.168.0.0/16

"Pritunl" menzionato nella risposta OZ_ funziona, perché configura automaticamente il NAT.


3

Questa non è davvero una risposta, ma il sito non mi ha permesso di aggiungerlo come commento alla tua domanda.

Tuttavia, ho quasi la stessa identica configurazione che hai descritto sopra (non ho configurato dnsmaq sul server difficile)

Sfortunatamente, la VPN non funziona come previsto. Posso risolvere un indirizzo, eseguire il ping di alcuni host Internet e persino tracciare una traccia completa mentre sono connesso alla VPN. Tuttavia, quando apro il browser e accedo a un sito, la connessione è molto lenta. Non so cosa possa influenzare la connessione, ma è davvero uno strano problema.

Forse qualcuno di Google può aiutarci a sapere cosa sta succedendo.

PS 1. Come altri hanno suggerito prima, puoi verificare se l'IP Forwarding è abilitato? Per me, l'unico modo per garantire che il valore di net.ipv4.ip_forward sia stato ripristinato correttamente dopo un riavvio è stato dopo aver usato una regola personalizzata su /etc/sysctl.d

Ad esempio, è possibile aggiungere la regola utilizzando il comando seguente:

$ sudo echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/90-useroverrides.conf

PS 2. Se l'inoltro funziona per te, puoi testare una route di traccia verso un host esterno mentre sei connesso alla VPN ?. L'output che ho ottenuto quando lo faccio è un po 'strano (perché ci sono più hop sullo stesso IP ????):

$ sudo traceroute www.yahoo.com -T -p 80 -N 1 -z 0.5 -q 1
traceroute to www.yahoo.com (98.139.183.24), 30 hops max, 60 byte packets
 1  209.85.241.26 (209.85.241.26)  0.764 ms
 2  209.85.241.34 (209.85.241.34)  0.668 ms
 3  209.85.241.26 (209.85.241.26)  0.966 ms
 4  209.85.241.36 (209.85.241.36)  0.702 ms
 5  209.85.241.28 (209.85.241.28)  0.865 ms
 6  209.85.241.36 (209.85.241.36)  0.642 ms
 7  209.85.241.26 (209.85.241.26)  0.921 ms
 8  209.85.241.28 (209.85.241.28)  18.837 ms
 9  72.14.238.107 (72.14.238.107)  13.378 ms
10  72.14.237.131 (72.14.237.131)  38.275 ms
11  209.85.254.131 (209.85.254.131)  13.349 ms
12  *
13  ae-8.pat1.bfz.yahoo.com (216.115.101.231)  44.903 ms
14  ae-4.msr1.bf1.yahoo.com (216.115.100.25)  45.323 ms
15  xe-10-3-1.clr1-a-gdc.bf1.yahoo.com (98.139.232.101)  47.382 ms
16  et18-25.fab6-1-sat.bf1.yahoo.com (98.139.128.103)  45.793 ms
17  po-13.bas1-7-prd.bf1.yahoo.com (98.139.129.209)  41.143 ms
18  ir2.fp.vip.bf1.yahoo.com (98.139.183.24)  42.451 ms

PS 3. L'unica cosa che sembra funzionare correttamente è che la VPN sta usando l'IP esterno dal mio host per accedere a Internet

$ sudo curl --interface tun0 checkip.dyndns.org
<html><head><title>Current IP Check</title></head><body>Current IP Address: 107.178.XXX.XXX</body></html>

@OZ_ Sono contento di sentire che ora puoi eseguire il ping e traceroute mentre sei connesso alla VPN. Ora, puoi pubblicare il risultato di uno dei tuoi traceroute ?. Sono curioso delle prime righe dell'output perché sembra che il pacchetto sia instradato in loop per almeno i primi 8 salti (non sono un esperto di rete, però)
Mario,

mi dispiace, eccolo qui: gist.github.com/jamm/028ae858a03e40495740 . E sì, sembra strano. Forse abbiamo bisogno di un percorso specifico.
OZ_


1

È necessario abilitare l'inoltro IP per l'istanza della VM in google cloud, altrimenti i pacchetti non raggiungeranno la VM. Nota, questo è separato da net.ipv4.ip_forward = 1quello che puoi impostare nella tua VM.

L'inoltro IP può essere impostato solo una volta prima di creare una macchina virtuale e non può essere modificato in seguito. Per abilitarlo per una nuova macchina virtuale, fare clic su Management, security, disks, networking, sole tenancy: inserisci qui la descrizione dell'immagine

Quindi, nella Networkingscheda, fai clic su Network Interfacee imposta IP Forwarding su ON:

inserisci qui la descrizione dell'immagine


0

Devi aggiungere una regola che consenta il traffico per OpenVPN stesso:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT

esiste come regola n. 4
OZ_

0

Informazioni sulla rete.

1) Abilitare tutto il traffico dalla sottorete OpenVPN (ad es. 10.8.0.0/24) sulla console

2) Ti consiglio vivamente di aggiungere Masquerade alla tua rete

firewall-cmd --zone=trusted --add-masquerade --permanent
firewall-cmd --reload-all

3) Non dimenticare di abilitare il routing dei pacchetti nel kernel

a) una volta

 echo 1 > /proc/sys/net/ipv4/ip_forward

b) per sempre in /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.