Dienst:Tinc: Unterschied zwischen den Versionen
Kerel (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
Yanosz (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Infrastruktur]] | |||
{{:Archiv-Hinweis}} | |||
[[Kategorie:Infrastruktur]] | [[Kategorie:Infrastruktur]] | ||
[[Kategorie:Dienste]] | [[Kategorie:Dienste]] |
Aktuelle Version vom 28. August 2019, 11:15 Uhr
Hinweis: Diese Seite wurde in das Archiv verschoben. Die Informationen sind größtenteils veraltet und nur für Spezialfälle relevant.
Veraltet - nicht mehr verwenden
Einleitung
Ein Tinc-VPN http://www.tinc-vpn.org/ verbindet alle Nodes mit Internet-Uplink. Das Intracity-VPN arbeitet im Switched-Mode: alle Nodes werden zu einer gemeinsamen OSI-2 Broadcast-Domäne zusammengefasst. Über die Tinc-Verbindungen werden ausschließlich batman-adv Pakete versendet.
In der Node-Fimrware sind die Tinc-Server vpn1, vpn2, vpn3, vpn4 (.kbu.freifunk.net) konfiguriert. Im DNS zeigt ein CName-Alias auf den entsprechenden Host. (vpn2.kbu.freifunk.net -> felicitas.kbu.freifunk.net). Aktuell sind lediglich vpn2 und vpn3 in Betrieb.
Per Konvention ist der Tinc-Name jedes Nodes identisch mit der Hardware-Adresse (siehe Aufkleber Rückseite). Trennzeichen ( : bzw. - ) werden jedoch entfernt. Die folgende Abbildung zeigt die aktuelle Tinc-Topologie.
Tinc auf Felicitas
Felicitas steht allen Nodes als VPN-Server zur Verfügung. VPN-, DNS- und Masquerding Dienste werden ebenfalls auf Felicitas betrieben. Der folgende Abschnitt beschreibt die Tinc und Netzkonfiguration auf Felictas.
Tinc-Config
Felicitas verwendet zum Betrieb des intracity-VPN die folgende Konfiguration
#/etc/tinc/intracity/tinc.conf name = vpn2 Mode = switch ClampMSS = no Compression = 10 Cipher = none GraphDumpFile = /var/log/tinc/intracity-graph.dot ConnectTo vpn1 Address 195.54.164.203 DirectOnly = yes
Beim Start erstellt tinc ein gleichnamiges tap-Interface über das der Traffic abgewickelt wird.
# ifconfig intracity intracity Link encap:Ethernet HWaddr 1e:41:fc:07:df:4d inet6 addr: fe80::1c41:fcff:fe07:df4d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:142556 errors:0 dropped:0 overruns:0 frame:0 TX packets:39991 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:15853487 (15.1 MiB) TX bytes:15886286 (15.1 MiB)
Gleichzeitig wird batman-adv gestartet, das tinc-Interface batman-adv hinzugefügt und bat0 in die Bridge der Mesh-Cloud aufgenommen. Siehe: /etc/tinc/intracity/tinc-up
#!/bin/sh /sbin/insmod /usr/local/lib/batman-adv.ko /usr/sbin/batctl if add intracity /sbin/ifconfig intracity up ip link set up dev bat0 /usr/sbin/brctl addif br-ff bat0
Beim beenden werden die Änderungen rückgängig gemacht: /etc/tinc/intracity/tinc-down
#!/bin/sh /sbin/rmmod /usr/local/lib/batman-adv.ko /usr/sbin/batctl if del intracity /usr/sbin/brctl delif br-ff intracity
Interfaces
Die Bridge br-ff fasst alle zur Mesh-Cloud gehörenden Interfaces zusammen. Zur Zeit ist einzig bat0 eingebunden.
#/etc/network/interface auto br-ff iface br-ff inet static address 172.26.0.2 netmask 255.255.252.0 pre-up brctl addbr br-ff post-down brctl delbr br-ff # brctl show bridge name bridge id STP enabled interfaces br-ff 8000.7a28c6508f0d no bat0
bat0 ist das einzige batman-adv Interface auf Felicitas. Lediglich das TAP-Interface des Intracity-VPNs in darin eingebunden.
# batctl if intracity: active
Tinc auf den Nodes
Der folgende Abschnitt erläutert die Tinc-Konfiguration der Nodes. Sie ist in der Firmware hinterlegt und muss nicht händisch angepasst werden.
UCI-Settings
Tinc ist in OpenWRT integriert und kann über uci konfiguriert werden. Alle Nodes sind dabei so konfiguriert, dass sie sich initial mit den Hosts vpn1, vpn2, vpn3 und vpn4 verbinden (vgl. https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/config/tinc). Der Name des Nodes (hier NONAME) wird beim Boot initial durch den tatsächlichen Noden-Namen ersetzt (siehe unten).
config tinc-net intracity option enable 1 option generate_keys 1 option Name NONAME option Mode switch list ConnectTo vpn1 list ConnectTo vpn2 list ConnectTo vpn3 list ConnectTo vpn4 option Compression 10 option Cipher none option DirectOnly yes option GraphDumpFile /tmp/log/tinc.intracity.dot config tinc-host NONAME option net intracity option Port 1194 config tinc-host vpn1 option net intracity list Address vpn1.kbu.freifunk.net config tinc-host vpn2 option net intracity list Address vpn2.kbu.freifunk.net config tinc-host vpn3 option net intracity list Address vpn3.kbu.freifunk.net config tinc-host vpn4 option net intracity list Address vpn4.kbu.freifunk.net
Settings im Dateisystem
Keys der Hosts vpn1-4 sind nicht via uci konfiguriert sondern werden direkt im Dateisystem abgelegt. Siehe:
- https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/intracity/hosts/vpn1
- https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/intracity/hosts/vpn2
- https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/intracity/hosts/vpn3
- https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/intracity/hosts/vpn4
Beim Start führt jeder Node ebenfalls ein script aus, dass das Tinc-Interface batman-adv hinzufügt (https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/intracity/tinc-up).
#!/bin/sh ip link set up mtu 1280 dev $INTERFACE batctl if add $INTERFACE
Hinweis: Aus legacy-Gründen ist noch ein Key für "Freifunk" (alter VPN-Name von Felix) und ein privates Tinc-VPN in der Firmware hinterlegt. Diese werden jedoch im Rahmen der nächsten Releases entfernt werden.
Key- und Config-Generierung
Beim Start eines jeden Nodes wird die MAC-Adresse des Nodes ausgewertet. Da Mac-Adresse und Tinc-Name identisch sind, wird - falls nich nicht geschehen - die Tinc-Konfiguration angepasst so, dass der Node-Name der MAC-Adresse entspricht (https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/uci-defaults/tinc-name).
#!/bin/sh NAME="`ip link show eth0 | grep "link/ether" | sed "s/^[ ]*//" | cut -d' ' -f2 | sed "s/://g"`" [ -f /etc/config/tinc ] && sed -i "s/NONAME/$NAME/g" /etc/config/tinc
Wird Tinc mit der angepassten Konfiguration erstmalig gestartet, so werden passende Keys automatisch erstellt.
Key-Management
Tinc sieht vor, dass die Public-Keys aller Hosts, die sich initial zu einem Server verbinden (ConnectTo) auf dem Server vorhanden sind. Vor diesem Hintergrund lädt jeder Node seinen Key via http hoch, so bald das WAN-Interface gestartet ist.
- Hotplug-Script: https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/hotplug.d/iface/90-cert-upload
- Upload-Script: https://github.com/ff-kbu/lffenv/blob/wr1043nd/files/etc/tinc/upload_cert.sh
Die Keys werden per Restful-Webservice entgegeben genommen und (nach Genehmingung) per cron-job alle fünf Minuten ins Tinc-Verzeichnis kopiert. Die benötigte Funktionalität ist in ff-serv (https://github.com/ff-kbu/ff-serv) implementiert.
Known-Issues / Ausblick
Die Lübecker haben in einem vergleichbaren Setup beobachtet, dass der batman-adv / tinc-Management-Traffic bei 15 Nodes im Rahmen bei ca 1 MBit/s liegt und damit die Kapazität eines ADSL-Upstreams übersteigt. Wir versuchen hier entgegen zu wirken, indem wir indirekte tinc-Verbindungen deaktivieren (Tinc-Option: DirectOnly Yes).
Langfristig werden wir voraussichtlich entweder auf fastd (https://projects.universe-factory.net/projects/fastd) umzusteigen oder die Broadcast-Domäne unterteilen.