VPN-Server auf Google Compute Engine mit OpenVPN


13

Ich versuche, den Google Compute Engine-Server als VPN-Server für meinen gesamten Datenverkehr zu verwenden (ich lebe in Russland, hier gibt es einige Probleme mit der Zensur).

Es gibt ein Mini-Tutorial über VPN in GCE , aber es handelt von einem Netzwerk zwischen zwei Servern in GCE und nicht von OpenVPN.

Ich habe alle Schritte von einem anderen Tutorial über das Einrichten von VPN mit OpenVPN unter Debian ausgeführt . Ich kann vom Client aus eine Verbindung zu VPN herstellen, aber dann kann ich keine Verbindungen öffnen (ich kann nicht einmal Google anpingen). Auf dem Server kann ich alles wie gewohnt pingen und herunterladen.

Ich habe VPN auf Linode mit dem gleichen Setup und es funktioniert gut. Das Problem liegt also im GCE-Netzwerkrouting oder in den Firewall-Regeln.

Ich habe viele Varianten ausprobiert, aber nichts funktioniert. Bitte sehen Sie sich die Einstellungen an und sagen Sie mir, was ich ändern soll.

// Konfigurationszeilen entfernt, da das Problem behoben ist //


Gibt es eine Möglichkeit, die IP-Weiterleitung zu aktivieren? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin

@ AlecIstomin, ja, es ist geschafft. Ich habe VPN auf Linode mit dem gleichen Setup und es funktioniert gut. Das Problem liegt also im GCE-Netzwerkrouting oder in den Firewall-Regeln.
Oz_

Fragen Sie vielleicht den GCE-Support? Dies scheint die Art von Dingen zu sein, die sie schnell beantworten könnten.
Bill Weiss

Der @ BillWeiss-Preis für ihre Support-Pläne beginnt bei 150 USD / Monat, aber wenn dieses Problem in der Woche nicht gelöst wird, werde ich sie wahrscheinlich bezahlen. Außerdem werde ich versuchen, jemanden auf oDesk zu finden, der das Problem behebt, und dann ein Tutorial in meinen Blog schreiben.
Oz_

odesk.com/jobs/~01c4b1438a64f31fdd - zögern Sie nicht, sich zu bewerben, wenn Sie helfen können, Jungs.
OZ_

Antworten:


7

Zunächst einmal vielen Dank an @Shivox für die Antwort .

Und hier ist die schnelle Anleitung:

  • Ich empfehle Sie , zusätzliches Netzwerk erstellen (siehe „Netzwerke“ Register ") Präferenzen Im Netzwerk hinzufügen so dass Regeln für: tcp: 22 (falls nicht vorhanden), tcp: 9700, tcp:. 17619 . 17619 hier variabel ist - ändert es zu einem Port, den Sie mögen (Bereich ist 9075-65534). Sie benötigen nur 3 Regeln und 2 Standardrouten, sonst nichts.
  • Gehen Sie zu "Create Compute Engine instance", klicken Sie auf "Show advanced options" (Erweiterte Optionen anzeigen), lassen Sie die Portweiterleitung zu und wählen Sie den Standort des Servers aus.
  • Fügen Sie nun (wenn Sie den Speicherort ausgewählt haben) dem Server eine statische IP hinzu.
  • Wähle Ubuntu 14.04 Image (genau diese Version).
  • Instanz erstellen
  • Verbindung über SSH (einfachste Methode - Verwenden Sie das In-Browser-Tool aus dem GCE-Panel)
  • 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
  • Im Browser öffnen https://instance_ip:9700
  • Bei Fragen zu DB klicken Sie auf "Speichern"
  • Verwenden Sie im Anmeldefenster pritunlals Benutzername und Passwort
  • Ändern Sie nun Benutzername und Passwort des Admin-Benutzers
  • Organisation hinzufügen, dann 2 Benutzer (für Desktop und Mobile)
  • Klicken Sie auf der Registerkarte "Server" auf "Server hinzufügen"
  • Verwenden Sie die Portnummer aus dem ersten Schritt ( 17619 als Beispiel) und das TCP-Protokoll.
  • Organisation an Server anhängen
  • Starten Sie den Server
  • Auf der Registerkarte "Benutzer" können Sie Schlüssel für beide Benutzer herunterladen (tar-Archive mit darin enthaltenen ovpn-Dateien).

Ich verwende Viscosity für OS X und OpenVPN Connect für iOS als Clients. Aktivieren Sie unter "Viskosität" auf der Registerkarte "Netzwerk" die Option "Gesamten Datenverkehr über VPN-Verbindung senden".


Nur zur Erinnerung: Google Cloud Platform bietet 60 Tage lang eine kostenlose Testversion mit 300 US-Dollar an.
OZ_

1
Die Anleitung zur Installation von Pritunl unter Ubuntu 14.04 wurde geändert: github.com/pritunl/pritunl#ubuntu-trusty
motobói

6

Sie können das Problem lösen, dass Sie nicht über das VPN im Internet surfen können, obwohl Sie Ping, Traceroute ... auf eine der beiden folgenden Arten ausführen können:

Erstens können Sie das TCP-Protokoll anstelle von UDP verwenden, indem Sie "proto udp" in "proto tcp" sowohl in Client- als auch in Serverkonf-Dateien ändern.

Zweitens können Sie tap device anstelle von tun verwenden, indem Sie "dev tun" in "dev tap" sowohl in Client- als auch in Serverkonf-Dateien ändern.

Ich bin mir nicht sicher, um welches Problem es sich handelt, aber es scheint ein Problem von Google zu sein.


1
Sie sind mein Held! Vielen Dank! Der Wechsel zu TCP hat den Trick gemacht. Ich werde das vollständige "How-to" in einer separaten Antwort erläutern. Dieses Gefühl, wenn ein langer Traum wahr wird ... Danke!
OZ_

4

Denken Sie daran, dass Google VPC Pakete verwirft, die source_ipkeine interne IP- Adresse einer VM mit externer IP- Adresse haben.

In diesem Dokument https://cloud.google.com/compute/docs/vpc/advanced-vpc heißt es:

Das VPC-Netzwerk schreibt den IP-Header neu, um die externe IP-Adresse der Instanz als Quelle zu deklarieren. Wenn die Instanz keine externe IP-Adresse hat, ist der Anruf nicht zulässig, und das VPC-Netzwerk verwirft das Paket, ohne den Absender zu informieren.

Wenn Ihr openVPN also nur Pakete vom anderen Netzwerk weiterleitet, werden die Pakete an public internal verworfen, da source_ipsie nicht mit der internen IP- Adresse einer vorhandenen VM übereinstimmen. Aus diesem Grund müssen Sie die Pakete NAT, die Ihr lokales Netzwerk verlassen, z. B. auf Ihrem VPN-Knoten.

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

Das in der OZ_-Antwort erwähnte "Pritunl" funktioniert, da es das NAT automatisch konfiguriert.


3

Dies ist keine wirkliche Antwort, aber auf der Website konnte ich sie nicht als Kommentar zu Ihrer Frage hinzufügen.

Trotzdem habe ich fast die gleiche Konfiguration, die Sie oben beschrieben haben (ich habe den DNSMAQ auf dem Server nicht hart konfiguriert)

Leider funktioniert das VPN nicht wie erwartet. Ich kann eine Adresse auflösen, einige Internet-Hosts anpingen und sogar eine vollständige Ablaufverfolgung durchführen, während ich mit dem VPN verbunden bin. Wenn ich jedoch den Browser öffne und zu einer Site navigiere, ist die Verbindung sehr langsam. Ich weiß nicht, was die Verbindung beeinflussen kann, aber es ist wirklich ein seltsames Problem.

Vielleicht kann uns jemand von Google helfen, zu wissen, was los ist.

PS 1. Können Sie, wie bereits von anderen vorgeschlagen, überprüfen, ob die IP-Weiterleitung aktiviert ist? Für mich war die einzige Möglichkeit, sicherzustellen, dass der Wert für net.ipv4.ip_forward nach einem Neustart ordnungsgemäß wiederhergestellt wurde, nachdem ich eine benutzerdefinierte Regel für /etc/sysctl.d verwendet hatte

Beispielsweise können Sie die Regel mit dem folgenden Befehl hinzufügen:

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

PS 2. Wenn die Weiterleitung für Sie funktioniert, können Sie eine Trace-Route zu einem externen Host testen, während Sie mit dem VPN verbunden sind? Die Ausgabe, die ich dabei erhalten habe, ist etwas seltsam (Warum gibt es mehrere Hops auf derselben 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. Das einzige, was richtig zu funktionieren scheint, ist das VPN, das die externe IP von meinem Host verwendet, um auf das Internet zuzugreifen

$ 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_ Freut mich zu hören, dass Sie jetzt Ping und Traceroute ausführen können, während Sie mit dem VPN verbunden sind. Können Sie nun das Ergebnis einer Ihrer Tracerouten veröffentlichen? Ich bin gespannt auf die ersten Zeilen der Ausgabe, da das Paket anscheinend für mindestens die ersten 8 Sprünge in einer Schleife geroutet wird (bin allerdings kein Netzwerkexperte)
Mario

Entschuldigung, hier ist es: gist.github.com/jamm/028ae858a03e40495740 . Und ja, es sieht komisch aus. Vielleicht brauchen wir eine bestimmte Route.
OZ_


1

Sie müssen die IP-Weiterleitung für Ihre VM-Instanz in der Google Cloud aktivieren, andernfalls erreichen Pakete Ihre VM nicht. Beachten Sie, dass dies unabhängig von dem ist net.ipv4.ip_forward = 1, was Sie in Ihrer VM einstellen können.

Die IP-Weiterleitung kann nur einmal festgelegt werden, bevor Sie eine VM erstellen, und kann danach nicht mehr geändert werden. Um es für eine neue VM zu aktivieren, klicken Sie auf Management, security, disks, networking, sole tenancy: Bildbeschreibung hier eingeben

NetworkingKlicken Sie dann in der Registerkarte auf Network Interfaceund stellen Sie die IP-Weiterleitung auf ON:

Bildbeschreibung hier eingeben


0

Sie müssen eine Regel hinzufügen, die den Datenverkehr für OpenVPN selbst zulässt:

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

existieren als Regel # 4
OZ_

0

Über das Netzwerk.

1) Aktivieren Sie den gesamten Verkehr vom OpenVPN-Subnetz (z. B. 10.8.0.0/24) an der Konsole

2) Ich empfehle Ihnen dringend, Masquerade zu Ihrem Netzwerk hinzuzufügen

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

3) Vergessen Sie nicht, das Paketrouting im Kernel zu aktivieren

Ein einmal

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

b) für immer in /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.