123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- ---
- format: markdown
- toc: yes
- title: Tinc mit Ansible konfigurieren
- categories: VPN
- ...
- 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](http://docs.ansible.com/ansible/index.html) 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 mindestens `tinc_hostname: ffdorX` enthalten 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, in `tinc_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, dann `tinc_install: no` setzen.
- - ... wird in `inventory/hosts` in 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.yaml` und 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/hosts` werden 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
- ~~~
|