123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- 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 vi etc/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
- 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
- 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:
- hier zum Beispiel die Änderung für den Apu
- Address = 192.168.1.100
- 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!
-
-
-
- ConnectTo = apu
-
-
-
- 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
-
- Dies ermöglicht eine direkte Kommunikation über LAN-Adressen, selbst wenn sich beide Peers hinter einem NAT befinden und sich nur mit einem dritten Knoten außerhalb des NAT verbinden, was normalerweise verhindern würde, dass die Peers die LAN-Adresse des anderen lernen.
- LocalDiscovery = yes
-
-
-
-
-
- ConnectTo = laptop
- ==== Testen von Tinc ====
- Anfangs am besten manuell mit debugging, ist unschädlich, wenn man's
- mal gesehen hat. Und wenn (wie üblich:) was schief geht, hilft's:
- tincd -n lan -D -d 3 &
- Stoppen zB mit "killall tincd". Wenn alles OK ist, verwendet man für den
- Normalbetrieb das mit dem tinc package installierte script zum Starten
- und Stoppen. Aber das hängt vom jeweiligen OS bzw. der Distribution ab.
- Ebenso, wie man den daemon/service/Dienst (tincd) rebootfest macht.
- ==== Tinc Konfigurieren ====
- Dazu konfiguriert man auf beiden Geräten das in der
- vi etc/tinc/lan/tinc.conftinc.conf
- angegebene Interface (tun) in ein gemeinsames IP-Netz, in meinem Fall
- der IP Adressbereich 192.168.39.0/24.
- Die APU kriegt die BindToAddress = 192.168.39.1, der Laptop die BindToAddress = 192.168.39.2 .
- ==== IP Adressenliste für unser Netz ====
- Wer Nr/Name tap1-Netz public-IP APU public-IP Laptop
- Alle 1/nordstadt 193.43.220.129
- Frank 2/berghofen 192.168.37.0/24 193.43.220.130 193.43.220.158
- Julian 3/city 192.168.38.0/24 193.43.220.131 193.43.220.157
- Marcel 4/hagen 192.168.39.0/24 193.43.220.132 193.43.220.156
- Michael 5/? 192.168.40.0/24 193.43.220.133 193.43.220.155
- Stefan 6/duisburg 192.168.41.0/24 193.43.220.134 193.43.220.154
- Klaus 7/menden 192.168.42.0/24 193.43.220.135 193.43.220.153
- Joh. 8/hoerde 192.168.43.0/24 193.43.220.136 193.43.220.152
- Dann versucht man, von einem Gerät auf die Adresse das anderen zu
- pingen. Die Route für die Adresse des Gegenübers liegt auf dem tun
- Interface (prüfen!), deshalb gehen die (ICMP ECHO_REQUEST-)Pakete an
- den (für dieses Interface zuständigen) tincd. Der verschlüsselt die
- Pakete und schickt sie (via kernel) übers LAN an die IP-Adresse (und
- den Port) des anderen Geräts an den anderen tincd. Der entschlüsselt
- wieder und übergibt das ursprüngliche Paket dem lokalen kernel.
- Der antwortet mit einem (ICMP ECHO_RESPONSE-)Paket, und der Film läuft
- genau wie gerade nochmal ab, nur in Gegenrichtung.
- Wenn das funktioniert, kann man (endlich;-) Traffic zwischen APU und
- Laptop verschlüsselt durch die F!Box schicken. Dafür muss man
- natürlich die Adressen der tun Interfaces benutzen. Zum Überprüfen der
- Konstruktion gleichzeitig ein tcpdump -X auf dem "äußeren" (dem LAN-)
- Interface (eth0, igb0, o.dgl.) und auf dem "inneren" Interface (tun)
- laufen lassen. Dann ein paar pings auf die "innere" Gegenstelle
- (192.168.39.2 bzw. .1) machen und deren Spuren in den beiden tcpdumps
- vergleichen. Auf dem LAN-Interface sollte der Klartext aus den
- ursprünglichen ping-Paketen nicht mehr zu sehen sein.
- AB HIER NICHT MEHR ÜBERPRÜFT
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- vi /etc/tinc/lan/tinc-up
-
-
-
-
- TINCPRT=655
- TINCADR=104.61.2.'''''12'''''
- TINCBRC=104.61.2.255
- TINCPRE=24
- TINCDEV=$INTERFACE
-
-
-
- eval $(/usr/bin/netparam)
-
-
- ip addr add $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV
-
-
- iptables -I INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
- iptables -I INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT
-
-
- 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
-
-
- iptables -I FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
- iptables -I FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT
-
-
- 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
-
-
- iptables -t nat -A POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE
-
-
- ip link set dev $TINCDEV up
- ==== Shutdownscript "tinc-down" ====
- vi /etc/tinc/'''''12_7'''''/tinc-down
-
-
-
-
- TINCPRT=655
- TINCADR=104.61.2.'''''12'''''
- TINCBRC=104.61.2.255
- TINCPRE=24
- TINCDEV=$INTERFACE
-
-
-
- eval $(/usr/bin/netparam)
-
-
- ip link set $TINCDEV down
-
-
- iptables -D INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
- iptables -D INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT
-
-
- 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
-
-
- iptables -D FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
- iptables -D FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT
-
-
- 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
-
-
- iptables -t nat -D POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE
-
-
- 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)
|