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