VPN + clé RSA / Accès à internet

Bonjour à tous,

Je débute dans l’univers merveilleux de GNU/Linux. Merveilleux sauf que là, je suis tombé sur un os !
J’ai décidé d’expérimenter le surf et partage de données au travers un VPN. C’est une sorte de défit personnel donc, il y a peut-être d’autres moyens, mais c’est celui là qui m’intéresse pour l’instant.

J’ai lu, relu et re-relu des tutoriels pour monter mon serveur VPN. J’dois dire que le réseau n’est pas ma tasse de thé. C’est aussi un peu pour ça que je me suis lancé dans ce projet.
J’ai réussi à créer le “tunnel” vers mon serveur. En faisant un ping sur l’adresse locale du serveur (10.8.0.1) j’obtiens quelque chose. Je suppose donc que de ce coté c’est bon, mais ensuite, ça s’arrête là.

Mon premier but serait de pouvoir surfer au travers mon serveur (et ensuite voir les machines connectée au serveur).

J’ai vu qu’il fallait activer l’IP FORWARDING avec (# echo 1 > /proc/sys/net/ipv4/ip_forward)
et une règle dans iptables : # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Pour le reste, je bloque ! Il doit surement y avoir une histoire de routage là derrière.

Quelques infos, (je ne sais pas trop quoi donner) …

J’ai monté le serveur vpn avec openVPN + clés RSA sur une Debian Lenny
Les postes clients sont une Xubuntu et un XP SP3 connecté en wifi avec une Livebox

Question subsidiaire (peut-être un peu folle :unamused: ) : est-il possible de faire en sorte qu’un navigateur surf au travers ma connexion adsl et l’autre passe par le vpn ?

Merci d’avance

Nexion

Oula, y a pas foule sur mon sujet :smt003

Même si vous n’avez pas d’infos précise, juste une petite idée enfin quoi que ce soit qui puisse m’aider, je suis preneur …
Google est mon amis, mais encore faut-il savoir quoi lui demander. J’ai l’impression d’avoir écoulé tous les tutos sur la création de vpn :unamused:

Ça me frustre d’avoir un VPN qui a l’air de fonctionner, mais il doit pourtant me manquer qlq chose pour arriver a faire ce que je veux.

C’est-à-dire que “mais ensuite, ça s’arrête là”, ça n’est pas très clair comme descriptif de pb.
Tu fais quoi exactement ? Entre quoi et quoi et comment ?
Et que se passe-t-il ?

D’abord, merci de me répondre :slightly_smiling:

Ce que je veux dire c’est que la connexion VPN a l’air d’être fonctionnel j’arrive bien avec openVPN sur windows/linux a me connecter a mon serveur VPN mais qu’ensuite je n’arrive pas a faire passer quoi que ce soit au travers le VPN.
Comme je l’indiquait dans mon premier post, j’aimerai pouvoir surfer au travers mon serveur via le VPN.

Ma config coté serveur :

port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

user openvpn
group openvpn

keepalive 10 120

comp-lzo

persist-key
persist-tun

status openvpn-status.log
log openvpn.log
verb 4

/proc/sys/net/ipv4/ip_forward à 1
et iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Coté client :

Comme je disais le reseau et moi on est pas super copain, y a des paramètres qui me sont encore pour l’instant obscur surtout du coté des IP. J’ai suivis plusieurs tutos pour en arriver là, j’espère ne pas les avoir trop mélangé :laughing:

En tout cas ça me connecte bien et m’attribue une IP (10.8.0.6) et j’arrive bien à faire un ping sur le serveur avec ping 10.8.0.1

Mais voilà, mon Firefox surf toujours en passant par ma Livebox et non par le VPN.

Salut Nexion,

Je suis a peu près dans le même cas de figure que toi, mon VPN est fonctionnel. Le ping, le partage de fichier etc fonctionne sans problème. Cependant, ma motivation première était de rediriger l’ensemble du traffic internet des clients à travers le VPN (pour contourner des blocages). Sur ce point précis, cela fait environ une semaine que j’épluche tous les tutos sur le net et je ne suis toujours pas arrivé à mes fin ! A ma décharge je ne suis, tout comme toi, pas expert en réseau…

Je suis donc en mesure de t’apporter que des 1/2 solutions, mais ce sera un bon début ! :smiley:

Donc tout d’abord, pour rediriger le traffic web au travers de ton vpn, il faut que tu active ces options coté serveur :

#On définit le serveur VPN comme passerelle par défaut pour les clients.
push "redirect-gateway def1" 
 
#On définit le serveur VPN comme DNS par défaut
push "dhcp-option DNS 10.8.0.1"

Pour plus d’info, voir ici : http://www.dailytechfix.net/2009/07/31/configuration-dopenvpn-server-en-full-tunnelling-sur-ubuntu/

Autre chose, étant donné que ton serveur va faire office de DNS, il te faut le paquet “dnsmasq” (http://manoftoday.wordpress.com/2006/12/03/openvpn-20-howto/).

Dernière chose que j’ai remarqué, uniquement si ton client est une distrib Debian like.
Il semble qu’il y ai un bug dans openvpn et qu’il soit incapable d’appliquer l’option “push dhcp-option DNS 10.8.0.1” en provenance du serveur.
Je m’explique, cette option devrai (si j’ai bien compris) changer le DNS de ton client donc le contenu du fichier “/etc/resolv.conf” (et cela au moment ou tu monte ton vpn). Or chez moi, ce n’est pas le cas.

Pour résoudre ce problème, openvpn t’offre le script “/etc/openvpn/update-resolv-conf”.
Pour le faire fonctionner, il faut ajouter dans ton fichier de config client les options suivantes :

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Grace a ces options, openvpn executera la script a chaque fois que tu montes ou que tu démontes ton tunnel VPN. Ton fichier “resolv.conf” devrai donc toujours etre a jour.
Chez moi, des que j’ajoute ces options, le tunnel ne se monte plus… Faut que je check les logs mais j’ai pas encore eu le temps.

Enfin j’ai aussi essayé sous Windows qui ne souffre pas de ce bug mais rien y fait…

J’ai aussi appliqué sur le serveur ces règles :

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Et j’ai aussi activer l’IP forwarding.

Voici mon fichier de conf serveur (lenny) :

port 80

# TCP or UDP server?
proto tcp
;proto udp

;dev tap
dev tun

ca ca.crt
cert LeServeurVPN.crt
key LeServeurVPN.key  # This file should be kept secret

dh dh1024.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "route 192.168.0.0 255.255.255.0"

push "redirect-gateway def1" 

push "dhcp-option DNS 10.8.0.1"

keepalive 10 120

comp-lzo

user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log

log         openvpn.log

verb 5

Et le fichier de mon client (windows):


client
dev tun
proto tcp

remote xx.xx.xx.xx 80

resolv-retry infinite
nobind

persist-key
persist-tun

ca ca.crt
cert client1.crt
key client1.key

comp-lzo

verb 1

Voila en esperant t’avoir un peu aidé et par la même occasion, trouver un peu d’aide ici car la je commence à avoir épuisé toutes mes cartes… :wink:

Merci.

Bon j’ai avancé sur un point, j’ai réussi à faire fonctionner le script “update-resolv-conf”.

Apres avoir constaté cette erreur dans mes logs :

Sat Aug  8 16:55:29 2009 /etc/openvpn/update-resolv-conf tun0 1500 1544 10.8.0.6 10.8.0.5 init
Sat Aug  8 16:55:29 2009 openvpn_execve: external program may not be called unless '--script-security 2' or higher is enabled.  Use '--script-security 3 system' for backward compatibility with 2.1_rc8 and earlier.  See --help text or man page for detailed info.

J’ai ajouté cette ligne dans mon fichier de config client (avant les appels au script) :

Et cela fonctionne, mon resolv.conf est parfaitement mis a jour, cependant ca n’a rien changé au fait que je n’ai plus internet une fois connecté en VPN mais c’est un bon début. :wink:

[EDIT]
Pour que le script fonctionne correctement, il faut installer le packet “resolvconf” sur le client.

Merci beaucoup de ta réponse tlc77 !

Déjà parce que c’est sympa de répondre mais aussi parce que tu viens de résoudre mon problème !
Je ne sais pas exactement quelle modif a fait que, mais j’ai bel et bien l’ip de mon serveur sur firefox.

A mon avis ça doit être ça :

#On définit le serveur VPN comme passerelle par défaut pour les clients.
push "redirect-gateway def1"

#On définit le serveur VPN comme DNS par défaut
push "dhcp-option DNS 10.8.0.1"

Car au debut j’avais décommenté la ligne #push “redirect-gateway def1 bypass-dhcp” vu que c’était celle de l’exemple dans la doc, mais ça n’a pas marché ensuite j’ai mis celle que tu as donné et miracle ça a fonctionné.
Je viens de faire le test aussi sur une version d’Ubuntu et sans même passer par le script ça fonctionne.

Dans ton cas, tu as essayer de mettre “proto udp” à la place de “proto tcp”. Je ne sais pas exactement la différence, mais c’est ce qui diffère sur nos configs.
Je n’ai pas non plus eu besoin de dnsmasq.

Par contre, sur XP je viens de faire le test et j’ai bien eu besoin de mettre ça dans ma config client :

route-method exe
route-delay 2 #Ca marche aussi sans chez moi

Si tu veux que je te donne des précisions sur quelque chose, n’hésites pas :wink:

Il me reste de mon coté à pouvoir voir les machines connectées au réseau VPN. J’avoue que je ne sais même pas comment voir si c’est bon :blush:

De même, toujours la même question : est ce que c’est réalisable d’avoir un navigateur configuré pour surfer au travers le VPN et l’autre qui continue à utiliser ma connexion internet locale.
De même maintenant tous mes flux réseau passe par le vpn alors que le port 80 me suffirait.

Cool content pour toi que ca fonctionne ! :slightly_smiling: Je suis presque un peu jaloux ! :laughing:

En ce qui concerne “tcp” plutôt que “udp” c’est juste le protocole qui differt mais cela ne devrai pas avoir d’influence sur le routage. C’est seulement pour éviter les blocages que j’ai utilisé le tcp, plus précisément c’est pour imiter une requete classique http (tcp port 80). Grace a cela je peux monter un tunnel depuis n’importe quel réseau qui accepte le surf. :wink:

Enfin revenons en à nos moutons, pourrais tu me donner le resultat de la commande “route” (parfois a utiliser en root) , cela une fois le tunnel vpn monté et ce sur ton serveur et sur ton client ubuntu ? Cela m’aiderai a déceler d’éventuelles erreurs dans mes tables de routage.

En ce qui concerne tes 2 autres questions, voir les machines connectées au réseau VPN me semble tout à fait possible même si je l’ai pas encore fait, regarde du coté de ce tuto c’est expliqué : http://www.coagul.org/spip.php?article422

Pour les 2 navigateurs, je ne suis pas compétent pour te répondre, je n’ai jamais entendu parlé de cela… A voir si quelqu’un a déjà vu cela ?

Allez bon courage, tu as fait le plus dur et merci pour ton aide ! :wink:

Salut,

Si j’y suis parvenu, il n’y a pas de raison que tu n’y arrives pas.
Alors coté serveur ça donne :

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.8.0.2        *               255.255.255.255 UH    0      0        0 tun0
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
93.242.0.0      *               255.255.248.0   U     0      0        0 eth0
default         93.242.7.254    0.0.0.0         UG    0      0        0 eth0

Coté Ubuntu

10.8.0.1        10.8.0.9        255.255.255.255 UGH   0      0        0 tun0
host_server.    ESSID_livebox   255.255.255.255 UGH   0      0        0 eth1
10.8.0.9        *               255.255.255.255 UH    0      0        0 tun0
192.168.1.0     *               255.255.255.0   U     2      0        0 eth1
default         10.8.0.9        128.0.0.0       UG    0      0        0 tun0
128.0.0.0       10.8.0.9        128.0.0.0       UG    0      0        0 tun0
default         ESSID_livebox   0.0.0.0         UG    0      0        0 eth1

ps : host_server correspond a l’host de mon serveur et est suivi d’un .
Je ne sais pas si ici ça a son importance, mais quand j’avais configuré Bind, il en avait une.

ifconfig de tun0 :

Tiens aussi, si je n’ai pas utilisé dnsmasq, je précise que j’ai déjà Bind de configuré sur le serveur.

J’ai testé hier et j’arrive à voir depuis XP mon portable qui est sur Ubuntu. Par contre je n’arrive pas à faire l’inverse. Il faut dire sur ma version de Ubuntu (Crunchbang mais aussi sur Xubuntu) il n’y a pas “Se connecter à un serveur”.

Sinon, pour le lien c’est un de ceux que j’ai utilisé, mais qui finalement n’est pas complet comparé à ceux que tu as donné plus haut. Enfin, on va dire qu’ils se complètent …

Bon courage !

Bon ça y est cela fonctionne. :smiley:

En fait le problème était tout con (enfin c’est surtout moi qui suis con ! :laughing:), depuis que j’ai fait marcher le script de mise a jour de resolv.conf, j’avais rebooté le serveur ce qui m’avais fait perdre l’ip forwarding et sans doute la regle d’IP table. Une fois réactivé tout est en ordre, au top ! :smiley: Pour automatiser la chose j’imagine qu’il faut faire un petit script au démarrage du serveur, comment tu as fait toi ?

En tout cas merci pour tes tables de routage, cela m’a permis de constater que les miennes étaient justes. :wink:

Pour ceux que ça interresse, voici un petit script à executer au démarrage pour pas perdre la config, je l’ai appelé “vpn.sh” :

#! /bin/sh
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Une fois enregistré placer le script dans /etc/init.d

Le rendre executable :

Et enfin pour l’exécuter au démarrage :

Et voila c’est automatique ! :smiley: