Tinc_Installation.page 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. ACHTUNG!! In Bearbeitung!!!
  2. Datenquelle https://wiki.leipzig.freifunk.net/
  3. und Emailverkehr der Infa-ffdo Gruppe
  4. Anpassung von Marcel
  5. APU mit Debian 10
  6. Laptop mit Mate 20
  7. #**Anleitung für die Installation und Konfiguration für die Verwendung in unserem "Labor- Betrieb"**
  8. ##=== Installation von Tinc ===
  9. sudo apt-get update dann
  10. sudo apt-get install tinc
  11. ##=== Lan Verbindung herstellen ===
  12. Per Netzwerkabel miteinander verbinden ;)
  13. ##=== Feste IP Adresse Anlegen ===
  14. 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.
  15. 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
  16. Verbindung:-)
  17. In meinem Fall habe ich mich für die Adressen:
  18. Apu (Debian) : 192.168.1.100
  19. Laptop : 192.168.1.99
  20. ##=== Verzeichnisstruktur anlegen ===
  21. mkdir -p /etc/tinc/lan/hosts/
  22. Anmerkung: der Parameter -p bewirkt keinen Fehler, wenn /lan/ und/oder /hosts/ schon vorhanden sind; sonst werden die Verzeichnisse lan und hosts erzeugt.
  23. ##=== Konfigurationsdateien "lan" anlegen ===
  24. Nun müssen eine Reihe von Konfigurationsdateien und -scripten angelegt werden damit Tinc ordnungsgemäß
  25. seinen Dienst verrichtet.
  26. ##=== Tinc-Konfigurationsdatei ===
  27. vi /etc/tinc/lan/tinc.conf
  28. 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.
  29. Für die tinc-Instanz mit dem Namen "lan" ungefähr Folgendes in die config Datei vi etc/tinc/lan/tinc.conf schreiben:
  30. Name = apu
  31. Device = /dev/net/tun
  32. Mode = switch
  33. AddressFamily = ipv4
  34. BindToAddress = 192.168.1.100
  35. Port = 10001
  36. MaxTimeout = 30
  37. GraphDumpFile = /var/run/tinc.lan.dot
  38. #LocalDiscovery = yes
  39. ConnectTo = laptop
  40. Und auf dem Laptop ähnliche Daten, bis auf: "Name,BindToAddress und ConnectTo".
  41. Name = laptop
  42. Device = /dev/net/tun
  43. Mode = switch
  44. AddressFamily = ipv4
  45. BindToAddress = 192.168.1.99
  46. Port = 10001
  47. MaxTimeout = 30
  48. GraphDumpFile = /var/run/tinc.lan.dot
  49. #LocalDiscovery = yes
  50. ConnectTo = apu
  51. ##=== Auf beiden Geräten die Schlüsselpaare generieren:
  52. Anmerkung: bei mir funktionierte der Befehl nur mit Angabe des Pfades.
  53. tincd -n lan -K 4096 oder
  54. /etc/tinc/lan/inc.conf -n lan -K 4096
  55. ##=== Die IP-Adressen eintragen
  56. Dann in der public key Datei ..
  57. vi etc/tinc/lan/hosts/apu
  58. und
  59. vi etc/tinc/lan/hosts/laptop
  60. die IP-Adresse des hosts oben ergänzen:
  61. hier zum Beispiel die Änderung für den Apu
  62. Address = 192.168.1.100
  63. Port = 10001
  64. -----BEGIN RSA PUBLIC KEY-----
  65. MIICCgKCAgEAwirLKOYuwraf+MneMpzWqKhv8qCcZCC7yFAN2y+OnT5lXzV/LgwQ
  66. [...]
  67. Nun die Datei .../tinc/lan/hosts/apu von der APU an die gleiche Stelle
  68. auf dem Laptop kopieren. Und umgekehrt .../laptop auf die APU.
  69. Zusatzinfos zu den einzelnen Parametern
  70. Festlegen, mit welchen anderen Tinc-Daemons sich bei Programmstart verbunden werden soll, die entsprechende Host-Konfigurations-Dateien in "hosts/" müssen vorhanden sein.
  71. ConnectTo = apu
  72. # Name des Tunnelinterfaces, der vergeben werden soll z.B. tun0
  73. # Das zu verwendende virtuelle Netzwerkgerät. tinc erkennt automatisch, um welche Art von Gerät es sich handelt.
  74. # Beachten Sie, dass Sie nur ein Gerät pro Dämon verwenden können.
  75. Device = /dev/net/tun
  76. #Diese Option wirkt sich auf die Adressfamilie der abhörenden und ausgehenden Sockets aus.
  77. # Wenn "any" ausgewählt ist, werden je nach Betriebssystem sowohl IPv4- als auch IPv6- oder nur IPv6-Listening-Sockets erstellt.
  78. AddressFamily = ipv4
  79. # Mitdieser Option wird festgelegt, wie Pakete an andere Daemons weitergeleitet werden
  80. # switch = In diesem Modus werden die MAC-Adressen der Pakete im VPN verwendet, um wie bei
  81. # einem Ethernet-Switch dynamisch eine Routing-Tabelle zu erstellen
  82. Mode = switch
  83. # Wenn Ihr Computer mehr als eine IPv4- oder IPv6-Adresse hat, überwacht tinc standardmäßig alle auf eingehende Verbindungen.
  84. # Es können mehrere BindToAddress- Variablen angegeben werden. In diesem Fall werden Abhörsockets für jede angegebene Adresse erstellt.
  85. BindToAddress =
  86. # Wenn kein Port angegeben ist, wird der Socket an den durch die Option Port angegebenen Port oder an Port 655 gebunden,
  87. # wenn keiner angegeben ist. Um nur Bindung an einen bestimmten Port aber nicht an eine bestimmte Adresse, die Verwendung * für die Adresse .
  88. Port = 10001
  89. # Dies ist die maximale Verzögerung, bevor versucht wird, die Verbindung zu anderen Tinc-Daemons wiederherzustellen.
  90. MaxTimeout = 30
  91. # Wenn diese Option vorhanden ist, speichert tinc das aktuelle Netzwerkdiagramm jede Minute in den Dateinamen der Datei ,
  92. # 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.
  93. GraphDumpFile = /var/run/tinc.lan.dot
  94. #Wenn diese Option aktiviert ist, versucht tinc , Peers zu erkennen, die sich im selben lokalen Netzwerk befinden.
  95. 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.
  96. LocalDiscovery = yes
  97. # Gibt an, zu welchem ​​anderen Tinc-Daemon beim Start eine Verbindung hergestellt werden soll. Es können mehrere ConnectTo-
  98. # Variablen angegeben werden. In diesem Fall werden ausgehende Verbindungen zu jedem angegebenen tinc-Daemon hergestellt.
  99. # Die Namen sollten diesem tinc-Daemon bekannt sein (dh es sollte eine Host-Konfigurationsdatei für den Namen in der
  100. # ConnectTo- Zeile vorhanden sein).Wenn Sie mit ConnectTo keinen Host angeben , versucht tinc überhaupt nicht, eine Verbindung
  101. # zu anderen Daemons herzustellen , sondern wartet stattdessen nur auf eingehende Verbindungen.
  102. ConnectTo = laptop
  103. ##=== Testen von Tinc ===
  104. Anfangs am besten manuell mit debugging, ist unschädlich, wenn man's
  105. mal gesehen hat. Und wenn (wie üblich:) was schief geht, hilft's:
  106. tincd -n lan -D -d 3 &
  107. Stoppen zB mit "killall tincd". Wenn alles OK ist, verwendet man für den
  108. Normalbetrieb das mit dem tinc package installierte script zum Starten
  109. und Stoppen. Aber das hängt vom jeweiligen OS bzw. der Distribution ab.
  110. Ebenso, wie man den daemon/service/Dienst (tincd) rebootfest macht.
  111. ##=== Tinc Konfigurieren ===
  112. Dazu konfiguriert man auf beiden Geräten das in der
  113. vi etc/tinc/lan/tinc.conftinc.conf
  114. angegebene Interface (tun) in ein gemeinsames IP-Netz, in meinem Fall
  115. der IP Adressbereich 192.168.39.0/24.
  116. Die APU kriegt die BindToAddress = 192.168.39.1, der Laptop die BindToAddress = 192.168.39.2 .
  117. ##=== IP Adressenliste für unser Netz ===
  118. Wer Nr/Name tap1-Netz public-IP APU public-IP Laptop
  119. Alle 1/nordstadt 193.43.220.129
  120. Frank 2/berghofen 192.168.37.0/24 193.43.220.130 193.43.220.158
  121. Julian 3/city 192.168.38.0/24 193.43.220.131 193.43.220.157
  122. Marcel 4/hagen 192.168.39.0/24 193.43.220.132 193.43.220.156
  123. Michael 5/? 192.168.40.0/24 193.43.220.133 193.43.220.155
  124. Stefan 6/duisburg 192.168.41.0/24 193.43.220.134 193.43.220.154
  125. Klaus 7/menden 192.168.42.0/24 193.43.220.135 193.43.220.153
  126. Joh. 8/hoerde 192.168.43.0/24 193.43.220.136 193.43.220.152
  127. Ludger 9/lenklar 192.168.44.0/24 193.43.220.169 193.43.220.137
  128. [Link zur IP-Tabelle](https://wiki.ffdo.de/_diff/Community/Bildung/FF@home/IP-Adressen?to=cb6d2ae9daa6ee91d9ff2a1d0a0f91ee38808774)
  129. Dann versucht man, von einem Gerät auf die Adresse das anderen zu
  130. pingen. Die Route für die Adresse des Gegenübers liegt auf dem tun
  131. Interface (prüfen!), deshalb gehen die (ICMP ECHO_REQUEST-)Pakete an
  132. den (für dieses Interface zuständigen) tincd. Der verschlüsselt die
  133. Pakete und schickt sie (via kernel) übers LAN an die IP-Adresse (und
  134. den Port) des anderen Geräts an den anderen tincd. Der entschlüsselt
  135. wieder und übergibt das ursprüngliche Paket dem lokalen kernel.
  136. Der antwortet mit einem (ICMP ECHO_RESPONSE-)Paket, und der Film läuft
  137. genau wie gerade nochmal ab, nur in Gegenrichtung.
  138. Wenn das funktioniert, kann man (endlich;-) Traffic zwischen APU und
  139. Laptop verschlüsselt durch die F!Box schicken. Dafür muss man
  140. natürlich die Adressen der tun Interfaces benutzen. Zum Überprüfen der
  141. Konstruktion gleichzeitig ein tcpdump -X auf dem "äußeren" (dem LAN-)
  142. Interface (eth0, igb0, o.dgl.) und auf dem "inneren" Interface (tun)
  143. laufen lassen. Dann ein paar pings auf die "innere" Gegenstelle
  144. (192.168.39.2 bzw. .1) machen und deren Spuren in den beiden tcpdumps
  145. vergleichen. Auf dem LAN-Interface sollte der Klartext aus den
  146. ursprünglichen ping-Paketen nicht mehr zu sehen sein.
  147. AB HIER NICHT MEHR ÜBERPRÜFT
  148. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  149. vi /etc/tinc/lan/tinc-up
  150. #!/bin/sh
  151. # This file is for tinc startup
  152. # -- Konfiguration Start --
  153. TINCPRT=655
  154. TINCADR=104.61.2.'''''12''''' # <-- diese IP auch anpassen! (siehe "Teilnehmer")
  155. TINCBRC=104.61.2.255
  156. TINCPRE=24
  157. TINCDEV=$INTERFACE
  158. # -- Konfiguration Ende --
  159. # Netzparameter laden
  160. eval $(/usr/bin/netparam)
  161. # Tinc Interface konfigurieren
  162. ip addr add $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV
  163. # Input auf den Tinc-Port aus dem WAN erlauben
  164. iptables -I INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
  165. iptables -I INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT
  166. # Input / Output auf dem Tinc-Interface
  167. iptables -I INPUT -d $WIFIADR -i $TINCDEV -j ACCEPT
  168. iptables -I INPUT -d $TINCADR/$TINCPRE -j ACCEPT
  169. iptables -I OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT
  170. iptables -I OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT
  171. # Weiterleitungen zwischen Wifi- und Tinc-Interface erlauben
  172. iptables -I FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
  173. iptables -I FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT
  174. # Weiterleitungen zwischen LAN- und Tinc-Interface erlauben
  175. iptables -I FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
  176. iptables -I FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT
  177. # LAN Richtung Tinc natten
  178. iptables -t nat -A POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE
  179. # Interface aktivieren
  180. ip link set dev $TINCDEV up
  181. ==== Shutdownscript "tinc-down" ====
  182. vi /etc/tinc/'''''12_7'''''/tinc-down
  183. #!/bin/sh
  184. # This file closes down the tunnel device und removes corresponding firewall rules.
  185. # -- Konfiguration Start --
  186. TINCPRT=655
  187. TINCADR=104.61.2.'''''12''''' # <-- diese IP auch anpassen!
  188. TINCBRC=104.61.2.255
  189. TINCPRE=24
  190. TINCDEV=$INTERFACE
  191. # -- Konfiguration Ende --
  192. # Netzparameter laden
  193. eval $(/usr/bin/netparam)
  194. # Tinc Interface deaktivieren
  195. ip link set $TINCDEV down
  196. # Input auf den Tinc-Port aus dem WAN verbieten
  197. iptables -D INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
  198. iptables -D INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT
  199. # Input / Output auf dem Tinc-Interface verbieten
  200. iptables -D INPUT -d $WIFIADR -i $TINCDEV -j ACCEPT
  201. iptables -D INPUT -d $TINCADR/$TINCPRE -j ACCEPT
  202. iptables -D OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT
  203. iptables -D OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT
  204. # Weiterleitungen zwischen Wifi- und Tinc-Interface verbieten
  205. iptables -D FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
  206. iptables -D FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT
  207. # Weiterleitungen zwischen LAN- und Tinc-Interface verbieten
  208. iptables -D FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
  209. iptables -D FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT
  210. # LAN-Nat-Regel löschen
  211. iptables -t nat -D POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE
  212. # Interface dekonfigurieren
  213. ip addr del $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV
  214. ==== Scripte ausführbar machen ====
  215. Die up- und down-Scripte ausführbar machen:
  216. chmod +x /etc/tinc/'''''12_7'''''/tinc-up
  217. chmod +x /etc/tinc/'''''12_7'''''/tinc-down
  218. ==== OLSR-Konfiguration für das Tinc-Interface ====
  219. vi /etc/local.olsrd.conf-tinc0
  220. Interface "tinc0"
  221. {
  222. HelloInterval 15.0
  223. HelloValidityTime 180.0
  224. TcInterval 10.0
  225. TcValidityTime 270.0
  226. MidInterval 30.0
  227. MidValidityTime 180.0
  228. HnaInterval 30.0
  229. HnaValidityTime 180.0
  230. Ip4Broadcast 104.61.2.255
  231. LinkQualityMult default 0.2
  232. }
  233. ==== Hinweis für den Betrieb hinter einem NAT ====
  234. Wenn der Rechner oder das Gerät, auf dem Tinc installiert ist hinter einer Firewall
  235. hängt, muss zudem der TCP-Tunnelmodus aktiviert werden.
  236. Dazu sollten die Zertifikate der anderen Nodes bearbeitet werden:
  237. vi /etc/tinc/'''''12_7'''''/hosts/*
  238. Dort wird zusätzlich zu den Optionen für Adresse und Port folgende Zeile
  239. vor dem Schlüssel eingefügt:
  240. TCPOnly = yes
  241. === Schlüssel erzeugen ===
  242. tincd -n '''''12_7''''' -K
  243. Der generierte öffentliche Schlüssel sollte ungefähr so aussehen:
  244. cat /etc/tinc/'''''12_7'''''/hosts/'''''12_7'''''
  245. -----BEGIN RSA PUBLIC KEY-----
  246. MIGJAoGBAKHymf+vQFBJzKUswWgCqfz9y0vCAtsH68ejWYwo2HUxEW3OZoPpEAb4
  247. belX9d9xs4PCU22O6lUvIbmUl4UGXXFKiWxhbY15K0+rzrJfdw1mfwo5uveaCGwu
  248. gzQ0hFpactWfL3EufX/fBG4tRreYQH3hDA2nLqam6ee0Gp46ZWr5AgMBAAE=
  249. -----END RSA PUBLIC KEY-----
  250. ==== Die Schlüsseldateien austauschen ====
  251. Beispiel für einen Schlüsselaustausch per ssh:
  252. Zertifikate von anderem Node auf den eig. Node kopieren
  253. scp root@104.61.x.y:/etc/tinc/'''''x_y'''''/hosts/* tinc/'''''12_7'''''/hosts/
  254. Eigenes Zertifikat auf anderen Node kopieren
  255. scp /etc/tinc/'''''12_7'''''/hosts/'''''12_7''''' root@104.61.x.y:/etc/tinc/'''''x_y'''''/hosts
  256. *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].
  257. === Tinc beim Booten automatisch starten ===
  258. Damit Tinc beim Booten automatisch gestartet wird, muss nun
  259. eine Datei mit dem Namen der verwendeten Konfiguration angelegt werden:
  260. vi /etc/tinc/nets.boot
  261. Dort wird der Name der Konfiguration eingetragen:
  262. '''''12_7'''''
  263. === Konfiguration überprüfen ===
  264. Nach dem Anlegen der Konfiguration sollte jetzt folgendes Verzeichnis-Layout existieren:
  265. /etc/tinc/
  266. /etc/tinc/nets.boot
  267. /etc/tinc/'''''12_7'''''/
  268. /etc/tinc/'''''12_7'''''/tinc.conf
  269. /etc/tinc/'''''12_7'''''/tinc-up
  270. /etc/tinc/'''''12_7'''''/tinc-down
  271. /etc/tinc/'''''12_7'''''/rsa_key.priv
  272. /etc/tinc/'''''12_7'''''/hosts/
  273. /etc/tinc/'''''12_7'''''/hosts/'''''12_7'''''
  274. /etc/tinc/'''''12_7'''''/hosts/...
  275. === Tinc-VPN starten ===
  276. Nachdem die Konfiguration beendet wurde kann nun Tinc gestartet werden:
  277. /etc/init.d/S52tinc start
  278. OLSR muss auch neu gestartet werden damit das neue Tinc-Interface aufgenommen wird:
  279. /etc/init.d/S53olsrd restart
  280. In den Logdateien sollten sich nun Meldungen vom Tinc-Daemon finden:
  281. logread -f
  282. === Tinc-VPN-Installation sichern/wiederherstellen ===
  283. In der Node unter [Verwalten] > [Backup] > Backup-Muster:
  284. /etc/tinc/*
  285. /etc/local.olsrd.conf*
  286. ergänzen und auf "Jetzt sichern" drücken.
  287. *vor einem Firmewareupdate wieder/nochmal "Jetzt sichern" wählen (evtl. die Pfade für die Kabelkopplung oder andere Pakete/Verzeichnisse ergänzen)
  288. *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
  289. *anschließend noch unter '''Software 2''' wieder das Paket freifunk-tinc-de installieren und Node mit dem einfachen Neustart starten
  290. *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)