evrardjp.tinc
Tinc
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
aveccommand: /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
ansible-galaxy install evrardjp.tinc