Le VPN d’accès à l’Université est configuré à l’aide de fortivpn :
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é.
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