ACHTUNG!! In Bearbeitung!!! Datenquelle https://wiki.leipzig.freifunk.net/ Und Emailverkehr der Infa-ffdo Gruppe Anpassung von Marcel APU mit Debian 10 Laptop mit Mate 20 === Anmerkung === Anleitung für die Installation und Konfiguration für die Verwendung in unserem "Labor- Betrieb" === Installation von Tinc === sudo apt-get update sudo apt-get install tinc === Lan Verbindung herstellen === Per Netzwerkabel miteinander verbinden ;) === Feste IP Adresse Anlegen === Um Fehler auszuschließen am besten statische IP-Adressen benutzen, die außerhalb des Bereiches vom lokalen DHCP-Servers (zB. F!Box) liegen.Default route dann manuell zum lokalen uplink gateway (zB zur F!Box) setzen. Konfiguration rebootfest machen (/etc/rc.conf bei BSD, /etc/network/interfaces bei Debian). Die im Folgenden als Beispiel verwendeten private-IP-Adressen natürlich durch die real konfigurierten ersetzen. (Wenn man die Netzwerkkonfiguration der APU versemmelt und nicht mehr per ssh drankommt, gibt's ja zum Glück noch die serielle Verbindung:-) In meinem Fall habe ich mich für die Adressen: Apu (Debian) : 192.168.1.100 Laptop : 192.168.1.99 === Verzeichnisstruktur anlegen === mkdir -p /etc/tinc/lan/hosts/ === Konfigurationsdateien "lan" anlegen === Nun müssen eine Reihe von Konfigurationsdateien und -scripten angelegt werden damit Tinc ordnungsgemäß seinen Dienst verrichtet. ==== Tinc-Konfigurationsdatei ==== vi /etc/tinc/lan/tinc.conf tinc Instanz aufsetzen (Beschreibung für tinc 1.0.x) ! Tipp! Für das Übertragen der Einstellungen am besten jeweils mit dem Befehl "cat" arbeiten Für die tinc-Instanz mit dem Namen "lan" ungefähr Folgendes in die config Datei .../tinc/lan/tinc.conf schreiben: Name = apu Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToAddress = 192.168.1.100 Port = 10001 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.lan.dot #LocalDiscovery = yes ConnectTo = laptop Und auf dem Laptop ähnliche Daten, bis auf: "Name,BindToAddress und ConnectTo". Name = laptop Device = /dev/net/tun Mode = switch AddressFamily = ipv4 BindToAddress = 192.168.1.99 Port = 10001 MaxTimeout = 30 GraphDumpFile = /var/run/tinc.lan.dot #LocalDiscovery = yes ConnectTo = apu Nun auf beiden Geräten die Schlüsselpaare generieren: (Anmerkung: bei mir funktionierte der Befehl nur mit Angabe des Pfades) tincd -n lan -K 4096 oder /etc/tinc/lan/inc.conf -n lan -K 4096 Dann in der public key Datei .. vi etc/tinc/lan/hosts/apu und vi etc/tinc/lan/hosts/laptop die IP-Adresse des hosts oben ergänzen: Address = 192.168.178.241 Port = 10001 -----BEGIN RSA PUBLIC KEY----- MIICCgKCAgEAwirLKOYuwraf+MneMpzWqKhv8qCcZCC7yFAN2y+OnT5lXzV/LgwQ [...] Nun die Datei .../tinc/lan/hosts/apu von der APU an die gleiche Stelle auf dem Laptop kopieren. Und umgekehrt .../laptop auf die APU. ! Zusatzinfos! # Hier die Erklärungen zu den einzelnen Parametern. # Mit welchen anderen Tinc-Daemons soll sich bei Programmstart verbunden werden. # Entsprechende Host-Konfiguation Dateien in "hosts/" müssen vorhanden sein. ConnectTo = apu # Name des Tunnelinterfaces, der vergeben werden soll z.B. tun0 # Das zu verwendende virtuelle Netzwerkgerät. tinc erkennt automatisch, um welche Art von Gerät es sich handelt. # Beachten Sie, dass Sie nur ein Gerät pro Dämon verwenden können. Device = /dev/net/tun #Diese Option wirkt sich auf die Adressfamilie der abhörenden und ausgehenden Sockets aus. # Wenn "any" ausgewählt ist, werden je nach Betriebssystem sowohl IPv4- als auch IPv6- oder nur IPv6-Listening-Sockets erstellt. AddressFamily = ipv4 # Mitdieser Option wird festgelegt, wie Pakete an andere Daemons weitergeleitet werden # switch = In diesem Modus werden die MAC-Adressen der Pakete im VPN verwendet, um wie bei # einem Ethernet-Switch dynamisch eine Routing-Tabelle zu erstellen Mode = switch # Wenn Ihr Computer mehr als eine IPv4- oder IPv6-Adresse hat, überwacht tinc standardmäßig alle auf eingehende Verbindungen. # Es können mehrere BindToAddress- Variablen angegeben werden. In diesem Fall werden Abhörsockets für jede angegebene Adresse erstellt. BindToAddress = # Wenn kein Port angegeben ist, wird der Socket an den durch die Option Port angegebenen Port oder an Port 655 gebunden, # wenn keiner angegeben ist. Um nur Bindung an einen bestimmten Port aber nicht an eine bestimmte Adresse, die Verwendung * für die Adresse . Port = 10001 # Dies ist die maximale Verzögerung, bevor versucht wird, die Verbindung zu anderen Tinc-Daemons wiederherzustellen. MaxTimeout = 30 # Wenn diese Option vorhanden ist, speichert tinc das aktuelle Netzwerkdiagramm jede Minute in den Dateinamen der Datei , # es sei denn, es wurden keine Änderungen am Diagramm vorgenommen. Die Datei hat ein Format, das von graphviz-Tools gelesen werden kann. # Wenn der Dateiname mit einem Pipe-Symbol | beginnt, wird der Rest des Dateinamens als Shell-Befehl interpretiert, der ausgeführt wird. #Das Diagramm wird dann an stdin gesendet. GraphDumpFile = /var/run/tinc.lan.dot ==== Initialisierungsscript "tinc-up" ==== vi /etc/tinc/'''''12_7'''''/tinc-up #!/bin/sh # This file is for tinc startup # -- Konfiguration Start -- TINCPRT=655 TINCADR=104.61.2.'''''12''''' # <-- diese IP auch anpassen! (siehe "Teilnehmer") TINCBRC=104.61.2.255 TINCPRE=24 TINCDEV=$INTERFACE # -- Konfiguration Ende -- # Netzparameter laden eval $(/usr/bin/netparam) # Tinc Interface konfigurieren ip addr add $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV # Input auf den Tinc-Port aus dem WAN erlauben iptables -I INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT iptables -I INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT # Input / Output auf dem Tinc-Interface iptables -I INPUT -d $WIFIADR -i $TINCDEV -j ACCEPT iptables -I INPUT -d $TINCADR/$TINCPRE -j ACCEPT iptables -I OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT iptables -I OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT # Weiterleitungen zwischen Wifi- und Tinc-Interface erlauben iptables -I FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT iptables -I FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT # Weiterleitungen zwischen LAN- und Tinc-Interface erlauben iptables -I FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT # LAN Richtung Tinc natten iptables -t nat -A POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE # Interface aktivieren ip link set dev $TINCDEV up ==== Shutdownscript "tinc-down" ==== vi /etc/tinc/'''''12_7'''''/tinc-down #!/bin/sh # This file closes down the tunnel device und removes corresponding firewall rules. # -- Konfiguration Start -- TINCPRT=655 TINCADR=104.61.2.'''''12''''' # <-- diese IP auch anpassen! TINCBRC=104.61.2.255 TINCPRE=24 TINCDEV=$INTERFACE # -- Konfiguration Ende -- # Netzparameter laden eval $(/usr/bin/netparam) # Tinc Interface deaktivieren ip link set $TINCDEV down # Input auf den Tinc-Port aus dem WAN verbieten iptables -D INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT iptables -D INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT # Input / Output auf dem Tinc-Interface verbieten iptables -D INPUT -d $WIFIADR -i $TINCDEV -j ACCEPT iptables -D INPUT -d $TINCADR/$TINCPRE -j ACCEPT iptables -D OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT iptables -D OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT # Weiterleitungen zwischen Wifi- und Tinc-Interface verbieten iptables -D FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT iptables -D FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT # Weiterleitungen zwischen LAN- und Tinc-Interface verbieten iptables -D FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT iptables -D FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT # LAN-Nat-Regel löschen iptables -t nat -D POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE # Interface dekonfigurieren ip addr del $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV ==== Scripte ausführbar machen ==== Die up- und down-Scripte ausführbar machen: chmod +x /etc/tinc/'''''12_7'''''/tinc-up chmod +x /etc/tinc/'''''12_7'''''/tinc-down ==== OLSR-Konfiguration für das Tinc-Interface ==== vi /etc/local.olsrd.conf-tinc0 Interface "tinc0" { HelloInterval 15.0 HelloValidityTime 180.0 TcInterval 10.0 TcValidityTime 270.0 MidInterval 30.0 MidValidityTime 180.0 HnaInterval 30.0 HnaValidityTime 180.0 Ip4Broadcast 104.61.2.255 LinkQualityMult default 0.2 } ==== Hinweis für den Betrieb hinter einem NAT ==== Wenn der Rechner oder das Gerät, auf dem Tinc installiert ist hinter einer Firewall hängt, muss zudem der TCP-Tunnelmodus aktiviert werden. Dazu sollten die Zertifikate der anderen Nodes bearbeitet werden: vi /etc/tinc/'''''12_7'''''/hosts/* Dort wird zusätzlich zu den Optionen für Adresse und Port folgende Zeile vor dem Schlüssel eingefügt: TCPOnly = yes === Schlüssel erzeugen === tincd -n '''''12_7''''' -K Der generierte öffentliche Schlüssel sollte ungefähr so aussehen: cat /etc/tinc/'''''12_7'''''/hosts/'''''12_7''''' -----BEGIN RSA PUBLIC KEY----- MIGJAoGBAKHymf+vQFBJzKUswWgCqfz9y0vCAtsH68ejWYwo2HUxEW3OZoPpEAb4 belX9d9xs4PCU22O6lUvIbmUl4UGXXFKiWxhbY15K0+rzrJfdw1mfwo5uveaCGwu gzQ0hFpactWfL3EufX/fBG4tRreYQH3hDA2nLqam6ee0Gp46ZWr5AgMBAAE= -----END RSA PUBLIC KEY----- ==== Die Schlüsseldateien austauschen ==== Beispiel für einen Schlüsselaustausch per ssh: Zertifikate von anderem Node auf den eig. Node kopieren scp root@104.61.x.y:/etc/tinc/'''''x_y'''''/hosts/* tinc/'''''12_7'''''/hosts/ Eigenes Zertifikat auf anderen Node kopieren scp /etc/tinc/'''''12_7'''''/hosts/'''''12_7''''' root@104.61.x.y:/etc/tinc/'''''x_y'''''/hosts *Hinweis: Keys müssen mit anderen Nodes ausgestauscht werden (mind. 2 - mit Angabe der Nodes unter /etc/tinc/x_y/tinc.conf und ConnectTo = a_b, sowie ablegen deren Schlüssel unter tinc/x_y/hosts/a_b), ansonsten kann Tinc keine Verbindung aufbauen - hierzu hilft euch ein wenig das [http://wiki.leipzig.freifunk.net/Projekt2 Projekt 2], dort könnt ihr euch die Schlüssel von den anderen Tinc-Nodes kopieren und auch eure erzeugten '''öffentlichen'''-Schlüssel (in der Node unter /etc/tinc/x_y/hosts/x_y zu finden x_y = wieder eure Node-IP) ablegen. Nun müsst ihr nur noch die Tinc-Nodeadmins um Aufname eurer im Wiki abgelegten Keys bitten, am besten über E-Mail oder im [http://wiki.leipzig.freifunk.net/Jabber Jabber]. === Tinc beim Booten automatisch starten === Damit Tinc beim Booten automatisch gestartet wird, muss nun eine Datei mit dem Namen der verwendeten Konfiguration angelegt werden: vi /etc/tinc/nets.boot Dort wird der Name der Konfiguration eingetragen: '''''12_7''''' === Konfiguration überprüfen === Nach dem Anlegen der Konfiguration sollte jetzt folgendes Verzeichnis-Layout existieren: /etc/tinc/ /etc/tinc/nets.boot /etc/tinc/'''''12_7'''''/ /etc/tinc/'''''12_7'''''/tinc.conf /etc/tinc/'''''12_7'''''/tinc-up /etc/tinc/'''''12_7'''''/tinc-down /etc/tinc/'''''12_7'''''/rsa_key.priv /etc/tinc/'''''12_7'''''/hosts/ /etc/tinc/'''''12_7'''''/hosts/'''''12_7''''' /etc/tinc/'''''12_7'''''/hosts/... === Tinc-VPN starten === Nachdem die Konfiguration beendet wurde kann nun Tinc gestartet werden: /etc/init.d/S52tinc start OLSR muss auch neu gestartet werden damit das neue Tinc-Interface aufgenommen wird: /etc/init.d/S53olsrd restart In den Logdateien sollten sich nun Meldungen vom Tinc-Daemon finden: logread -f === Tinc-VPN-Installation sichern/wiederherstellen === In der Node unter [Verwalten] > [Backup] > Backup-Muster: /etc/tinc/* /etc/local.olsrd.conf* ergänzen und auf "Jetzt sichern" drücken. *vor einem Firmewareupdate wieder/nochmal "Jetzt sichern" wählen (evtl. die Pfade für die Kabelkopplung oder andere Pakete/Verzeichnisse ergänzen) *Firmwareupdate durchführen, anschließend bei der IP-Vergabe den '''''Expertenmodus''''' wählen und dort das Häckchen bei '''''gesicherte Daten wiederherstellen''''' (evtl. noch LAN-/WAN-Einstellungen beibehalten) setzen und neustarten *anschließend noch unter '''Software 2''' wieder das Paket freifunk-tinc-de installieren und Node mit dem einfachen Neustart starten *nun sollten alle Tinc-VPN-Nachbarn wieder vorhanden sein (sofern ihr keinen Pfad beim Sichern vergessen habt - Beachtung liegt bei Kabelkopplungen und Firewallregeln für neue Interfaces wie z.B. bei WAN-LAN-Kopplungen, bei WAN-WAN könnt ihr das mit den Häcken drunter (Http / Https / Ssl / Ping) setzen)