Blog d'Olivier Raulin

Un peu de technique ...

Passer son trafic web au travers de SSH

Si vous êtes abonné chez Free, vous n’êtes pas sans savoir qu’il est parfois compliqué d’accéder à YouTube en heures de pointe.
Bien que la situation se soit grandement améliorée depuis quelques temps, tout n’est pas toujours rose.

Il existe une solution assez simple pour contourner ce problème, du moins si l’on possède une machine à l’extérieur de son réseau (par exemple, un serveur virtuel, ou bien un petit Kimsufi chez OVH (enfin, s’ils acceptent un jour à nouveau les clients :–) )

Cet article parlera donc de SSH, de SOCKS et de tunnel.

SSH, SOCKS, tunnel ? Pardon ?

Je vais vous expliquer, rapidement, ces différents termes.

SSH

SSH, qui signifie Secure SHell, est un protocole de communication chiffré (attention, celui qui utilise le verbe crypter, je l’enferme dedans (la crypte) !)
On peut faire tout un tas de choses avec … globalement, c’est simplement un protocole qui permet à deux machines de communiquer de façon sécurisée.

On le connaît bien souvent dans le domaine de l’administration système, via la prise de contrôle à distance d’un shell (ligne de commande).

Mais il est également possible, grâce à une option du client OpenSSH, de créer un véritable proxy SOCKS sur sa machine.

SOCKS

Pas question de parler de chaussettes ici, je vais plutôt résumer très rapidement l’article Wikipédia (anglais, car l’article français est nul).

SOCKS est donc un protocole qui route des paquets entre un client et un serveur au travers d’un proxy (un proxy qui s’appelle SOCKS, pour le coup).
Je ne vais pas partir dans une explication de ce qu’est un proxy, sinon on ne va pas s’en sortir.

Tunnel

Ici, le mot est très transparent, et a une correspondance dans la vie réelle : un tunnel, c’est tout simplement un grand tube avec deux extrémités :–)

Et le rapport avec YouTube ?

J’y viens, ne soyez pas trop impatients !

Nous partons donc du principe que vous disposez de deux machines distinctes et géographiquement distantes. Typiquement, votre ordinateur de bureau chez vous, sur une connexion ADSL, et une machine ailleurs, sur une connexion de datacenter (100M, ou même Gigabit).

Ce que l’on va faire, c’est utiliser la connexion de notre serveur afin d’accéder à Youtube (ou autres, ça marche pour tous les sites web).

Et cela … grâce simplement à une seule commande. Nous allons utiliser l’option -D du client SSH, qui nous permettra de mettre immédiatement en écoute un proxy SOCKS sur le port de notre choix (rappel, les 1024 premiers sont réservés et seul root peut les utiliser)

La commande à utiliser est donc la suivante :

ssh -D 8080 utilisateur@hôte 

Petite explication pour ce qui est dans la commande :
+ 8080 indique le port local sur lequel SSH va écouter les connexions entrantes
+ utilisateur désigne l’utilisateur avec lequel on se connecte au serveur distant (et on évitera root, parce qu’on a conscience des risques de sécurité d’avoir un compte root ouvert)
+ hôte désigne l’adresse ou le nom du serveur distant. Par exemple, monserveur.mondomaine.com, ou bien son adresse IP, directement.

SSH nous connecte donc effectivement au serveur, tout en mettant en écoute un port local. Nous avons presque fini.

La dernière étape est d’aller dans les paramètres de son navigateur, et de renseigner dans la partie Proxy les informations suivantes :
Proxy SOCKS (attention, on ne remplit pas HTTP ni les autres champs) : localhost : 8080 (si on a mis un autre port dans la commande, on le modifie, bien évidemment)

Et … c’est tout ! :)
On peut maintenant regarder des vidéos de châtons en 1080p ! :–)

Pourquoi ?

Une fois cet article terminé, je me suis rendu compte qu’il manquait une petite explication au pourquoi du comment, à ce qu’on a fait, et les implications.
Globalement, chaque fournisseur d’accès à Internet a des accords avec des fournisseurs de transit, afin d’interconnecter les différents réseaux mondieux.

Certaines routes, fréquemment utilisées (on prendra comme analogie le périphérique parisien) saturent souvent quand trop de monde veulent les emprunter.

Ce que nous faisons, c’est que nous sortons prendre une autoroute que moins de monde utilise pour aller là où on veut … et même si le chemin est plus long, vu qu’on va beaucoup plus vite, ce n’est pas très grave. Bien évidemment, cette autoroute a un petit péage en fonction des services que l’on a à notre disposition.

Techniquement, notre navigateur envoie toutes ses requêtes à notre proxy SOCKS, qui lui ne fait que transférer cela à la machine distante, qui se charge elle d’effectuer réellement les requêtes et de les renvoyer dans le tunnel pour qu’on les recoive. C’est presque “simple” comme fonctionnement.