OpenSSH : Tunneling VPN

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Depuis la version 4.3 de OpenSSH, l'option pour faire des tunnels IP a été ajoutée.

Avant tout, il faut vérifier la version d'OpenSSH sur le serveur et le client.

Command ssh
ssh -v

Tout d'abord, il faut les droits root sur les 2 machines. En effet, il y a quelques opérations à faire, aussi bien au niveau de la configuration que du réseau.

2 Configuration

2.1 Serveur

2.1.1 OpenBSD

La première chose à faire est de dire à OpenSSH d'autoriser les tunnels, en rajoutant cette directive :

Configuration File /etc/ssh/sshd_config
# Enable layer-3 tunneling. Change the value to 'ethernet' for layer-2 tunneling
PermitTunnel point-to-point

Nous devons nous assurer que le forwarding est activé :

Command sysctl
sysctl net.inet.ip.forwarding=1

Et sera activé au reboot :

Command /etc/sysctl.conf
net.inet.ip.forwarding=1

On va créer une interface tun :

Command
ifconfig tun0 create
ifconfig tun0 10.0.0.1 10.0.0.2 netmask 0xfffffffc

Et encore une fois, rendre la configuration permanente :

Configuration File /etc/hostname.tun0
10.0.0.1 10.0.0.2 netmask 0xfffffffc

Nous allons maintenant pouvoir relancer SSH :

Command
pkill -HUP sshd ; /usr/sbin/sshd

Il faut aussi retirer la séparation des privilèges, ou jouer sur les permissions de /dev/tun . J'ai pris la facilité pour le moment, j'ai rajouté

UsePrivilegeSeparation no

Une autre solution est de donner les permissions en lecture écriture à un groupe particulier sur /dev/tun, ce qui est bien plus simple et sûr.

chmod :mongroupe /dev/tun

et bien sur, être dans le groupe en question.

Il faut ensuite charger le module tun :

modprobe tun

et le rajouter dans /etc/modprobe.preload

echo tun >> /etc/modprobe.preload

pour le charger au prochain démarrage.

2.2 Client

Au niveau du client, nous devons également ajouter cette directive mais dans le fichier /etc/ssh/ssh_config :

Configuration File /etc/ssh/ssh_config
# Enable layer-3 tunneling. Change the value to 'ethernet' for layer-2 tunneling
PermitTunnel point-to-point

Editez le fichier /etc/network/interfaces et rajoutez cette interface :

Configuration File /etc/network/interfaces
      iface tun0 inet static
      pre-up ssh -S /var/run/ssh-myvpn-tunnel-control -M -f -w 0:0 5.6.7.8 true
      pre-up sleep 5
      address 10.254.254.2
      pointopoint 10.254.254.1
      netmask 255.255.255.252
      up route add -net 10.99.99.0 netmask 255.255.255.0 gw 10.254.254.1 tun0
      post-down ssh -S /var/run/ssh-myvpn-tunnel-control -O exit 5.6.7.8


Il faut simplement les droits sur /dev/tun, donc soit tourner en root, ou avoir la permission d'écrire sur /dev/tun, comme plus haut, puis faire ( client etant le serveur ) :

ssh -w any:any client

Vous pouvez jeter une oeil sur les options -f et -N pour ne pas lancer de shell sur la machine distante. Et bien sur, les options habituelles marchent encore ( clé, tunnel, master/slave ).

Puis, en root, vous pourrez changer l'ip de la nouvelle interface tun0 sur le serveur

ifconfig tun0 10.0.0.1

sous FreeBSD:

ifconfig tun100 inet 10.0.0.1 10.0.0.2 netmask 255.255.255.255

et faire pareil sur le client :

ifconfig tun0 10.0.0.2

ou

ifconfig tun100 inet 10.0.0.2 10.0.0.1 netmask 255.255.255.255

Et finalement, vous pouvez maintenant tester le ping depuis le client :

ping 10.0.0.1

Le reste, c'est de la configuration normale pour les interfaces. Vous pouvez rajouter des routes, un firewall, n'importe quoi.

Néanmoins, il faut savoir que les connexions tcp par dessus tcp ( comme c'est le cas avec ssh ) sont déconseillées, de par la nature de tcp.

3 FAQ

3.1 Connection closed by ...

Ceci est généralement du au serveur qui galère. Vérifier qu'il a bien les bons DNS et que dans la config (/etc/ssh/sshd_config) la valeur LoginGraceTime est assez élevée.

3.2 Cannot fork into background without a command to execute

Vous avez peut être ce message d'erreur :

Cannot fork into background without a command to execute
Failed to bring up tun1.

Pour palier ce problème, rajoutez l'option -N à la commande ssh.

4 Ressources

Documentation sur le VPN SSH
http://www.kernel-panic.it/openbsd/vpn/vpn5.html
http://www.debian-administration.org/article/Setting_up_a_Layer_3_tunneling_VPN_with_using_OpenSSH