Un VPN qui ne nécessite qu’un serveur SSH ? C’est Sshuttle (TCP seulement)
On ne présente plus Sshuttle, l’ami Korben ayant même réalisé un joli tuto commenté.
Bien pratique, mais un poil long lorsqu’on affine sa configuration : fowarding supplémentaire des DNS, exclusion d’un réseau local, démonisation du processus pour pouvoir le tuer quand bon nous semble, et je me suis arrêté là. Sshuttle souffre chez moi d’échec au premier lancement, je vous propose un workaround bonus.
Mon alias Bash (devrait marcher avec ZSH) pour ouvrir un tunnel :
alias 'stunnel'='while [ ! -f /tmp/sshuttle.pid ]; do sudo sshuttle -r login@server.tld -e '"'"'ssh -p 110 -i /home/vincent/.ssh/id_rsa'"'"' 0.0.0.0/0 -v -x 10.19.0.0/16 --dns --daemon --pidfile=/tmp/sshuttle.pid && sleep 2; done && echo -n "Public IP: " && sleep 1 && curl icanhazip.com'
Explications :
stunnel
est le nom de l’alias qui lance le bousin- Tant que le fichier
/tmp/sshuttle.pid
n’existe pas, la commande bouclera - Démarrage de Sshuttle similaire à SSH en précisant ma clé privée
- Exclusion de mon réseau local 10.19.0.0/16 (pour conserver les accès à un Samba)
--dns
capture les requêtes DNS et les forwarde au DNS distant--daemon
et--pidfile
permettent de récupérer le processus en stockant son id dans un fichier créé à la voléesleep 2
met en pause le programme 2 secondes le temps que tout se mette en place- Retour au test de la condition de la boucle : si le fichier existe, sortie de la boucle et affichage de l’IP publique en console
- Sinon c’est reparti pour un tour. Il arrive que Sshuttle plante en chemin la première fois, ne me demandez pas pourquoi
Du coup, mon second alias permet de stopper net le fowarding :
alias 'ktunnel'='[[ -f /tmp/sshuttle.pid ]] && sudo kill `cat /tmp/sshuttle.pid`'
Explications :
- Si le fichier
/tmp/sshuttle.pid
existe, on affiche l’id du processus qu’il contient et on le tue - Toutes les connexions TCP repassent par votre porte locale
Tout ceci est à ajouter dans votre ~/.bashrc et le logiciel est dans les dépôts !