Accès aux machines des salles de TPs

Comment accéder depuis l’extérieur aux machines de TPs sans rediriger toutes ses communications par le VPN de l’Université?

Le VPN d’accès à l’Université est configuré à l’aide de fortivpn :

  • une fois connecté à l’Université, la route par défaut est redéfinie: l’ensemble de votre trafic réseau est détourné par le VPN. Ce qui représente un encombrement de la liaison vers lUniversité mais également un problème de respect de la vie privée ;
  • pour limiter et choisir le trafic passant par le VPN on va avoir besoin d’une route_par défaut passant par le VPN uniquement pour les outils que l’on veut: connexion ssh, navigateur web par exemple.

Petit rappel: la route par défaut est le chemin qu’emprunte les datagrammes IP dont l’adresse IP n’est pas connue localement, autrement dit c’est le routeur de sortie.

Comment disposer de plusieurs route par défaut? En utilisant plusieurs piles TCP/IP!

Tout d’abord, vous installerez l’outil de mise en place du VPN de l’Université:

$ sudo apt install openfortivpn

On va avoir besoin de 3 scripts distincts:

  • build_architecture pour disposer d’une nouvelle pile TCP/IP, c-à-d d’une nouvelle pile réseau avec sa propre route par défaut;
  • govpn pour déclencher le VPN dans la nouvelle pile réseau créée.
  • netns pour démarrer un shell utilisant la nouvelle pile réseau créée;

Soit le script build_architecture:

#!/bin/bash -x

mkdir -p /etc/netns/vpn
echo 'nameserver 1.1.1.1' > /etc/netns/vpn/resolv.conf
ip l add vers-vpn type veth peer name vpn-eth0
ip netns add vpn
ip link set vpn-eth0 netns vpn
ip netns exec vpn ip link set lo up
ip netns exec vpn ip link set vpn-eth0 up
ip netns exec vpn ip address add 10.0.10.1/24 dev vpn-eth0
ip netns exec vpn ip route add default via 10.0.10.254
ip link set dev vers-vpn up
ip address add 10.0.10.254/24 dev vers-vpn
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -j MASQUERADE

Le script netns:

#!/bin/bash
cp ~/.bashrc /tmp/temp.bashrc
echo "PS1=\"\$PS1[$1] \"" >> /tmp/temp.bashrc
sudo ip netns exec $1 sudo -u $USER -- bash --rcfile /tmp/temp.bashrc

Et enfin le contenu du fichier govpn:

#!/bin/bash

ip netns exec vpn openfortivpn -u toto u-vpn.unilim.fr

Vous remplacerez toto par votre nom de compte pour l’accès aux services de l’Université.

Comment ça marche le tout?

On crée la nouvelle pile réseau:

$ sudo ./build_architecture
+ mkdir -p /etc/netns/vpn
+ echo 'nameserver 1.1.1.1'
+ ip l add vers-vpn type veth peer name vpn-eth0
+ ip netns add vpn
+ ip link set vpn-eth0 netns vpn
+ ip netns exec vpn ip link set lo up
+ ip netns exec vpn ip link set vpn-eth0 up
+ ip netns exec vpn ip address add 10.0.10.1/24 dev vpn-eth0
+ ip netns exec vpn ip route add default via 10.0.10.254
+ ip link set dev vers-vpn up
+ ip address add 10.0.10.254/24 dev vers-vpn
+ sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
+ iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -j MASQUERADE

Puis on démarre le VPN:

❯ sudo ./govpn
VPN account password:
INFO:   Connected to gateway.
INFO:   Authenticated.
INFO:   Remote gateway has allocated a VPN.
Using interface ppp0
Connect: ppp0 <--> /dev/pts/3
INFO:   Got addresses: [164.81.24.13], ns [164.81.1.4, 164.81.1.5]
INFO:   negotiation complete
INFO:   Got addresses: [164.81.24.13], ns [164.81.1.4, 164.81.1.5]
INFO:   negotiation complete
INFO:   negotiation complete
local  IP address 164.81.24.13
remote IP address 192.0.2.1
INFO:   Interface ppp0 is UP.
INFO:   Setting new routes...
INFO:   Adding VPN nameservers...
INFO:   Tunnel is up and running.

Ce dernier script vous demande de rentrer votre mot de passe de compte à l’Université

Ensuite, dans un nouveau shell vous pouvez rejoindre/utiliser la nouvelle pile réseau :

$ ./netns vpn
$ [vpn] ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1354 qdisc fq_codel state UNKNOWN group default qlen 3
    link/ppp
    inet 164.81.24.13 peer 192.0.2.1/32 scope global ppp0
       valid_lft forever preferred_lft forever
4: vpn-eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ee:c3:99:a3:4c:a6 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.10.1/24 scope global vpn-eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::ecc3:99ff:fea3:4ca6/64 scope link
       valid_lft forever preferred_lft forever
$ [vpn]

On voit que l’interface ppp0 correspond au tunnel avec une adresse définie dans le réseau de l’Université

Si je vérifie où je suis:

$ [vpn] curl ipinfo.io
{
  "ip": "164.81.24.13",
  "city": "Limoges",
  "region": "Nouvelle-Aquitaine",
  "country": "FR",
  "loc": "45.8336,1.2476",
  "org": "AS1935 Renater",
  "postal": "87000",
  "timezone": "Europe/Paris",
  "readme": "https://ipinfo.io/missingauth"
}
$ [vpn]

Je suis bien à l’Université, et je peux maintenant me connecter à la machine agate.unilim.fr puis sur une machine de TP comme par exemple fst-o-i-211-03.unilim.fr

Dernière modification: 26/10/2021