MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


archives:vm:tunnel_vpn

Accès au serveur par un VPN

En quoi cela consiste

Sur la machine cliente (qui accède à la VM), vous allez “forwarder” un port via ssh et demander à votre navigateur Web de passer par un proxy situé sur l'hôte local et utilisant ce même port. FIXME (à reformuler)

En face, côté VM, vous allez installer un proxy http qui va recevoir les requêtes forwardées.

Le résultat, c'est que vous aurez une fenêtre dans votre navigateur qui vous donnera accès à votre réseau local exactement comme si vous étiez chez vous !

Installation et paramétrages côté serveur

Avant de commencer, si c'est la première fois que vous lancez la VM Ubuntu server (FIXME: il n'y avait que 2VM dispos à l'époque), je vous conseille vivement de créer un nouvel utilisateur et de supprimer le compte vmadmin (ou au moins d'en changer le mot de passe).

Libre à vous également de changer le port d'écoute du démon ssh, ou encore de fixer l'IP de votre VM. Notez que vous aurez besoin de l'IP et du port écouté par le démon plus loin (pour le tuto, l'IP de la VM sera 192.168.0.bbb et le port écouté par sshd zzzzz).

Je vous propose donc d'utiliser le serveur mandataire squid (http://www.squid-cache.org/) :

sudo apt-get install squid

Pour être tout à fait franc avec vous, vous n'êtes pas vraiment obligés d'utiliser ce serveur mandataire. En effet, le démon ssh installé sur Ubuntu server est capable de jouer ce rôle, à la différence près que le serveur mandataire serait alors de type SOCKS. D'après quelques tests, je ne peux que vous conseiller d'installer squid, mais libre à vous ;)

Donc, le fichier de configuration de squid se trouve ici :

sudo vi /etc/squid/squid.conf

La configuration par défaut devrait fonctionner, vous pouvez néanmoins :

## Spécifier le port écouté ici
http_port xxxx
 
## Pour éviter d'avoir des problèmes avec le nom d'hôte et de domaine, ajouter la directive
visible_hostname none
 
## Par défaut, le proxy est paramétré comme suit (ce qui convient parfaitement à l'utilisation décrite ici)
http_access allow localhost
http_access deny all
 
## -> Pour une gestion plus fine de l'accès au proxy, n'hésitez pas à jouer avec les ACL
## Par défaut, voici les paramètres de cache (swap) à changer en fonction de votre VM, vos besoins
cache_mem 8 MB
cache_dir /var/spool/squid 

Une fois les paramètres réglés à votre convenance :

sudo squid start

Ou si squid tourne déjà :

sudo squid -k reconfigure

On vérifie enfin que squid écoute bien le bon port xxxx :

~$ sudo netstat -nap | grep squid
tcp        0      0 0.0.0.0:xxxx            0.0.0.0:*               LISTEN      772/(squid)<code>

Ne vous souciez pas des lignes udp.
Voilà, c'est tout pour le serveur.

===== Paramétrages de votre routeur =====
Sur votre routeur, vous n'avez rien à faire si vous avez accès à votre VM en ssh depuis l'extérieur. 
Si ce n'est pas le cas, vous avez __uniquement__ besoin de rediriger un port tcp sur le port écouté par le démon ssh de votre VM. 

Par exemple, en supposant que le port redirigé sur le routeur soit le même que celui écouté par sshd :
<code>zzzzz->tcp 192.168.0.bbb->zzzzz

Cette redirection suffit car les requêtes http seront entièrement tunnelisées ou encapsulées par ssh.

Paramétrages côté client

Vous devez au préalable :

  • Connaître le port écouté par squid (xxxx)
  • Connaître le port écouté par sshd (zzzzz) 1)
  • Avoir accès localement en ssh à votre VM depuis votre client login + mdp (depuis windows vous pouvez utiliser Putty) 2)
  • Connaître l'IP fixe fournie par votre FAI, j'utiliserai ici 99.999.99.999 (à défaut, être inscrit sur un service de DNS dynamique) 3)

Il ne reste plus qu'à forwarder le port vers notre VM distante. Il faut utiliser un port libre sur votre client. J'utiliserai 50000 dans cet exemple mais vous pouvez utiliser n'importe quel autre port du moment qu'il n'est pas déjà utilisé.

Pour faire le forwarding de port, nous allons utiliser le flag -L de ssh (nous pourrions également utiliser -D) :

ssh -L50000:127.0.0.1:xxxx -p zzzzz login@99.999.99.999

Pour plus de confort, je vous conseille d'utiliser également les options suivantes :

ssh -N -T -f -L50000:127.0.0.1:xxxx -p zzzzz login@99.999.99.999

-f : exécution en arrière plan (le terminal rend la main), et l'entrée standard est redirigée vers /dev/null -N : aucune commande distante, juste un forward -T : désactive les pseudos terminaux

Si vous utilisez windows et Putty, il faut remplir vos paramètres de 'Session' comme si vous vous connectiez normalement en ssh à la VM. Puis, dans la partie 'Connection/SSH/Tunnels', ajouter :

  1. 50000 dans port source
  2. 127.0.0.1:xxxx dans destination

Voilà, il suffit maintenant de dire à votre navigateur Web préféré qu'il doit utiliser un proxy qui se trouve sur votre machine (localhost) et qu'il écoute le port 50000.

Je vous conseille d'utiliser Firefox et le module FoxyProxy (https://addons.mozilla.org/fr/firefox/addon/foxyproxy-standard/) qui permet de définir des motifs d'URL qui déclencheront l'utilisation d'un proxy particulier précédemment défini.

Une fois le module installé, cliquez sur le petit renard en bas à droite de Firefox et faites 'Ajouter un nouveau proxy' :

  1. Dans l'onglet 'Général' donnez un petit nom à ce proxy
  2. Dans 'Informations/Configuration manuelle', renseignez l'adresse de l'hôte comme localhost et le port 50000. Si vous utilisez squid, ne cochez pas 'Proxy SOCKS'.
  3. Dans motifs d'URLs, vous pouvez ajouter un nouveau motif, par exemple :
.*vhs.*

Faites attention à bien 'activer' ce proxy dans la partie 'proxies' du module et le tour est joué. Chaque fois qu'une url contiendra la chaîne 'vhs', le proxy sera utilisé. Si l'IP du VHS-4 est [b]192.168.0.aaa[/b] et que vous tapez par exemple dans la barre de votre navigateur :

https://192.168.0.aaa/vhs

(FIXME IP de la v2) le proxy sera activé et vous accéderez à l'interface de gestion que vous connaissez déjà très bien.

Consultation des logs

Vous pouvez effectivement observer tout ce qui transite par squid en surveillant sur la VM le fichier :

sudo tail -f /var/log/squid/access.log

De plus, passant par sshd pour accéder à la machine, vous pouvez surveiller les logs du démon ssh :

grep sshd /var/log/auth.log | tail -50

Avec l'aimable autorisation d'Houssenka pour la reproduction de ce tuto du forum Pour discuter ou poser des questions par ici!

1)
Si vous utilisez le port ssh par défaut (22), vous n'avez pas besoin de spécifier le port avec le flag -p
2)
Iil est également possible de mettre en place un système de clés pour que seules les machines possédant cette clé puissent se connecter
3)
Vous pourriez également posséder un nom de domaine ou simplement avoir un reverse DNS à entrer à la place de l'IP
archives/vm/tunnel_vpn.txt · Dernière modification: 04/10/2019 20:48 de Cram28