GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Installer un VPN avec Tinc sur Ubuntu 16.04 LTS

Un réseau privé virtuel (VPN) est un réseau privé sécurisé qui fonctionne sur un réseau public plus vaste tel qu'Internet. Les VPN sont devenus de plus en plus populaires ces dernières années, en grande partie parce qu'ils offrent une sécurité et une confidentialité accrues sans qu'il soit nécessaire de configurer un nouveau matériel coûteux et complexe. Ils offrent également plusieurs autres avantages, notamment une réduction des coûts de mise en réseau et de support.

Les VPN fonctionnent en créant un tunnel crypté à travers un réseau public et en l'utilisant pour envoyer des données en toute sécurité entre les serveurs et les terminaux. Ces connexions peuvent être chiffrées de différentes manières, et il existe de nombreux clients et démons VPN différents pour s'adapter à votre architecture, votre budget et votre niveau d'expérience.

Tinc est l'une de ces solutions (1). Démon VPN open source, il est désormais disponible pour une large gamme de plates-formes et présente plusieurs avantages par rapport aux clients VPN similaires. Il offre un cryptage sécurisé et fiable, une compression facultative et est facilement extensible à mesure que votre réseau se développe. Le routage entièrement maillé automatique signifie que le trafic VPN est toujours (dans la mesure du possible) envoyé directement à la machine de destination, sans subir de transferts intermédiaires, ce qui améliore considérablement la sécurité en limitant la possibilité de vol de données (3). De plus, étant donné que le VPN Tinc apparaît au niveau du code réseau IP comme un périphérique réseau normal, après la configuration d'un VPN Tinc, il n'est pas nécessaire d'adapter le logiciel existant. Cela rend le VPN Tinc intrinsèquement évolutif.

Le seul problème mineur avec Tinc est que certaines personnes l'ont trouvé un peu difficile à configurer. Si cela vous ressemble, n'ayez crainte - aujourd'hui, je vais vous expliquer comment (plus ou moins) facilement mettre en place un VPN Tinc sur vos serveurs.

Prérequis

Pour suivre entièrement ce didacticiel, vous aurez besoin d'au moins trois serveurs Ubuntu 16.04 et d'un accès root sur chaque machine. Si vous ne l'avez pas ou n'êtes pas sûr de ce que cela signifie, ce tutoriel n'est pas pour vous - vous devriez d'abord vérifier comment configurer un serveur avec Ubuntu (2).

Si vous construisez un système de serveur à partir de zéro, vous devez d'abord réfléchir à la façon dont vos machines vont communiquer entre elles. Dans ce didacticiel, je vais utiliser les noms de variables que je pense que la plupart des gens choisiraient, mais sachez que vous devrez peut-être adapter certains des noms de variables en fonction de votre propre configuration.

Si vous souhaitez suivre exactement ce tutoriel, vous allez d'abord devoir configurer deux VPS dans le même centre de données, puis créer un troisième VPS dans un deuxième centre de données. Mes centres de données s'appellent NYC2, qui a les deux VPS, et AMS2, qui a le troisième. Ces VPS sont appelés comme suit :

externalnyc - Tous nos nœuds VPN vont se connecter à ce serveur, ce qui signifie qu'il doit rester connecté et disponible pour assurer le bon fonctionnement du réseau. Si vous souhaitez éventuellement ajouter des serveurs supplémentaires à votre configuration, ils devront être configurés de la même manière que externalnyc.

internalnyc - Ce VPS se connecte au nœud VPN externalnyc à l'aide d'une interface réseau privée.

ams1 – Il s'agit de notre connexion VPN publique. Il se connecte à externalnyc en utilisant l'internet public.

Objectif

Ce que nous voulons réaliser est le suivant :

Notre réseau privé est représenté par la ligne verte et connecte les trois serveurs. L'orange est notre réseau privé, reliant les deux serveurs NYC2. Les trois serveurs peuvent se connecter via le VPN, bien que le réseau privé ne soit pas accessible à AMS1.

Pour ce faire, suivez ces étapes :

Installer Tinc

Tout d'abord, nous devons installer Tinc. Comme toujours, assurez-vous que tous vos référentiels apt sont à jour en exécutant :

sudo apt-get update

Ensuite, installez Tinc de manière standard via apt :

sudo apt-get install tinc

Et c'est tout! Votre machine va maintenant télécharger Tinc, ainsi que tous les prérequis dont vous avez besoin. Nous devons maintenant jeter un œil à la configuration.

Configuration

La configuration de Tinc peut être un peu différente des autres VPN auxquels vous êtes habitué. Il utilise un "netname" pour distinguer un VPN d'un autre, cela devient très utile lorsque vous avez plusieurs VPN fonctionnant via Tinc, mais c'est un peu contre-intuitif au début. Puisqu'il s'agit de notre premier réseau Tinc, restons simples et appelons notre VPN "netname".

Maintenant pour chacun de nos serveurs. Chacun aura besoin de trois composants de configuration :

Les fichiers de configuration :tinc.conf, tinc-up, tinc-down et un nombre facultatif d'autres fichiers.

Paires de clés publiques et privées :elles sont destinées au chiffrement et à l'authentification.

Fichiers de configuration de l'hôte :ils contiennent des clés publiques et d'autres éléments de configuration VPN.

Configurons maintenant tour à tour chacun de nos serveurs. Tout d'abord, externalnyc.

Configurer externalnyc

OK, maintenant aux écrous et boulons. Sur externalnyc, commencez par créer la structure du répertoire de configuration pour le nom de réseau VPN. Exécuter :

sudo mkdir -p /etc/tinc/netname/hosts

Ouvrez maintenant tinc.conf dans l'éditeur de texte de votre choix :

sudo vi /etc/tinc/netname/tinc.conf

Une fois que vous avez le fichier devant vous, ajoutez ce qui suit au bas du fichier :

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Tout ce que vous faites ici est de configurer un nœud appelé externalnyc, et de dire au serveur que son interface réseau utilisera ipv4 et s'appellera "tun0". Enregistrez le fichier et fermez-le.

Ensuite, nous devons créer un fichier de configuration d'hôte pour externalnyc. Pour cela, ouvrez le fichier de configuration des hosts dans un éditeur de texte :

 sudo vi /etc/tinc/netname/hosts/externalnyc

Encore une fois, ajoutez quelques lignes au bas de ce fichier, en remplaçant l'adresse IP publique de votre VPS dans la première ligne :

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

C'est le fichier que les autres serveurs utiliseront pour se connecter à externalnyc. L'adresse indique aux autres nœuds comment et où se connecter à ce serveur, et l'adresse de sous-réseau est le sous-réseau sur lequel ce démon fonctionnera. Encore une fois, enregistrez vos modifications dans ce fichier et fermez-le.

Nous devons maintenant générer la paire de clés publique / privée pour cet hôte. C'est assez simple, lancez simplement :

 sudo tincd -n netname -K4096

Cela crée une clé RSA privée et ajoute une paire de clés publiques à la fin du fichier de configuration que nous venons de créer. Vous pouvez l'ouvrir à nouveau pour voir que cela a été fait, si vous le souhaitez.

Maintenant, nous devons créer tinc-up, un petit script qui s'exécutera au démarrage de notre VPN. Ouvrez le fichier suivant pour le modifier :

 sudo vi /etc/tinc/netname/tinc-up

Et ajoutez :

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Chaque fois que le nom de réseau VPN est démarré, ce script s'exécute. Il créera une interface réseau à utiliser par notre VPN, et sur ce VPN externalnyc aura une IP de 10.0.0.1.

Mais lorsque le VPN est arrêté, nous voulons que cette interface réseau disparaisse, nous avons donc besoin d'un script supplémentaire. Cela devrait être ajouté à tinc-down. Ouvrir :

 sudo vi /etc/tinc/netname/tinc-down

Et puis ajoutez :

#!/bin/sh
ifconfig $INTERFACE down

Et encore une fois, enregistrez et quittez. Nous avons maintenant nos scripts, mais pour qu'ils fonctionnent, ils doivent être marqués comme exécutables. C'est assez simple, en utilisant la ligne de commande :

sudo chmod 755 /etc/tinc/netname/tinc-*

Enregistrez et quittez, et vous avez fini de configurer ce serveur. Ensuite, internalnyc et ams1.

Configurer internalnyc et ams1

Pour configurer les deux serveurs restants, vous devez exécuter les mêmes commandes sur chaque machine. Il existe quelques variantes mineures, que je soulignerai, mais le processus est fondamentalement le même.

Comme nous l'avons fait avec externalnyc ci-dessus, nous devons d'abord créer la structure de répertoires pour nos fichiers de configuration. Sur chaque serveur, exécutez ce qui suit, puis ouvrez le fichier de configuration Tinc pour le modifier :

 sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf

Ajoutez ensuite quelques lignes au bas de ce fichier, en remplaçant "node_name" par le nom de chaque nœud :

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

Vous pouvez voir que nos deux serveurs sont maintenant configurés pour tenter de se connecter à externalnyc. Enregistrez ce fichier et fermez-le.

Nous devons maintenant créer le fichier de configuration des hôtes. Exécuter :

 sudo vi /etc/tinc/netname/hosts/node_name

Ensuite, pour internalnyc, ajoutez cette ligne :

Subnet = 10.0.0.2/32

Et pour ams1, ajoutez cette ligne :

Subnet = 10.0.0.3/32

La seule différence ici est que les adresses diffèrent, nous pouvons donc distinguer nos serveurs. Enregistrez ce fichier et fermez-le.

Maintenant, comme avant, nous devons générer nos paires de clés publiques / privées et créer le script de démarrage de l'interface réseau. Sur chaque serveur, exécutez :

 sudo tincd -n netname -K4096

Et ensuite :

 sudo vi /etc/tinc/netname/tinc-up

À présent. Pour chaque serveur, nous devons utiliser les adresses que nous avons spécifiées précédemment. Si vous me suivez précisément, pour internalnyc vous devez ajouter :

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Et pour ams1 :

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Mais, si vous avez spécifié des adresses différentes ci-dessus, modifiez-les également ici. Enregistrez ces fichiers et quittez. Nous y sommes presque.

Nous avons juste besoin de faire le script d'arrêt de l'interface réseau, comme avant :

 sudo vi /etc/tinc/netname/tinc-down

Et ajoutez ensuite cette ligne sur les deux serveurs :

ifconfig $INTERFACE down

Et la toute dernière configuration consiste à rendre nos nouveaux scripts exécutables :

 sudo chmod 755 /etc/tinc/netname/tinc-*

Sauvegarder et quitter. Phew. Si tout s'est bien passé, les trois serveurs sont maintenant configurés. Passons maintenant à l'implémentation de la cryptographie.

Distribuer des clés

Si vous utilisez déjà un système de gestion de configuration, vous avez de la chance. Dans un monde idéal, chaque nœud que nous avons maintenant créé doit pouvoir dialoguer directement avec un autre nœud à l'aide d'une interface à clé publique/privée. Les clés, comme nous l'avons vu plus haut, se trouvent désormais dans les fichiers de configuration des hôtes de chaque serveur. Dans le réseau simple que nous créons ici, en fait, seul externalnyc a besoin d'échanger des clés avec les autres nœuds.

Et donc, la façon la plus simple de le faire est simplement de copier chaque clé publique sur tous les membres des différents nœuds. C'est en fait assez simple, faites juste attention à changer la valeur "adresse" dans le fichier de configuration d'externalnyc en sa propre adresse IP privée lorsque vous la copiez. De cette façon, la connexion sera établie sur le réseau privé.

Si vous m'avez suivi et appelé votre VPN "netname", les fichiers de configuration des hôtes sont ici :/etc/tinc/netname/hosts

Échanger des clés entre externalnyc et internalnyc

C'est simple. Sur internalnyc, recherchez le fichier de configuration des hôtes et copiez-le dans externalnyc :

 scp /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP:/tmp

Ensuite, sur externalnyc, copiez le même fichier au bon endroit :

 cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .

Maintenant, nous faisons la procédure inverse. Sur externalnyc, copiez le fichier de configuration des hôtes dans internalnyc :

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP:/tmp

Et ensuite sur internalnyc copiez le fichier pour qu'il soit au bon endroit :

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Nous devons maintenant modifier le fichier de configuration des hôtes d'externalnyc sur internalnyc afin que l'adresse soit correcte. C'est ainsi que les nœuds se connecteront au VPN via le réseau privé. Donc, sur internalnyc, ouvrez le fichier de configuration des hôtes pour externalnyc :

 sudo vi /etc/tinc/netname/hosts/externalnyc

Et remplacez la valeur de l'adresse par l'adresse IP privée d'externalnyc, comme ceci :

Address = externalnyc_private_IP

Enregistrez le fichier et quittez. Voilà ces deux clés faites. Il ne nous reste plus qu'à échanger les clés avec notre seul nœud restant.

Échanger des clés entre externalnyc et ams1

Le processus ici est assez similaire. À l'aide de ams1, copiez le fichier de configuration des hôtes dans externalnyc :

 scp /etc/tinc/netname/hosts/ams1 [email protected]_public_IP:/tmp

Et puis copiez-le à nouveau au bon endroit, en utilisant externalnyc :

 cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

En restant sur externalnyc, copiez le fichier dans l'autre sens, vers ams1 :

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP:/tmp

Et encore une fois, sur ams1, copiez ce fichier pour qu'il soit au bon endroit :

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Et vous avez terminé avec l'échange de clés. En théorie, vous disposez maintenant d'un VPN fonctionnel et crypté via Tinc. Si vous avez suivi ce tutoriel à la lettre, vous pouvez passer au test de votre configuration. Si, toutefois, vous avez également profité de l'occasion pour ajouter des nœuds supplémentaires, c'est le bon moment pour échanger toutes les clés dont vous aurez besoin.

N'oubliez pas que si vous utilisez un nœud central, comme je le fais ici, vous n'avez pas besoin de copier toutes les clés sur tous les serveurs. Cependant, si vous voulez que les nœuds puissent se parler directement, ils devront échanger des clés. Le processus pour ce faire est le même que celui que j'ai décrit ci-dessus :faites simplement autant d'itérations que nécessaire pour obtenir la connectivité souhaitée.

Tests

Vous devriez maintenant être prêt à tester. Pour ce faire, c'est une bonne idée de démarrer Tinc en mode débogage, afin que nous puissions détecter les erreurs et obtenir plus d'informations en cas de problème. N'oubliez pas qu'un VPN mal configuré peut en fait constituer un risque pour la sécurité, alors assurez-vous que tout fonctionne correctement avant de commencer à utiliser votre VPN pour quelque chose d'important.

Pour démarrer Tinc en mode débogage, sur chaque nœud, en commençant par externalnyc, exécutez :

 sudo tincd -n netname -D -d3

Si vous avez appelé votre VPN différemment, bien sûr, remplacez la variable "netname" par le nom approprié.

Une fois que le démon a démarré sur chaque nœud, il doit renvoyer une sortie vous donnant le nom de chaque nœud au fur et à mesure qu'ils se connectent. Si cela ne se produit pas, vous avez fait une erreur quelque part.

Maintenant, nous pouvons tester le VPN. Dans une nouvelle fenêtre sur ams1, envoyez un ping à internalnyc en utilisant son adresse IP. Nous l'avons attribué à 10.0.0.2 plus tôt, alors tapez :

 ping 10.0.0.2

Espérons que votre ping fonctionnera. Vous devriez également voir une sortie de débogage dans les autres fenêtres, décrivant les connexions que vous venez d'établir. Ams1 est maintenant connecté, via votre nouveau VPN, à externalnyc, et peut se connecter à internalnyc via celui-ci. Appuyez sur CTRL-C et le ping s'arrêtera.

Maintenant que vous disposez d'une connexion VPN sécurisée, vous pouvez l'utiliser pour tout autre type de communication réseau :connexions d'application, copie de fichiers, SSH ou tout ce que vous voulez.

Si votre ping n'a pas fonctionné, mais que vous pensez avoir tout fait correctement, il se peut qu'un pare-feu vous ait gêné. Vérifiez les paramètres de votre pare-feu et réessayez.

Tinc au démarrage

Juste une dernière chose. Si vous allez maintenant utiliser votre VPN Tinc pour tous vos réseaux, vous voudrez peut-être le configurer pour qu'il démarre au démarrage. Vous devrez le faire sur chaque nœud, en éditant le fichier de configuration nets.boot. Ouvrez le fichier en utilisant :

 sudo vi /etc/tinc/nets.boot

Et ajoutez ensuite le nom de votre nouveau VPN à ce fichier. Si vous avez choisi "netname" comme moi, cela ressemblera à ceci :

# This file contains all names of the networks to be started on system 	startup.
netname

Enregistrez et quittez, et vous avez terminé. Tinc fonctionne maintenant et démarrera au démarrage. Bravo.

Si vous avez besoin de contrôler Tinc, vous pouvez maintenant exécuter la commande "service" pour le faire. Sur chaque nœud, exécutez simplement :

 sudo service tinc start

Et amusez-vous. La plupart des contrôles de base peuvent être obtenus via cette commande.

Conclusion

Vous devriez maintenant avoir une connexion VPN sécurisée via Tinc sur toutes vos machines. Ce VPN peut être utilisé comme base pour développer d'autres fonctionnalités réseau.

Si vous souhaitez ajouter d'autres nœuds à l'avenir ou combiner Tinc avec d'autres VPN, Tinc vous permettra de le faire. Le processus pour chaque nœud supplémentaire est le même que celui décrit ci-dessus, et vous devriez pouvoir voir facilement quelles variables et adresses doivent être modifiées. N'oubliez pas que si vous voulez que les nœuds puissent se connecter directement les uns aux autres, vous devrez échanger directement les clés entre eux. Ainsi, Tinc fonctionne comme un VPN maillé, ce qui est un peu plus sécurisé que mon approche. Sinon, vous pouvez simplement configurer votre réseau comme je l'ai fait et tout passer par un nœud central.

Quoi qu'il en soit, vous êtes maintenant libre de jouer. Bonne chance !

Ressources

(1) https://www.tinc-vpn.org/

(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/


Ubuntu
  1. Installer mod_pagespeed avec Apache sur Ubuntu/CentOS

  2. Choses à faire après l'installation d'Ubuntu 16.04 LTS

  3. Déployer Modsecurity avec Nginx sur Ubuntu 20.04 LTS

  4. Installer Ms Office 2013 sur Ubuntu 12.04 Lts ?

  5. Je ne trouve pas les packages Sstp Vpn avec Ubuntu 16.04 Lts ?

Comment installer GitLab avec Docker sur Ubuntu 20.04 LTS

Installation de Nginx avec PHP5 (et PHP-FPM) et le support MySQL (LEMP) sur Ubuntu 12.04 LTS

Surveillance de Postfix avec Mailgraph sur Ubuntu 14.04 LTS

Installation d'Ubuntu 18.04 LTS [bureau et serveur]

Commande wc :expliquée avec 5 exemples dans Ubuntu 20.04 LTS

Comment installer FortiClient VPN sur Ubuntu 20.04 LTS