Comment installer Tinc et configurer un VPN de base sur Ubuntu 14.04

introduction

Dans ce didacticiel, nous verrons comment utiliser Tinc, un démon de réseau privé virtuel (VPN) open source, pour créer un VPN sécurisé sur lequel vos serveurs peuvent communiquer comme s'ils se trouvaient sur un réseau local. Nous montrerons également comment utiliser Tinc pour configurer un tunnel sécurisé dans un réseau privé. Nous utiliserons les serveurs Ubuntu 14.04, mais les configurations peuvent être adaptées à tout autre système d'exploitation.

Parmi les fonctionnalités utiles à Tinc, citons le cryptage, la compression facultative, le routage automatique par maille (le trafic VPN est acheminé directement entre les serveurs communicants, si possible) et l’expansion facile. Ces fonctionnalités différencient Tinc des autres solutions VPN telles que OpenVPN et en font une bonne solution pour créer un VPN à partir de nombreux petits réseaux géographiquement dispersés. Tinc est pris en charge sur de nombreux systèmes d'exploitation, notamment Linux, Windows et Mac OS X.

[.note] #Note: Si vous souhaitez configurer rapidement et facilement un VPN maillé Tinc, consultez ce tutoriel:How To Use Ansible and Tinc VPN to Secure Your Server Infrastructure.
#

Conditions préalables

Pour compléter ce didacticiel, vous devez disposer d’un accès root sur au moins trois serveurs Ubuntu 14.04. Les instructions pour configurer l'accès root peuvent être trouvées ici (étapes 3 et 4):Initial Server Setup with Ubuntu 14.04.

Si vous envisagez d'utiliser cela dans votre propre environnement, vous devrez planifier la manière dont vos serveurs doivent se connecter, et adapter les exemples présentés dans ce didacticiel à vos propres besoins. Si vous adaptez cela à votre propre configuration, veillez à remplacer les valeurs mises en surbrillance dans les exemples par vos propres valeurs.

Si vous souhaitez suivre ce didacticiel à la lettre, créez deux VPS dans le même centre de données, avec mise en réseau privée, et créez un autre VPS dans un centre de données séparé. Nous allons créer deux VPS dans le centre de données NYC2 et un dans le centre de données AMS2 avec les noms suivants:

  • externalnyc: tous les nœuds VPN se connecteront à ce serveur et la connexion doit être maintenue pour une fonctionnalité VPN appropriée. Des serveurs supplémentaires peuvent être configurés de la même manière que celui-ci pour assurer la redondance, si vous le souhaitez.

  • internalnyc: se connecte au nœud VPNexternalnyc à l'aide de son interface réseauprivate

  • ams1: se connecte au nœud VPNexternalnyc via l'Internet public

Notre objectif

Voici un diagramme du VPN que nous voulons configurer (décrit dans Conditions préalables):

Tinc VPN Setup

Le vert représente notre VPN, le gris représente l'Internet public et l'orange représente le réseau privé. Les trois serveurs peuvent communiquer sur le VPN, même si le réseau privé est inaccessible à ams1.

Commençons par installer Tinc!

Installez Tinc

Installez Tinc sur chaque VPS auquel vous souhaitez rejoindre le réseau privé. Commençons par mettre à jour apt:

sudo apt-get update

Puis installez Tinc via apt:

sudo apt-get install tinc

Maintenant que Tinc est installé, examinons la configuration de Tinc.

Configuration Tinc

Tinc utilise un «nom de réseau» pour distinguer un VPN Tinc d'un autre (dans le cas de plusieurs VPN) et il est recommandé d'utiliser un nom de réseau même si vous envisagez de configurer un seul VPN. Nous appellerons notre VPN «netname» pour plus de simplicité.

Chaque serveur faisant partie de notre VPN requiert les trois composants de configuration suivants:

  • Fichiers de configuration: tinc.conf, Tinc-up et Tinc-down, par exemple

  • Public/private key pairs: For encryption and node authentication

  • Fichiers de configuration de l'hôte: qui contiennent des clés publiques et une autre configuration de réseau privé virtuel

Commençons par configurer notre nœudexternalnyc.

Configurer externalnyc

Surexternalnyc, créez la structure de répertoire de configuration de notre VPN appelée «netname»:

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

Ouvrez maintenant tinc.conf pour l'édition:

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

Maintenant, ajoutez les lignes suivantes:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Cela configure simplement un nœud appeléexternalnyc, avec une interface réseau qui utilisera IPv4 appelée «tun0». Sauvegarder et quitter.

Ensuite, créons un fichier de configuration d'hôtesexternalnyc:

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

Ajoutez-y les lignes suivantes (remplacez ici l'adresse IP publique de votre VPS):

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

En fin de compte, ce fichier sera utilisé sur d'autres serveurs pour communiquer avec ce serveur. L'adresse spécifie comment les autres nœuds vont se connecter à ce serveur et le sous-réseau spécifie le sous-réseau que ce démon servira. Sauvegarder et quitter.

Générez maintenant la paire de clés publique / privée pour cet hôte avec la commande suivante:

sudo tincd -n netname -K4096

Cela crée la clé privée (/etc/tinc/netname/rsa_key.priv) et ajoute la clé publique au fichier de configuration des hôtes deexternalnycque nous avons récemment créé (/ etc / tinc / netname / hosts / externalnyc).

Nous devons maintenant créertinc-up, le script qui s'exécutera à chaque démarrage de notre VPNnetname. Ouvrez le fichier pour le modifier maintenant:

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

Ajoutez les lignes suivantes:

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

Lorsque nous démarrons notre VPN, ce script s’exécute pour créer l’interface réseau que notre VPN utilisera. Sur le VPN, ce serveur aura une adresse IP de 10.0.0.1.

Créons également un script pour supprimer l’interface réseau lorsque notre VPN est arrêté:

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

Ajoutez les lignes suivantes:

#!/bin/sh
ifconfig $INTERFACE down

Sauvegarder et quitter.

Enfin, rendre les scripts de réseau tinc exécutables:

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

Sauvegarder et quitter.

Passons à nos autres nœuds.

Configurez internalnyc et ams1

Ces étapes sont nécessaires à la fois surinternalnyc etams1, avec de légères variations qui seront notées.

Surinternalnyc etams1, créez la structure de répertoire de configuration de notre VPN appelée «netname» et éditez le fichier de configuration Tinc:

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

Ajoutez les lignes suivantes (remplacez le nom par le nom du noeud):

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

Ces nœuds sont configurés pour tenter de se connecter à «externalnyc» (le nœud que nous avons créé auparavant). Sauvegarder et quitter.

Ensuite, créons le fichier de configuration des hôtes:

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

Pourinternalnyc, ajoutez cette ligne:

Subnet = 10.0.0.2/32

Pourams1, ajoutez cette ligne:

Subnet = 10.0.0.3/32

Notez que les nombres diffèrent. Sauvegarder et quitter.

Ensuite, générez les paires de clés:

sudo tincd -n netname -K4096

Et créez le script de démarrage de l'interface réseau:

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

Pourinternalnyc, ajoutez cette ligne:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Pourams1, ajoutez cette ligne:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Ces adresses IP indiquent comment ces nœuds seront accessibles sur le VPN. Sauvegarder et quitter.

Créez maintenant le script d'arrêt de l'interface réseau:

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

Et ajoutez cette ligne:

ifconfig $INTERFACE down

Sauvegarder et quitter.

Enfin, rendre les scripts de réseau tinc exécutables:

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

Sauvegarder et quitter.

Nous devons maintenant distribuer les fichiers de configuration des hôtes sur chaque nœud.

Distribuer les clés

Si vous utilisez un système de gestion de la configuration, voici une bonne application. Au minimum, chaque nœud qui veut communiquer directement avec un autre nœud doit avoir échangé des clés publiques, qui se trouvent à l'intérieur des fichiers de configuration des hôtes. Dans notre cas, par exemple, seulexternalnyc a besoin d'échanger des clés publiques avec les autres nœuds. Il est plus facile à gérer si vous copiez chaque clé publique sur tous les membres du nœud. Notez que vous souhaiterez remplacer la valeur «Adresse» du fichier de configuration des hôtes deexternalnyc par son adresse IP privée lorsqu'elle est copiée versinternalnyc, afin que la connexion soit établie sur le réseau privé.

Comme notre VPN s'appelle «netname», voici l'emplacement des fichiers de configuration des hôtes:/etc/tinc/netname/hosts

Clés d'échange entre externalnyc et internalnyc

Surinternalnyc, copiez son fichier de configuration d'hôtes dansexternalnyc:

scp /etc/tinc/netname/hosts/internalnyc user@externalnyc_private_IP:/tmp

Puis surexternalnyc, copiez le fichier deinternalnyc à l'emplacement approprié:

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

Puis surexternalnyc à nouveau, copiez son fichier de configuration d'hôtes dansinternalnyc:

scp /etc/tinc/netname/hosts/externalnyc user@internalnyc_private_IP:/tmp

Surinternalnyc, copiez le fichier deexternalnyc à l'emplacement approprié:

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

Surinternalnyc, éditons le fichier de configuration des hôtes deexternalnyc afin que le champ "Adresse" soit défini sur l'adresse IP privée deexternalnyc (donc internalnyc se connectera au VPN via le réseau privé). Modifiez le fichier de configuration des hôtes deexternalnyc:

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

Remplacez la valeur "Adresse" par l'adresse IP privée deexternalnyc:

Address = externalnyc_private_IP

Sauvegarder et quitter. Passons maintenant au noeud restant, ams1.

Clés d'échange entre externalnyc et ams1

Surams1, copiez son fichier de configuration d'hôtes dansexternalnyc:

scp /etc/tinc/netname/hosts/ams1 user@externalnyc_public_IP:/tmp

Puis surexternalnyc, copiez le fichier deams1 à l'emplacement approprié:

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

Puis surexternalnyc à nouveau, copiez son fichier de configuration d'hôtes dansams1:

scp /etc/tinc/netname/hosts/externalnyc user@ams1_public_IP:/tmp

Surams1, copiez le fichier deexternalnyc à l'emplacement approprié:

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

Échange de clés entre des nœuds supplémentaires

Si vous créez un VPN plus grand, le moment est venu d'échanger les clés entre ces autres nœuds. N'oubliez pas que si vous souhaitez que deux nœuds communiquent directement l'un avec l'autre (sans serveur de transfert entre eux), ils doivent avoir échangé leurs fichiers de configuration clés / hôtes et accéder aux interfaces réseau réelles de chacun. De plus, il suffit de copier chaque configuration d’hôte sur chaque nœud du VPN.

Testez notre configuration

Sur le nœudeach, en commençant parexternalnyc, démarrez Tinc en mode débogage comme ceci (netname est le nom de notre VPN):

sudo tincd -n netname -D -d3

Après le démarrage du démon sur chaque nœud, vous devriez voir une sortie avec les noms de chaque nœud lorsqu’ils se connectent à externalnyc. Maintenant, testons la connexion sur le VPN.

Dans une fenêtre séparée, surams1, envoyez un ping à l'adresse IP VPN de internalnyc (que nous avons attribuée à 10.0.0.2, plus tôt):

ping 10.0.0.2

Le ping devrait fonctionner correctement et vous devriez voir une sortie de débogage dans les autres fenêtres concernant la connexion sur le VPN. Cela indique que ams1 est capable de communiquer via le VPN via externalnyc vers internalnyc. Appuyez sur CTRL-C pour quitter le ping.

Vous pouvez également utiliser les interfaces VPN pour effectuer toute autre communication réseau, telle que les connexions à des applications, la copie de fichiers et SSH.

Sur chaque fenêtre de débogage du démon Tinc, quittez le démon en appuyant sur CTRL-.

Note: si les connexions ne fonctionnent pas, assurez-vous que votre pare-feu ne bloque pas les connexions ou le transfert.

Configurer Tinc au démarrage au démarrage

Avant que le script d'initialisation Tinc ne fonctionne correctement, nous devons mettre le nom de notre VPN dans le fichier de configuration denets.boot.

Sureach node, modifiez nets.boot:

sudo vi /etc/tinc/nets.boot

Ajoutez le nom de votre / vos VPN dans ce fichier. Le nôtre est “netname”:

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

Sauvegarder et quitter. Tinc est maintenant configuré pour démarrer au démarrage, et il peut être contrôlé via la commandeservice. Si vous souhaitez le démarrer maintenant, exécutez la commande suivante sur chacun de vos nœuds:

sudo service tinc start

Félicitations! Votre VPN Tinc est configuré.

Conclusion

Maintenant que vous avez suivi ce didacticiel, vous devez disposer de bonnes bases pour développer votre VPN afin de répondre à vos besoins. Tinc est très flexible et tout nœud peut être configuré pour se connecter à tout autre nœud (auquel il peut accéder via le réseau) afin de pouvoir agir en tant que VPN maillé, sans s'appuyer sur un seul nœud.

Bonne chance!

Related