evrardjp.tinc

Tinc

Täglicher Status des Branch-Tests

Diese Rolle installiert tinc in einer Stern- oder Ringtopologie.

Die Knoten, die in der Gruppe [tinc_nodes] aufgelistet sind, bilden eine vollständige Liste der Knoten, an denen die Rolle angewendet/installiert wird.

Die Knoten in [tinc_spine_nodes] sind die "Kern"-Knoten, zu denen alle anderen Knoten verbunden sind.

Die Knoten in [tinc_leaf_nodes] verbinden sich nur mit den Kernknoten. Geräte hinter einem NAT wären ein Beispiel dafür.

Wenn alle [tinc_nodes] Teil der [tinc_spine_nodes] sind, haben Sie eine „ringförmige“ Topologie. Wenn Sie einen Knoten in [tinc_spine_nodes] haben, haben Sie eine „sternförmige“ Topologie.

Anforderungen

  • Ubuntu 18.04 / CentOS 7 (oder höher) / OpenWRT
  • Bei CentOS und höher muss das EPEL-Repo im Voraus konfiguriert werden.

Dafür können Sie Folgendes ausführen:

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

Rollenvariablen

  • tinc_key_size: Die Größe der generierten Schlüssel (Standard: 4096)
  • tinc_address_family kann ipv4/ipv6/any (oder undefiniert) sein
  • tinc_mode kann router, switch oder hub sein. (Siehe https://www.tinc-vpn.org/documentation/tinc.conf.5). (Standard: router)
  • tinc_netname: Der Name des tinc-Netzwerks
  • tinc_vpn_ip: Die IP, die einem einzelnen VPN-Endpunkt zugewiesen werden soll. Verwenden Sie Host-Variablen, um dies festzulegen.
  • tinc_vpn_cidr: Der CIDR, der im tinc-Netz verwendet wird (Standard: /24, oder erzwinge /32 im Routermodus).
  • tinc_vpn_interface: Das Gerät, das tinc verwenden soll, falls es mehrere Tun-Geräte gibt (Standard: tun0)
  • tinc_control_plane_bind_ip: Die IP, an die der tincd-Dienst binden soll (Standard: ansible_default_ipv4.address)

Das Inventar muss tinc_control_plane_bind_ip (für Kernknoten) und/oder tinc_vpn_ip (für Kern- und Randknoten) festlegen. Bitte schauen Sie sich die Aufgaben-Dateien an.

Beispiele

Router-Modus, Ring-Topologie

(Kurzes) Inventar:

[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

Router-Modus, Stern-Topologie

(Detailliertes) Inventar:

[tinc_nodes]
node1
node2
node3

[tinc_spine_nodes]
node1

[tinc_leaf_nodes]
node1
node2
node3

Gruppenvariablen für tinc_nodes:

tinc_netname: mynetname
tinc_vpn_interface: tun0

Host-Variablen für den Kernknoten, node1:

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

Host-Variablen für den Randknoten, node2:

tinc_vpn_ip: 10.10.0.11

Host-Variablen für den Randknoten, node3:

tinc_vpn_ip: 10.10.0.12

Abhängigkeiten

Keine

Beispiel-Playbook

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

Vergessen Sie nicht, die notwendigen Variablen in Ihrem Inventar festzulegen (siehe oben).

Tests

Tests basieren auf dem Ansible Molecule-Framework, das:

  • die Rollensyntax überprüft
  • mehrere Container mit unterschiedlichen Betriebssystemen startet (nur für Tests. Wir mischen keine Tinc-Versionen in der Produktion)
  • diese Rolle auf jeden Container anwendet
  • Idempotenz-Tests durchführt (sichert, dass der zweite Lauf keine unerwarteten Änderungen vornimmt)
  • überprüft, dass jeder vorbereitete Knoten andere Knoten über VPN anpingen kann

Tests werden in GitHub-Aktionen bei PRs und täglich ausgeführt. Zusätzlich können Sie sie auf Ihrer lokalen Maschine ausführen.

Abhängigkeiten, die Sie für das Ausführen der Tests installiert haben müssen:

Tests manuell mit Molecule direkt ausführen

Sie können vorhandene Tests für Stern- und Ringtopologien verwenden:

cd ansible-tinc
molecule test # dies führt die Standardtests für das Ring-Szenario aus
molecule test -s star

Der Befehl 'molecule test' führt das vollständige Szenario aus: 'create', 'converge', 'check idempotency', 'verify' und 'destroy'-Schritte. Oft möchten Sie nicht, dass der Container sofort zerstört wird, und benötigen Zugriff darauf, um Fehler zu beheben. Dazu kann es nützlich sein, 'molecule test' durch Folgendes zu ersetzen:

molecule converge # dies erstellt Container und wendet die Rolle an
molecule verify # führt Tests aus, die in molecule/default/verify.yml beschrieben sind

# nach beiden Schritten haben Sie aktive Docker-Container
# Sie können darauf mit den üblichen Befehlen 'docker ps', 'docker exec' usw. zugreifen

molecule destroy

Tests manuell mit tox ausführen

Tox ist ein Test-Runner für Python. Es installiert alle notwendigen Python-Abhängigkeiten (ansible, molecule[docker]) in einer virtuellen Umgebung.

Um einen Test auszuführen:

tox -e ansible-<version>-<tinc-szenario>

Siehe unterstützte Werte für version in tox.ini. Aktuelle testbare Szenarien für Tinc sind ring oder star. Positional-Argumente werden an den Befehl molecule test übergeben.

Zum Beispiel, um einen Test für ansible-2.9 mit der Ringtopologie auszuführen und zu verhindern, dass Molecule die Umgebung zerstört:

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

Wie man die Rolle mit einem neuen Betriebssystem testet

Fügen Sie ein neues Image zu molecule/default/molecule.yml und molecule/star/molecule.yml gemäß den vorhandenen Beispielen hinzu. Die Dateien sind ähnlich, abgesehen von den Variablen scenario.name und groups. Die nächsten Hinweise könnten hilfreich sein:

  • Der Code privileged: true mit command: /sbin/init aktiviert systemd, wenn der Container es unterstützt. Bitte vergessen Sie nicht, dass privilegierte Container in Ihrem System ein Risiko darstellen könnten.
  • Docker-Images haben möglicherweise nicht die Standardsoftware installiert, daher sorgt molecule/default/converge.yml dafür, dass notwendige Abhängigkeiten installiert werden.
  • Laut https://github.com/ansible-community/molecule/issues/959 erlaubt Docker nicht, /etc/hosts in einem Container zu ändern. Um dieses Problem zu umgehen, überspringen wir einen Schritt in tasks/tinc_configure.yml mit dem Tag molecule-notest und ändern /etc/hosts während der Erstellung des Containers - gemäß den entsprechenden Anweisungen in molecule/default/molecule.yml.

Lizenz

Apache2

Autor-Informationen

Jean-Philippe Evrard

Über das Projekt

Role to install tinc vpn in multiple topologies

Installieren
ansible-galaxy install evrardjp.tinc
Lizenz
apache-2.0
Downloads
1k