Serveur VPN sur Google Compute Engine avec OpenVPN

13

J'essaie d'utiliser le serveur Google Compute Engine comme serveur VPN pour tout mon trafic (je vis en Russie, nous avons des problèmes de censure ici).

Il y a un mini-tutoriel sur VPN sur GCE , mais il s'agit d'un réseau entre 2 serveurs à l'intérieur de GCE et non avec OpenVPN.

J'ai fait toutes les étapes d'un autre tutoriel, sur la configuration de VPN avec OpenVPN sur Debian , je peux me connecter au VPN à partir du client, mais je ne peux pas ouvrir de connexions (je ne peux même pas cingler google). Sur le serveur, je peux cingler et télécharger tout comme d'habitude.

J'ai VPN sur Linode avec la même configuration et cela fonctionne bien. Le problème vient donc du routage réseau GCE ou des règles de pare-feu.

J'ai essayé beaucoup de variantes mais rien ne fonctionne. S'il vous plaît, regardez les paramètres et dites-moi ce que je dois changer.

// lignes de configuration supprimées, car le problème est résolu //

OZ_
la source
Existe-t-il un moyen d'activer le transfert IP? echo 1> / proc / sys / net / ipv4 / ip_forward
Alec Istomin
@AlecIstomin, oui, c'est fait. J'ai VPN sur Linode avec la même configuration et cela fonctionne bien. Le problème vient donc du routage réseau GCE ou des règles de pare-feu.
OZ_
Peut-être demander le support GCE? Cela semble être le genre de chose à laquelle ils pourraient répondre rapidement.
Bill Weiss
Le prix @BillWeiss pour leurs plans de support commence à partir de 150 $ / mois, mais si ce problème ne sera pas résolu en semaine, je pense que je vais les payer. J'essaierai également de trouver quelqu'un sur oDesk pour le réparer, puis j'écrirai un didacticiel sur mon blog.
OZ_
odesk.com/jobs/~01c4b1438a64f31fdd - n'hésitez pas à postuler, si vous pouvez aider, les gars.
OZ_

Réponses:

7

Tout d'abord, merci à @Shivox pour sa réponse .

Et voici le petit guide pratique:

  • Je vous recommande de créer le réseau supplémentaire (voir onglet « Réseaux » ") préférences réseau, ajoutez permettant règles: tcp: 22 (sinon exister), tcp: 9700, tcp. 17619 . 17619 ici est variable - changement à tout port que vous aimez (plage de 9075 à 65534). Vous n'avez besoin que de 3 règles et de 2 routes par défaut, rien d'autre.
  • Allez dans "Créer une instance Compute Engine", cliquez sur "Afficher les options avancées", autorisez la redirection des ports, sélectionnez l'emplacement du serveur.
  • Maintenant (lorsque vous avez sélectionné l'emplacement), ajoutez une adresse IP statique au serveur.
  • Sélectionnez l'image Ubuntu 14.04 (exactement cette version).
  • Créer une instance
  • Connectez-vous via SSH (moyen le plus simple - utilisez l'outil dans le navigateur du panneau 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
  • Dans le navigateur ouvert https://instance_ip:9700
  • En cas de question sur DB, cliquez sur "Enregistrer"
  • Dans la fenêtre de connexion, utilisez pritunlcomme nom d'utilisateur et mot de passe
  • Maintenant, changez le nom d'utilisateur et le mot de passe de l'utilisateur administrateur
  • Ajouter une organisation, puis 2 utilisateurs (pour ordinateur et mobile)
  • Cliquez sur "Ajouter un serveur" dans l'onglet "Serveurs"
  • Utilisez le numéro de port de la première étape ( 17619 comme exemple) et le protocole TCP .
  • Attacher l'organisation au serveur
  • Démarrer le serveur
  • Dans l'onglet "Utilisateurs", téléchargez les clés pour les deux utilisateurs (archives tar avec fichiers ovpn à l'intérieur).

J'utilise Viscosity pour OS X et OpenVPN connect pour iOS en tant que clients. Dans Viscosité, activez l'option "Envoyer tout le trafic via une connexion VPN" dans l'onglet "Réseau".

OZ_
la source
Juste à noter: Google Cloud Platform offre un essai gratuit de 300 $ pour 60 jours.
OZ_
1
Les instructions pour installer Pritunl sur Ubuntu 14.04 ont changé: github.com/pritunl/pritunl#ubuntu-trusty
motobói
6

Vous pouvez résoudre le problème de ne pas pouvoir naviguer sur le Web via le VPN malgré le fait de pouvoir ping, traceroute ... par l'une des deux façons suivantes:

Tout d'abord, vous pouvez utiliser le protocole TCP au lieu d'UDP, en remplaçant «proto udp» par «proto tcp» dans les fichiers de configuration client et serveur.

Deuxièmement, vous pouvez utiliser l'appareil tactile au lieu de tun, en changeant «dev tun» en «dev tap» dans les fichiers de configuration client et serveur.

Je ne sais pas quel est le problème, mais il semble que ce soit un problème de la part de Google.

Shivox
la source
1
Tu es mon héros! Merci beaucoup! Passer à TCP a fait l'affaire. Je développerai le "mode d'emploi" complet dans une réponse séparée. Ce sentiment quand le rêve de longue date se réalise ... Merci!
OZ_
4

N'oubliez pas que Google VPC supprime des paquets qui n'ont source_ippas l'IP interne d'une machine virtuelle ayant une IP externe.

Ce document https://cloud.google.com/compute/docs/vpc/advanced-vpc indique:

Le réseau VPC réécrit l'en-tête IP pour déclarer l'adresse IP externe de l'instance comme source. Si l'instance n'a pas d'adresse IP externe, l'appel n'est pas autorisé et le réseau VPC abandonne le paquet sans en informer l'expéditeur.

Donc, si votre openVPN ne fait que transférer des paquets de l'autre réseau, les paquets vers le public interne seront supprimés car ils source_ipne correspondent à aucune IP interne de VM existante. Pour cette raison, vous devez NAT les paquets quittant votre réseau local, par exemple sur votre nœud VPN.

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

"Pritunl" mentionné dans la réponse OZ_ fonctionne, car il configure automatiquement le NAT.

Piotr Tabor
la source
3

Ce n'est pas vraiment une réponse, mais le site ne m'a pas permis de l'ajouter en commentaire à votre question.

Néanmoins, j'ai presque exactement la même configuration que vous avez détaillée ci-dessus (je n'ai pas configuré le dnsmaq sur le serveur difficile)

Malheureusement, le VPN ne fonctionne pas comme prévu. Je peux résoudre une adresse, envoyer une requête ping à certains hôtes Internet et même faire une trace complète lorsque je suis connecté au VPN. Cependant, lorsque j'ouvre le navigateur et navigue vers un site, la connexion est vraiment lente. Je ne sais pas ce qui peut affecter la connexion, mais c'est vraiment un problème étrange.

Peut-être que quelqu'un de Google peut nous aider à savoir ce qui se passe.

PS 1. Comme d'autres personnes l'ont suggéré auparavant, pouvez-vous vérifier si le transfert IP est activé? Pour moi, la seule façon de garantir que la valeur de net.ipv4.ip_forward a été correctement restaurée après un redémarrage était après avoir utilisé une règle personnalisée sur /etc/sysctl.d

Par exemple, vous pouvez ajouter la règle à l'aide de la commande suivante:

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

PS 2. Si le transfert fonctionne pour vous, pouvez-vous tester un itinéraire de trace vers un hôte externe tout en étant connecté au VPN?. La sortie que j'ai obtenue lorsque je fais cela est un peu étrange (pourquoi il y a plusieurs sauts sur la même 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. La seule chose qui semble fonctionner correctement est que le VPN utilise l'adresse IP externe de mon hôte pour accéder à 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>
Mario
la source
@OZ_ Heureux d'apprendre que vous pouvez désormais envoyer une requête ping et traceroute lorsque vous êtes connecté au VPN. Maintenant, pouvez-vous publier le résultat d'un de vos traceroute?. Je suis curieux de connaître les premières lignes de la sortie car il semble que le paquet soit routé en boucle pour au moins les 8 premiers sauts (je ne suis pas un expert en réseau, cependant)
Mario
désolé, le voici: gist.github.com/jamm/028ae858a03e40495740 . Et oui, ça a l'air étrange. Peut-être que nous avons besoin d'un itinéraire spécifique.
OZ_
1

Vous devez activer le transfert IP pour votre instance de machine virtuelle dans Google Cloud, sinon les paquets n'atteindront pas votre machine virtuelle. Remarque, ceci est distinct de net.ipv4.ip_forward = 1celui que vous pouvez définir dans votre machine virtuelle.

Le transfert IP ne peut être défini qu'une seule fois avant de créer une machine virtuelle et ne peut pas être modifié par la suite. Pour l'activer pour une nouvelle VM, cliquez sur Management, security, disks, networking, sole tenancy: entrez la description de l'image ici

Ensuite, dans l' Networkingonglet, cliquez sur Network Interfaceet définissez le transfert IP sur ON:

entrez la description de l'image ici

Pavel P
la source
0

Vous devez ajouter une règle qui autorise le trafic pour OpenVPN lui-même:

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
Paul Rudnitskiy
la source
exister comme règle # 4
OZ_
0

À propos du réseau.

1) Activez tout le trafic provenant du sous-réseau OpenVPN (par exemple 10.8.0.0/24) sur la console

2) Je vous suggère fortement d'ajouter Masquerade à votre réseau

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

3) N'oubliez pas d'activer le routage des paquets dans le noyau

a) une fois

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

b) pour toujours dans /etc/sysctl.conf:

 net.ipv4.ip_forward = 1
Mikolas Pansky
la source