evrardjp.tinc

Tinc

Statut du test quotidien de la branche

Ce rôle installe tinc dans une topologie en étoile ou en anneau.

Les nœuds listés dans le groupe [tinc_nodes] constituent une liste complète des nœuds pour lesquels appliquer/installler le rôle.

Les nœuds du groupe [tinc_spine_nodes] sont les nœuds "principaux", où tous les nœuds se connectent.

Les nœuds dans [tinc_leaf_nodes] se connectent uniquement aux nœuds principaux. Des appareils derrière un NAT en sont un exemple.

Si tous les [tinc_nodes] font partie de [tinc_spine_nodes], vous avez une topologie plus "en anneau". Si vous avez un nœud dans [tinc_spine_nodes], vous avez une topologie plus "en étoile".

Exigences

  • Ubuntu 18.04 / CentOS 7 (ou plus récent) / OpenWRT
  • Sur CentOS et versions supérieures, le dépôt EPEL doit être configuré à l'avance.

Pour ce faire, vous pouvez exécuter les commandes suivantes :

yum install epel-release || dnf install epel-release
yum update || dnf update

Variables de rôle

  • tinc_key_size : La taille des clés générées (par défaut : 4096)
  • tinc_address_family peut être ipv4/ipv6/tout (ou non défini)
  • tinc_mode peut être routeur, commutateur, ou hub. (Voir https://www.tinc-vpn.org/documentation/tinc.conf.5). (Par défaut : routeur)
  • tinc_netname : Le nom du réseau tinc
  • tinc_vpn_ip : L'ip à attribuer à un seul point de terminaison VPN. Utilisez des variables d'hôte pour le définir.
  • tinc_vpn_cidr : Le CIDR utilisé dans le réseau tinc (par défaut : /24, ou force /32 en mode routeur).
  • tinc_vpn_interface : Le périphérique que tinc doit utiliser, dans le cas où il y a plusieurs dispositifs tun (par défaut : tun0)
  • tinc_control_plane_bind_ip : L'ip à laquelle le service tincd doit se lier (par défaut : {{ ansible_default_ipv4.address }} )

L'inventaire doit définir tinc_control_plane_bind_ip (pour le cœur) et/ou tinc_vpn_ip (pour les nœuds principaux et périphériques). Veuillez consulter les fichiers de tâches.

Exemples

Mode routeur, topologie en anneau

(Inventaire court) :

[tinc_nodes:children]
tinc_spine_nodes
tinc_leaf_nodes

[tinc_spine_nodes]
node1 tinc_vpn_ip=10.10.0.11
node2 tinc_vpn_ip=10.10.0.12
node3 tinc_vpn_ip=10.10.0.13

[tinc_leaf_nodes]
node1
node2
node3

Mode routeur, topologie en étoile

(Inventaire détaillé) :

[tinc_nodes]
node1
node2
node3

[tinc_spine_nodes]
node1

[tinc_leaf_nodes]
node1
node2
node3

Variables de groupe pour tinc_nodes :

tinc_netname: mynetname
tinc_vpn_interface: tun0

Variables d'hôte pour le nœud principal, node1 :

tinc_control_plane_bind_ip: "{{ ansible_eth0.ipv4.address | default(ansible_default_ipv4.address) }}"
tinc_vpn_ip: 10.10.0.10

Variables d'hôte pour le nœud périphérique, node2 :

tinc_vpn_ip: 10.10.0.11

Variables d'hôte pour le nœud périphérique, node3 :

tinc_vpn_ip: 10.10.0.12

Dépendances

Aucune

Exemple de Playbook

Voir https://raw.githubusercontent.com/evrardjp/ansible-tinc/master/molecule/default/converge.yml

N'oubliez pas de définir les variables nécessaires dans votre inventaire (voir ci-dessus).

Tests

Les tests sont basés sur le framework Ansible Molecule qui :

  • vérifie la syntaxe du rôle
  • démarre plusieurs conteneurs avec différents systèmes d'exploitation (uniquement pour les tests. Nous ne mélangeons pas les versions de Tinc en production)
  • applique ce rôle à chaque conteneur
  • exécute des tests d'idempotence (s'assure que la seconde exécution n'apporte pas de modifications inattendues)
  • vérifie que chaque nœud préparé peut pinger d'autres nœuds via le VPN

Les tests sont exécutés dans des actions GitHub sur les pull requests et quotidiennement. De plus, vous pouvez les exécuter sur votre machine locale.

Les dépendances que vous devez avoir installées pour exécuter les tests :

Exécuter les tests manuellement, en utilisant Molecule directement

Vous pouvez utiliser les tests existants pour les topologies en étoile et en anneau :

cd ansible-tinc
molecule test # cela exécute les tests par défaut pour le scénario en anneau
molecule test -s star

La commande 'molecule test' exécute un scénario complet : 'create', 'converge', 'check idempotency', 'verify' et 'destroy'. Souvent, vous ne voulez pas que le conteneur soit détruit immédiatement et avez besoin d'y accéder pour déboguer. Pour cela, il peut être utile de remplacer 'molecule test' par :

molecule converge # cela crée des conteneurs et applique le rôle
molecule verify # exécute les tests décrits dans molecule/default/verify.yml

# après ces deux étapes, vous avez des conteneurs Docker en cours d'exécution
# vous pouvez y accéder avec les commandes habituelles 'docker ps', 'docker exec', etc.

molecule destroy

Exécuter les tests manuellement, en utilisant tox

tox est un lanceur de tests pour Python. Il installera toutes les dépendances Python nécessaires (ansible, molecule[docker]) dans un environnement virtuel.

Pour exécuter un test :

tox -e ansible-<version>-<scénario tinc>

Voir les valeurs prises en charge pour version dans tox.ini. Les scénarios testables actuels pour tinc sont anneau, ou étoile. Les arguments positionnels seront passés à la commande molecule test.

Par exemple, pour exécuter un test pour ansible-2.9, avec la topologie en anneau et éviter que molecule détruise l'environnement :

tox -e ansible-2.9-ring -- --destroy=never

Comment tester le rôle avec un nouveau système d'exploitation

Ajoutez une nouvelle image à molecule/default/molecule.yml et molecule/star/molecule.yml en suivant les exemples existants. Les fichiers sont similaires sauf pour les variables scenario.name et groups. Voici quelques points utiles :

  • le code privileged: true avec command: /sbin/init active systemd si le conteneur le supporte. Veuillez ne pas oublier que les conteneurs privilégiés dans votre système pourraient être un risque.
  • Les images Docker manquent de certains logiciels standards, donc molecule/default/converge.yml s'occupe d'installer les dépendances nécessaires.
  • Selon https://github.com/ansible-community/molecule/issues/959, Docker n'autorise pas la modification de /etc/hosts dans un conteneur. Pour contourner ce problème, nous sautons une étape avec le tag molecule-notest dans tasks/tinc_configure.yml et modifions /etc/hosts lors de la création du conteneur - en suivant les directives correspondantes dans molecule/default/molecule.yml.

Licence

Apache2

Informations sur l'auteur

Jean-Philippe Evrard

À propos du projet

Role to install tinc vpn in multiple topologies

Installer
ansible-galaxy install evrardjp.tinc
Licence
apache-2.0
Téléchargements
1k
Propriétaire