Tinc mit Ansible konfigurieren
Notation: ffdorX = Name des Tinc hosts (X = 1,2,…); ffdotT = Tinc Instanz (T = a,b,…).
Konfiguration
Zunächst kopierst Du dieses Verzeichnis hier (also das, in dem dieses README liegt:) rekursiv auf Deinen Ansible controller (zB Laptop), etwa nach ~/ansible. Dort führst Du die folgenden Konfigurationen durch.
inventory
Ein Tinc host namens ffdorX …
- … erhält ein file
inventory/host_vars/ffdorX.yaml, in dem mindestenstinc_hostname: ffdorXenthalten ist.
Wenn der tincd dieses hosts von außen erreichbar ist, dann sollte die lokale Adresse, mit denen er auf Verbindungen von außen lauschen soll, intinc_bindtoaddresses: [ "A.B.C.D" ]gesetzt werden. Befindet sich der host hinter NAT mit port forwarding, so ist das seine lokale RFC1918-Adresse, an die der NAT router weiterleitet.
Falls Ansible nur benutzt wird, um die Tinc Konfiguration für den Router ffdorX zu erzeugen, aber nicht um sie direkt per Ansible zu installieren, danntinc_install: nosetzen. - … wird in
inventory/hostsin diejenigen Tinc groups eingetragen, an denen er teilnehmen soll. Also jeweils unter [ffdotT] sowie dem zutreffenden Betriebssystem [FreeBSD] bzw. [Linux]. - … wird in die Variablendefinitionen der Tinc-Instanzen, an denen er teilnimmt, eingetragen. Diese befinden sich in
inventory/role_vars/ffdotT.yamlund umfassen je beteiligtem host folgende Variablen:
- tinc_hostname: ffdorX
tinc_hostnumber: X
tinc_addresses: [ "A.B.C.D", "A:B::C:D" ]
tinc_fib: F
tinc_addresses (optional) sind die public IPs, unter denen dieser tincd Prozess erreichbar ist. tinc_fib (optional) ist die FIB (forwarding table des kernels), welche der tincd dieser Instanz benutzen soll. (tinc_fib funktioniert zZ nur mit FreeBSD; für Linux lässt sich das hoffentlich noch klären.)
secret
Das Unterverzeichnis secret für die Tinc keys befindet sich nicht hier im repository. Du legst es also manuell an:
- In das Verzeichnis
secret/tinc/ffdotT/hostswerden die public keys der an Instanz T beteiligten hosts gelegt. (Ohne “Address” Zeilen o.dgl.!) - Für den host ffdorX, dessen Konfiguration Du mit Ansible erzeugst, legst Du dessen private key für die Instanz ffdotT an die Stelle
secret/tinc/ffdotT/ffdorX.priv. Existiert dieser noch nicht, erzeugt Ansible ein Schlüsselpaar. (Zur Erzeugung eines Schlüsselpaares wird ein installierter tincd auf dem Ansible controller benötigt.)
Benutzung
Der Aufruf von Ansible erfolgt im Ansible-Verzeichnis (also zB ~/ansible) mit
ansible-playbook Tinc.yaml
Wenn die Konfiguration stimmig ist, findest Du anschließend im Unterverzeichnis staging/ffdorX die für den host ffdorX erzeugten Tinc-Dateien.
Den Inhalt von staging/ffdorX kannst Du nun manuell auf den host ffdorX kopieren (zB als tarball).
Wenn Du den Router ffdorX mit Ansible direkt managen willst (und dort Python und sudo installiert hast), dann solltest Du in inventory/host_vars/ffdorX.yaml ein tinc_install: yes setzen. Der aktuelle default Wert für diese und einige andere Variablen befindet sich roles/tinc/defaults/main.yaml.
Nach getaner Arbeit kannst Du im Ansible-Verzeichnis mit rm -rf staging work aufräumen. Dort befinden sich nur Dateien, die von Ansible (bei jedem Durchlauf des playbooks) generiert werden.
Du kannst das Result eines Durchlaufs aber auch zur Seite legen, um es mit dem Ergebnis eines Folgedurchlaufs zu vergleichen. Etwa um zu sehen, ob Deine Veränderungen an der Ansible-Konfiguration die gewünschten Änderungen am Ergebnis (also der Tinc-Konfiguration) erbracht haben:
% ansible-playbook Tinc.yaml
% mv staging staging.bak
% # vi inventory/...
% # vi roles/tinc/templates/...
% ansible-playbook Tinc.yaml
% diff -r staging.bak staging
