Ci-dessous, les différences entre deux révisions de la page.
linux:openvpn [25-02-2012 22:37] edmc73 Page moved from linux:edmc73:linux:openvpn to linux:edmc73:linux:edmc73:openvpn |
linux:openvpn [04-04-2013 22:06] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== OpenVPN ====== | ||
- | ===== Source ===== | ||
- | |||
- | http:// | ||
- | |||
- | http:// | ||
- | |||
- | http:// | ||
- | |||
- | ===== But ===== | ||
- | |||
- | Un serveur Debian avec un serveur OpenVPN sur un reseau en 172.16.43.0 | ||
- | |||
- | Un client sous windows qui veut accéder au serveur debian et tous les pc qui se trouvent sur son LAN | ||
- | |||
- | ===== Installation ===== | ||
- | |||
- | apt-get install openvpn | ||
- | | ||
- | On crée un utilisateur openvpn pour plus de sécurité | ||
- | | ||
- | groupadd openvpn | ||
- | useradd -d /dev/null -g openvpn -s /bin/false openvpn | ||
- | | ||
- | Tous les fichiers nécessaires se trouvent dans | ||
- | cd / | ||
- | | ||
- | On va copier le fichier de config par défaut et l' | ||
- | |||
- | cd / | ||
- | gunzip server.conf.gz | ||
- | cp server.conf / | ||
- | | ||
- | Avant de se lancer dans la config, nous allons générer les clé et certificat dont nous avons besoin. | ||
- | |||
- | ===== Génération de certificat et clé privé/ | ||
- | |||
- | Allons dans le répertoire adéquate | ||
- | cd / | ||
- | | ||
- | Nous llons éditer le fichier vars afin de donner quelques info sur nous. | ||
- | vi vars | ||
- | | ||
- | Tout à la fin du fichier, modifiez les infos en fonction de vous | ||
- | |||
- | export KEY_COUNTRY=FR | ||
- | export KEY_PROVINCE=France | ||
- | export KEY_CITY=Dijon | ||
- | export KEY_ORG=" | ||
- | export KEY_EMAIL=" | ||
- | |||
- | Ensuite, on va initialiser le fichier vars | ||
- | source vars | ||
- | | ||
- | Faire un nettoyage au préalable | ||
- | ./clean-all | ||
- | | ||
- | On crée le certificat principal du serveur **ca.crt** et la clé correspondante **ca.key** | ||
- | ./build-ca | ||
- | | ||
- | On crée maintenant le certificat et clé pour le serveur openvpn | ||
- | ./ | ||
- | | ||
- | Ensuite on crée un certification et clé pour le client openvpn | ||
- | ./build-key Client01 | ||
- | | ||
- | Répétez la commande précédente autant de fois qu'il y a de poste client avec un nom différent biensur. | ||
- | |||
- | Création du paramètre Diffie Hellman | ||
- | ./build-dh | ||
- | | ||
- | Voila, tout est créé dans le répertoire keys, il n'y a plus qu'a copier les fichiers concernant le serveur sur le serveur et le client sur le client ;) | ||
- | |||
- | cp ./ | ||
- | cp ./ | ||
- | cp ./ | ||
- | cp ./ | ||
- | | ||
- | Pour le client, copier le **ca.crt**, le **Client01.crt** et le **Client01.key** à copier dans **c: | ||
- | |||
- | ===== Configuration du serveur ===== | ||
- | |||
- | <note tips> | ||
- | Astuce pour lire votre fichier de conf sans tous les commentaires. | ||
- | grep -E -v ' | ||
- | </ | ||
- | |||
- | exemple du fichier de conf | ||
- | <code conf> | ||
- | ;Port en écoute utilisé pour la connexion VPN | ||
- | port 1194 | ||
- | |||
- | ;Protocole utilisé (Le protocole udp est plus sécurisé que le tcp) | ||
- | proto udp | ||
- | |||
- | ;Type d' | ||
- | dev tun | ||
- | |||
- | ;Nom des fichiers servant à l' | ||
- | ca ca.crt | ||
- | cert LeServeurVPN.crt | ||
- | key LeServeurVPN.key | ||
- | dh dh1024.pem | ||
- | |||
- | ;Adresse du réseau virtuel (Le serveur aura l' | ||
- | server 10.8.0.0 255.255.255.0 | ||
- | |||
- | ;Cette ligne ajoute sur le client la route du réseau du serveur | ||
- | push "route 172.16.43.0 255.255.255.0" | ||
- | |||
- | ;Ces lignes indiquent aux clients l' | ||
- | push " | ||
- | push " | ||
- | push " | ||
- | |||
- | # Cette ligne permet aux clients de voire les autres clients | ||
- | ; | ||
- | |||
- | keepalive 10 120 | ||
- | |||
- | ;Cette ligne active la compression | ||
- | comp-lzo | ||
- | |||
- | ;Ces lignes indiquent un user et un group particulier pour le processus et on ajoute un chroot pour plus de sécurité | ||
- | chroot / | ||
- | user openvpn | ||
- | group openvpn | ||
- | |||
- | ;Ces lignes permettent de rendre persistante la connexion | ||
- | persist-key | ||
- | persist-tun | ||
- | |||
- | ;Cette ligne permet de voir le status du serveur dans le fichier / | ||
- | status openvpn-status.log | ||
- | |||
- | ;on définit le nom du fichier de log dans /var/log | ||
- | log openvpn.log | ||
- | |||
- | ;Cette ligne permet d' | ||
- | verb 3 | ||
- | </ | ||
- | |||
- | **ATTENTION**, | ||
- | |||
- | Pour cela, il suffit de créer le fichier / | ||
- | |||
- | < | ||
- | rotate 4 | ||
- | daily | ||
- | copytruncate | ||
- | compress | ||
- | missingok | ||
- | notifempty | ||
- | }</ | ||
- | |||
- | Ainsi, une rotation des journaux d’OpenVPN sera effectuée chaque jour et les 4 derniers fichiers seront conservés. Bien sur ces valeurs doivent être adaptées en fonction de l’utilisation du serveur : si les journaux sont trop importants il est possible de diminuer le niveau de verbosité d’OpenVPN ou de modifier les paramètres de la rotation. | ||
- | |||
- | Vous pouvez maintenant redémarrer le serveur openvpn pour qu'il prenne en compte son nouveau fichier de config | ||
- | / | ||
- | | ||
- | Dans l' | ||
- | |||
- | Pour cela il faut configurer le reseau et le firewall. | ||
- | |||
- | Vérifions que le port_forwarding est activé sur votre serveur avec la commande | ||
- | cat / | ||
- | | ||
- | Si vous avez **1**, la fonction est activé, sinon vous avez **0**, vous pouvez changer cela grace à cette commande | ||
- | echo 1 > / | ||
- | | ||
- | Afin que ce paramètre reste en place lors du redémarrage du serveur, il convient de modifier le fichier **/ | ||
- | |||
- | Trouver la ligne | ||
- | # Uncomment the next line to enable packet forwarding for IPv4 | ||
- | # net.ipv4.ip_forward=1 | ||
- | | ||
- | et décommenté la 2eme en vous assurant que la variable est bien définie sur la valeur **1** | ||
- | net.ipv4.ip_forward=1 | ||
- | | ||
- | Créons maintenant notre règle firewall pour rediriger les paquets venant du réseau virtuel VPN vers notre LAN | ||
- | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE | ||
- | | ||
- | Pour que cette règle s' | ||
- | / | ||
- | | ||
- | ===== Configuration du routeur ===== | ||
- | |||
- | Pour un serveur OpenVPN, par défaut (si vous n'avez pas modifier le fichier de conf) il faut ouvrir **le port 1194 en UDP** sur votre routeur. | ||
- | |||
- | |||
- | ===== Configuration du client ===== | ||
- | |||
- | ==== Sous Windows ==== | ||
- | |||
- | Comme je le disais, le poste client est sous windows. | ||
- | |||
- | Nous allons télécharger l' | ||
- | |||
- | A l' | ||
- | |||
- | Vous pouvez télécharger la francisation du programme http:// | ||
- | |||
- | Lancez donc l' | ||
- | |||
- | Allez dans le répertoire **C: | ||
- | Copiez le fichier **openvpn-gui-1.0.3-fr.exe**\\ | ||
- | Supprimez le fichier **openvpn.exe**\\ | ||
- | Renommez le fichier **openvpn-gui-1.0.3-fr.exe** en **openvpn.exe**. | ||
- | |||
- | Vous pouvez maintenant relancer openvpn : Menu Démarrer / Tous les programmes / OpenVPN / OpenVPN GUI | ||
- | |||
- | Nous allons préparer la config du client, allez dans le répertoire **C: | ||
- | |||
- | Copiez les fichiers **ca.crt**, **Client01.crt** et **Client01.key** | ||
- | |||
- | Créons le fichier de config nommé par exemple **MonServeur.ovpn** | ||
- | |||
- | Vous pouvez trouver des exemples de fichiers de config dans le répertoire **C: | ||
- | |||
- | Dans notre cas, voici ce que contient mon fichier de config | ||
- | |||
- | < | ||
- | #On spécifie qu'on est le client | ||
- | client | ||
- | |||
- | #Même parametre que le serveur | ||
- | dev tun | ||
- | proto udp | ||
- | |||
- | remote adresse_du_serveur_openvpn 1194 | ||
- | |||
- | #Tente de résoudre le nom de la machine indéfiniment | ||
- | resolv-retry infinite | ||
- | |||
- | nobind | ||
- | |||
- | # essaie de préserver le même état lorsque la connexion redémarre | ||
- | persist-key | ||
- | persist-tun | ||
- | |||
- | #Définit les fichiers que vous avez copier | ||
- | ca ca.crt | ||
- | cert Client01.crt | ||
- | key Client01.key | ||
- | |||
- | #permet la compression des données | ||
- | comp-lzo | ||
- | |||
- | #détails des logs | ||
- | verb 3</ | ||
- | |||
- | ==== Sous Linux ==== | ||
- | |||
- | Installez le paquet **openvpn** | ||
- | |||
- | Copiez les fichiers **ca.crt**, **Client01.crt** et **Client01.key** dans le répertoire **/ | ||
- | |||
- | Créons le fichier de config nommé par exemple **client.conf** toujours dans le répertoire **/ | ||
- | |||
- | Dans notre cas, voici ce que contient mon fichier de config | ||
- | |||
- | < | ||
- | #On spécifie qu'on est le client | ||
- | client | ||
- | |||
- | #Même parametre que le serveur | ||
- | dev tun | ||
- | proto udp | ||
- | |||
- | remote adresse_du_serveur_openvpn 1194 | ||
- | |||
- | #Tente de résoudre le nom de la machine indéfiniment | ||
- | resolv-retry infinite | ||
- | |||
- | nobind | ||
- | |||
- | # essaie de préserver le même état lorsque la connexion redémarre | ||
- | persist-key | ||
- | persist-tun | ||
- | |||
- | #Définit les fichiers que vous avez copier | ||
- | ca ca.crt | ||
- | cert Client01.crt | ||
- | key Client01.key | ||
- | |||
- | #permet la compression des données | ||
- | comp-lzo | ||
- | |||
- | #détails des logs | ||
- | verb 3</ | ||
- | |||
- | Y'a plus qu'a lancer la connexion, même commande que pour lancer le serveur. | ||
- | / | ||
- | | ||
- | ===== Problème MTU ===== | ||
- | |||
- | Après utilisation, | ||
- | |||
- | Le problème venait du réglage MTU. | ||
- | |||
- | La machine distante passe par une freebox, j'ai donc ajusté le MTU à **1492** | ||
- | ifconfig eth0 mtu 1492 | ||
- | | ||
- | Pour le serveur, il existe une ligne à mettre dans le fichier de config d' | ||
- | |||
- | Rajoutez **mtu-test** quelque part dans votre fichier de config. | ||
- | |||
- | Relancer le serveur openvpn puis le client openvpn sur la machine distante. | ||
- | |||
- | Regardons à présent les log. | ||
- | |||
- | < | ||
- | Thu Apr 8 13:54:54 2010 client-distant/ | ||
- | Thu Apr 8 13:54:54 2010 client-distant/ | ||
- | </ | ||
- | |||
- | On constate que les chiffres de MTU sont différent sur la fin de la 1ère ligne **local-> | ||
- | |||
- | Cette différence va engendrer un problème de fragmentation des paquets et à causé chez moi des pertes de connexion à VNC. | ||
- | |||
- | J'ai donc rajouté ces 2 lignes dans le fichier de config du __**serveur et du client**__ openvpn | ||
- | fragment 1437 | ||
- | mssfix | ||
- | |||
- | Après redémarrage du serveur puis du client, on retrouve dans les logs | ||
- | |||
- | < | ||
- | Thu Apr 8 14:31:35 2010 client-distant/ | ||
- | Thu Apr 8 14:34:40 2010 client-distant/ | ||
- | </ | ||
- | |||
- | On retrouve des valeurs cohérentes et pas de message d' | ||
- | |||
- | Au final, ma connexion VNC est instantanée ! |