Aller au contenu

Installation et configuration de Tinc VPN

Présentation

Tinc VPN permet de monter un réseau maillé. Il n'a a pas de serveur central comme avec OpenVPN ou bien Wireguard. Il est existe depuis 1998. C'est très simple à installer et très utile pour construire des infra résilientes distantes.

Installation de Tinc

Nom du réseau virtuel vpnql

Installation de Tinc sur le premier hôte vps01
$ apt install tinc

$ mkdir -p /etc/tinc/vpnql/hosts
$ touch /etc/tinc/vpnql/tinc-{up,down}
$ chmod +x /etc/tinc/vpnql/tinc-{up,down}

#################
$ vim /etc/tinc/vpnql/tinc.conf :

Name = vps01
AddressFamily = ipv4
Device = /dev/net/tun

#################
vim /etc/tinc/vpnql/hosts/vps01 :

Address = 192.168.1.17    # À remplacer par l'IP publique de l'hôte
Subnet = 192.168.200.1/32 # IP sur le réseau virtuel vpnql
Port = 655

#################
$ vim /etc/tinc/vpnql/tinc-up :

#!/bin/sh
ip link set $INTERFACE up
ip addr add 192.168.200.1/32 dev $INTERFACE  # IP virtuelle de l'hôte
ip route add 192.168.200.0/24 dev $INTERFACE # Réseau virtuel

#################
$ vim /etc/tinc/vpnql/tinc-down :

#!/bin/sh
ip route del 192.168.200.0/24 dev $INTERFACE
ip addr del 192.168.200.1/32 dev $INTERFACE
ip link set $INTERFACE down

################

$ tincd -n vpnql --generate-keys=4096
Generating 4096 bits keys:
.+.........+.....+..................+.+..............+.+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-....+..+...+................+.........+..+....+........+.+..+.......+..+.+.........+........+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-.+.+..+...+....+.........+..+.......+........+....+...+......+...........+.+.....+...+.+...........+.......+......+..+.............+......+...........+.............+.........+..+.+..+.......+...............+........+...+...+............+.........+.............+...........+.......+..+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ p
..+.............+..+...+.......+..+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-...+.+.....+....+........+...+....+...............+.....+...+.......+.....+...+....+.........+..+...+.+........+......+......+.+..+.+......+...+...+.........+.....+....+.........+..+......+.........+...+...+...+.......+...+...........+.+........+.......+..+.+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-.+................+.....+....+...+..............+...+.......+...+..+......+.........+....+.........+..+...+...+.........+...+.+.........+.....+............+...+......+......................+..+......+.+..................+.....................+............+...+...........+.+..+.+............+.....+...............+....+.....+.............+........+....+.........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ p
Done.
Please enter a file to save private RSA key to [/etc/tinc/vpnql/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/vpnql/hosts/vps01]:

###########################
$ cat /etc/tinc/vpnql/hosts/vps01 :

Address = 192.168.1.17
Subnet = 192.168.200.1/32
Port = 655

-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAtLOtfXiy(......)73mryzjECAwEAAQ==
-----END RSA PUBLIC KEY-----
Installation de Tinc sur le deuxième hôte vps02
$ apt install tinc

$ mkdir -p /etc/tinc/vpnql/hosts
$ touch /etc/tinc/vpnql/tinc-{up,down}
$ chmod +x /etc/tinc/vpnql/tinc-{up,down}

#################
$ vim /etc/tinc/vpnql/tinc.conf :

Name = vps02
AddressFamily = ipv4
Device = /dev/net/tun
ConnectTo = vps01 # IMPORTANT car sans cette option pas de connexion

#################
vim /etc/tinc/vpnql/hosts/vps02 :

Address = 192.168.1.18    # IP publique de l'hôte
Subnet = 192.168.200.2/32 # IP sur le réseau virtuel vpnql
Port = 655

#################
$ vim /etc/tinc/vpnql/tinc-up :

#!/bin/sh
ip link set $INTERFACE up
ip addr add 192.168.200.2/32 dev $INTERFACE  # IP virtuelle de l'hôte
ip route add 192.168.200.0/24 dev $INTERFACE # Réseau virtuel

#################
$ vim /etc/tinc/vpnql/tinc-down :

#!/bin/sh
ip route del 192.168.200.0/24 dev $INTERFACE
ip addr del 192.168.200.2/32 dev $INTERFACE
ip link set $INTERFACE down

################

$ tincd -n vpnql --generate-keys=4096
Generating 4096 bits keys:
.+.........+.....+..................+.+..............+.+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-....+..+...+................+.........+..+....+........+.+..+.......+..+.+.........+........+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-.+.+..+...+....+.........+..+.......+........+....+...+......+...........+.+.....+...+.+...........+.......+......+..+.............+......+...........+.............+.........+..+.+..+.......+...............+........+...+...+............+.........+.............+...........+.......+..+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ p
..+.............+..+...+.......+..+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-...+.+.....+....+........+...+....+...............+.....+...+.......+.....+...+....+.........+..+...+.+........+......+......+.+..+.+......+...+...+.........+.....+....+.........+..+......+.........+...+...+...+.......+...+...........+.+........+.......+..+.+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-.+................+.....+....+...+..............+...+.......+...+..+......+.........+....+.........+..+...+...+.........+...+.+.........+.....+............+...+......+......................+..+......+.+..................+.....................+............+...+...........+.+..+.+............+.....+...............+....+.....+.............+........+....+.........+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ p
Done.
Please enter a file to save private RSA key to [/etc/tinc/vpnql/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/vpnql/hosts/vps02]:

###########################
$ cat /etc/tinc/vpnql/hosts/vps02 :

Address = 192.168.1.18
Subnet = 192.168.200.2/32
Port = 655

-----BEGIN RSA PUBLIC KEY-----
MIICCgKCAgEAtLOtfXiy(......)73mryzjECAwEAAQ==
-----END RSA PUBLIC KEY-----

Connexion des hôtes

Transfert des fichiers de conf

Depuis l'hôte VPS01 :

$ cd /etc/tinc/vpnql/hosts/
$ scp vps01 root@vps02:/etc/tinc/vpnql/hosts/

Depuis l'hôte VPS02 :

$ cd /etc/tinc/vpnql/hosts/
$ scp vps02 root@vps01:/etc/tinc/vpnql/hosts/

Sur les deux hôtes :

systemctl enable --now tinc@vpnql

Test de connectivité réseau

VPS01

root@vps01:~# ping -c 3 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
64 bytes from 192.168.200.2: icmp_seq=1 ttl=64 time=1.11 ms
64 bytes from 192.168.200.2: icmp_seq=2 ttl=64 time=2.16 ms
64 bytes from 192.168.200.2: icmp_seq=3 ttl=64 time=0.933 ms

--- 192.168.200.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.933/1.399/2.159/0.541 ms

VPS02

root@vps02:~# ping -c 3 192.168.200.1 
PING 192.168.200.1 (192.168.200.1) 56(84) bytes of data.
64 bytes from 192.168.200.1: icmp_seq=1 ttl=64 time=1.73 ms
64 bytes from 192.168.200.1: icmp_seq=2 ttl=64 time=0.847 ms
64 bytes from 192.168.200.1: icmp_seq=3 ttl=64 time=0.963 ms

--- 192.168.200.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2034ms
rtt min/avg/max/mdev = 0.847/1.179/1.728/0.390 ms

Ajout d'un 3ème hôte

Faire comme avec les hôtes ci-dessus et renseigner vps03 dans leur tinc.conf.