Dienst:Tinc

Aus Freifunk Köln, Bonn und Umgebung
Zur Navigation springen Zur Suche springen

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.

node-graph.png

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:

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.

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.