Technische Information: Unterschied zwischen den Versionen

Aus Freifunk Dresden - Anwender-Wiki
Zur Navigation springen Zur Suche springen
 
(13 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
[[Category:Dokumentation]]
 
Technische Informationen liefern Antworten für den Aufbau eigner Knoten.<br/>
 
Technische Informationen liefern Antworten für den Aufbau eigner Knoten.<br/>
  
 
= Allgemeines =
 
= Allgemeines =
Falls ein Knoten nicht '''Kriterien''' erfüllt, kann dieser das Freifunk Netz erheblich stören.<br/> Da das Netz möglichst offen bleiben soll, ist ein Knotenauschluss nicht so leicht möglich. Ansonsten wären wir gezwungen Registrierungsmaßnahmen vorzusehen, so dass kein Knoten unerlaubt teilnehmen kann. Das würde aber den Ausbau des Netzes erheblich behindern.
+
Falls ein Knoten nicht die '''Kriterien''' erfüllt, kann dieser das Freifunk-Netz erheblich stören.<br/> Da das Netz möglichst offen bleiben soll, ist ein Knotenausschluss nicht so leicht möglich. Ansonsten wären wir gezwungen Registrierungsmaßnahmen vorzusehen, sodass kein Knoten unerlaubt teilnehmen kann. Das wollen wir nicht einführen, denn es würde aber den Ausbau des Netzes erheblich behindern.
  
  
 
* [[Kanalwahl]]
 
* [[Kanalwahl]]
* [[Knoten Spezifikation]] Soll ein eigner Knoten aufgebaut werden, so muss dieser die [[Knoten Spezifikation]] erfüllen, um ihn im Freifunk Dresden Netzwerk einbinden zu dürfen.
+
* [[Knoten Spezifikation]] Soll ein eigener Knoten aufgebaut werden, so muss dieser die [[Knoten Spezifikation]] erfüllen, um ihn im Freifunk-Dresden-Netzwerk einbinden zu dürfen.
  
 
== Knotennummer durch Registrierung eines Knotens anfordern ==
 
== Knotennummer durch Registrierung eines Knotens anfordern ==
Im Freifunknetz Dresden muss sich ein Knoten automatisch und regelmäßig am Registrierungsservice melden.<br/>
+
Im Freifunknetz Dresden muss sich ein Knoten automatisch und regelmäßig beim Registrierungsservice melden.<br/>
 
Die Knotennummern sind in Nutzungsbereiche unterteilt:
 
Die Knotennummern sind in Nutzungsbereiche unterteilt:
  
Zeile 17: Zeile 18:
 
! Start !! End !! Nutzungsbereich
 
! Start !! End !! Nutzungsbereich
 
|-
 
|-
| 0 || 256 || VServer fest vergeben
+
| 0 || 256 || VServer, Nummer fest vergeben
 
|-
 
|-
| 900 || 999 || spezial: temporäre Knotennummer
+
| 900 || 999 || spezial: temporäre Knotennummer für Freifunkrouter im Autosetup
 +
|- style="color: gray; background-color: lightgrey"
 +
|  1000 ||  || spezial: Startpunkterkennung für Registration-Service
 
|-
 
|-
| 1000 ||  || spezial: Startpunkterkennung für Registration Service
+
| 1001 || 50999 || Knotennummer für offizielle Firmware: Vergeben durch Registration-Service
|-
+
|- style="color: gray; background-color: lightgrey"
| 1001 || 50999 || Knotennummer für Offizielle Firmware: Vergeben durch Registration Service
+
| 51000 ||  || spezial: Startpunkterkennung für Registration-Service
|-
 
| 51000 ||  || spezial: Startpunkterkennung für Registration Service
 
 
|-
 
|-
 
| 51001 || 59999 || Knotennummer für alternative Knoten oder eigengebaute Firmware
 
| 51001 || 59999 || Knotennummer für alternative Knoten oder eigengebaute Firmware
|-
+
|- style="color: gray; background-color: lightgrey"
 
| 60000 || 65278 || Reserviert
 
| 60000 || 65278 || Reserviert
|-
+
|- style="color: gray; background-color: lightgrey"
 
| 65279 ||  || broadcast (10.200.255.255)
 
| 65279 ||  || broadcast (10.200.255.255)
 
|}
 
|}
Zeile 40: Zeile 41:
  
 
* <span style="color: orange">Erstmalige Knotennummer</span>
 
* <span style="color: orange">Erstmalige Knotennummer</span>
Nach der Registrierung erhält der Freifunk Knoten eine freie Knotennummer. Abhängig davon, ob die Registrierung
+
Nach der Registrierung erhält der Freifunk-Knoten eine freie Knotennummer. Abhängig davon, ob die Registrierung
durch die Originalfirmware oder einem alternativen Aufbau erfolgt, wird eine Knotennummer aus unterschiedlichen Bereichen vergeben. Dieses dient zur Verbesserung der Störanfälligkeit. Alternative Knoten (oder selbst erzeugte Firmware aus dem GitHub-Repository) dürfen nur Nummern ab 51000 verwenden.
+
durch die Original-Firmware oder einem alternativen Aufbau erfolgt, wird eine Knotennummer aus unterschiedlichen Bereichen vergeben. Dieses dient zur Verbesserung der Störanfälligkeit. Alternative Knoten (oder selbst erzeugte Firmware aus dem GitHub-Repository) dürfen nur Nummern ab 51000 verwenden.
 
   
 
   
  
 
* <span style="color: orange">Automatische Neuzuweisung</span>
 
* <span style="color: orange">Automatische Neuzuweisung</span>
Knotennummern können jederzeit neu zugewiesen werden. In diesem Fall ist es '''absolut notwendig''', dass die daraus resultierende Neuberechung der IP-Bereiche (Adressen) '''sofort''' erfolgt und angewendet wird.<br/> Bei Verschiebungen von Knotenbereichen, kann somit das Netz ohne Nutzereingriff umgeordnet werden. Dies war bereits notwendig.<br />Daraus ergibt sich die Notwendigkeit der regelmäßigen Regiestrierung eines Freifunk Knotens.
+
Knotennummern können jederzeit neu zugewiesen werden. In diesem Fall ist es '''absolut notwendig''', dass die daraus resultierende Neuberechnung der IP-Bereiche (Adressen) '''sofort''' erfolgt und angewendet wird.<br/> Bei Verschiebungen von Knotenbereichen kann somit das Netz ohne Nutzereingriff umgeordnet werden. Dies war bereits notwendig.<br />Daraus ergibt sich die Notwendigkeit der regelmäßigen Registrierung eines Freifunk-Knotens.
  
  
 
* <span style="color: orange">Regelmäßige Registrierungsplicht</span>
 
* <span style="color: orange">Regelmäßige Registrierungsplicht</span>
Jeder Freifunk Knoten, ob Original Firmware oder Alternativknoten '''muss''', sich regelmäßig registrieren.<br/>Die Registrierung sorgt für die Reservierung der Knotennummer aktuell für die nächsten 4 Wochen. Nach dieser Zeit wird diese Knotennummer wieder frei und kann an andere Knoten vergeben werden.<br/>Das Interval für eine Registrierung ist 1h-5h zur vorhergehenden Registration.<br/>Ein Knoten, der somit eine bereits vergebene Knotennummer verwendet, erlangt keinen Zugang zum Netz, da ein IP Konflikt eintreten würde. In diesem Fall muss der Knoten über das eigene Internet (nicht über das Freifunknetz) auf den Registrierungsservice zu greifen.
+
Jeder Freifunk-Knoten, ob Original-Firmware oder Alternativknoten '''muss''', sich regelmäßig registrieren.<br/>Die Registrierung sorgt für die Reservierung der Knotennummer aktuell für die nächsten 4 Wochen. Nach dieser Zeit wird diese Knotennummer wieder frei und kann an andere Knoten vergeben werden.<br/>Das Intervall für eine Registrierung ist 1h-5h zur vorhergehenden Registration.<br/>Ein Knoten, der somit eine bereits vergebene Knotennummer verwendet, erlangt keinen Zugang zum Netz, da ein IP-Konflikt eintreten würde. In diesem Fall muss der Knoten über das eigene Internet (nicht über das Freifunknetz) auf den Registrierungsservice zugreifen.
 
 
'''URL:''' http://register.freifunk-dresden.de/bot.php?registerkey=
 
 
 
registerkey ist wiefolgt definiert: ([0-9a-f][0-9a-f]:){32}<br/>
 
(Beispiel: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)
 
 
 
 
 
Dieser Key '''MUSS''' im gesamten Freifunknetz von Dresden eindeutig sein. In der Firmware wird dieser aus dem ssh-fingerprint und der md5sum der Netzwerk Informationen erzeugt.
 
 
 
<code>
 
key1=$(dropbearkey -y -f /etc/dropbear/dropbear_dss_host_key |
 
sed -n '/Fingerprint/{s#.* \([a-f0-9:]\+\)#\1#;p}')<br/>
 
 
 
key2=$(ip link | grep ether | md5sum | cut -d' ' -f1 | sed 's#\(..\)#\1:#g')<br/>
 
key="$key2$key1"
 
</code>
 
 
 
== Berechnung IP Adressen ==
 
Die Berechnung der IP Adressen erfolgt in der Firmware mit nachfolgendem AWK-Script. Damit ist es möglich für eine Knotennummer alle notwendigen IP Adressen zuberechnen. Ebenso ist es möglich via Freifunk IP die Knotennummer zu ermitteln.
 
 
 
<pre>
 
#!/bin/sh
 
#
 
#    0 - 99      vserver
 
#  1000          spezial:start point for registrator
 
#  1001 - 50999  Knotennummer für Firmware: vergeben durch registrator
 
# 51000 - 59999  Knotennummer für eigen Aufgebaute Knoten
 
# 60000 - 65278  Reserviert
 
# 65279          broadcast (10.200.255.255)
 
##############################################
 
export NODE_MIN=1001
 
export NODE_MAX=59999
 
 
 
export ARG1="$1"
 
export ARG2="$2"
 
 
 
if [ "$ARG1" = "" ]
 
then
 
        echo ""
 
        echo "ddmesh-ipcalc.sh (awk) Stephan Enderlein (c) 2015 V4"
 
        echo ""
 
        echo "Calculates all the addresses for the ddmesh freifunk node"
 
        echo "usage: ddmesh-ipcalc.sh [-t] [-n node] | [ipv4 ip]"
 
        echo "-t        run ipcalc test"
 
        echo "-n node  0- calulate ip"
 
        echo "<ipv4 ip>      caluclate node"
 
        echo ""
 
        exit 1
 
fi
 
 
 
if [ "$ARG1" = "-t" ]; then
 
        eval $($0 -n 0)
 
        n=0
 
        echo "Testing nodes $n-$_ddmesh_max"
 
        _ddmesh_max=10
 
        while [ $n -le $_ddmesh_max ]
 
        do
 
                eval $($0 -n $n)
 
                r=$($0 $_ddmesh_ip)
 
                echo "$n - $_ddmesh_ip - $r"
 
                if [ $n -ne $r ]; then
 
                        echo "ERROR"
 
                        exit 1
 
                fi
 
                n=$(($n + 1))
 
        done
 
        exit 0
 
fi
 
 
 
awk -v arg1="$ARG1" -v arg2="$ARG2" '
 
 
 
 
 
function lookup_ip(ip)
 
{
 
        #parameter check
 
        if(!match(ip,/^10\.20[0-1]\.[0-9]+\.[0-9]+$/))
 
        { print "invalid ip"; exit 1 }
 
 
 
        split(ip,a,".")
 
        node=a[3]*255 + a[4] - 1
 
 
 
        if(node > ENVIRON["NODE_MAX"])
 
        { print "Invalid IP"; exit 1 }
 
 
 
        print node
 
}
 
 
function lookup_node(node)
 
{
 
        #parameter check
 
        if(!match(node,/^[0-9]+$/) || node > ENVIRON["NODE_MAX"] )
 
        { print "invalid node"; exit 1 }
 
 
 
        domain  = "freifunk-dresden.de"
 
 
 
        _primary_major          = 200
 
        _nonprimary_major      = 201
 
        _middle                = int(node / 255) % 256
 
        _minor                  = (node % 255) + 1
 
        _meshnet                = "10"
 
 
 
        nodeip          = _meshnet "." _primary_major "." _middle "." _minor
 
        nonprimary_ip  = _meshnet "." _nonprimary_major "." _middle "." _minor
 
        meshpre        = 16
 
        meshnetmask    = "255.255.0.0"
 
        meshbroadcast  = "10.255.255.255"
 
 
 
        mesh6pre        = "48"
 
        mesh6net        = "fd11:11ae:7466::"
 
        # client range
 
       
 
        mesh6nodenet    = "fd11:11ae:7466:" sprintf("%x", node) "::"
 
        mesh6ip        = mesh6nodenet "1"
 
        mesh6nodepre    = "64"
 
 
 
        print "export _ddmesh_min=\""ENVIRON["NODE_MIN"]"\""
 
        print "export _ddmesh_max=\""ENVIRON["NODE_MAX"]"\""
 
        print "export _ddmesh_node=\""node"\""
 
        print "export _ddmesh_domain=\""domain"\""
 
        print "export _ddmesh_hostname=\"r"node"\""
 
        print "export _ddmesh_ip=\""nodeip"\""
 
        print "export _ddmesh_nonprimary_ip=\""nonprimary_ip"\""
 
        print "export _ddmesh_netpre=\""meshpre"\""
 
        print "export _ddmesh_netmask=\""meshnetmask"\""
 
        print "export _ddmesh_broadcast=\""meshbroadcast"\""
 
        print "export _ddmesh_mesh6net=\""mesh6net"\""
 
        if(!match(ip,/^10\.20[0-1]\.[0-9]+\.[0-9]+$/))
 
        { print "invalid ip"; exit 1 }
 
 
 
        split(ip,a,".")
 
        node=a[3]*255 + a[4] - 1
 
 
 
        if(node > ENVIRON["NODE_MAX"])
 
        { print "Invalid IP"; exit 1 }
 
 
 
        print node
 
}
 
 
function lookup_node(node)
 
{
 
        #parameter check
 
        if(!match(node,/^[0-9]+$/) || node > ENVIRON["NODE_MAX"] )
 
        { print "invalid node"; exit 1 }
 
 
 
        domain  = "freifunk-dresden.de"
 
 
 
        _primary_major          = 200
 
        _nonprimary_major      = 201
 
        _middle                = int(node / 255) % 256
 
        _minor                  = (node % 255) + 1
 
        _meshnet                = "10"
 
 
 
        nodeip          = _meshnet "." _primary_major "." _middle "." _minor
 
        nonprimary_ip  = _meshnet "." _nonprimary_major "." _middle "." _minor
 
        meshpre        = 16
 
        meshnetmask    = "255.255.0.0"
 
        meshbroadcast  = "10.255.255.255"
 
 
 
        mesh6pre        = "48"
 
        mesh6net        = "fd11:11ae:7466::"
 
        # client range
 
       
 
        mesh6nodenet    = "fd11:11ae:7466:" sprintf("%x", node) "::"
 
        mesh6ip        = mesh6nodenet "1"
 
        mesh6nodepre    = "64"
 
 
 
        print "export _ddmesh_min=\""ENVIRON["NODE_MIN"]"\""
 
        print "export _ddmesh_max=\""ENVIRON["NODE_MAX"]"\""
 
        print "export _ddmesh_node=\""node"\""
 
        print "export _ddmesh_domain=\""domain"\""
 
        print "export _ddmesh_hostname=\"r"node"\""
 
        print "export _ddmesh_ip=\""nodeip"\""
 
        print "export _ddmesh_nonprimary_ip=\""nonprimary_ip"\""
 
        print "export _ddmesh_netpre=\""meshpre"\""
 
        print "export _ddmesh_netmask=\""meshnetmask"\""
 
        print "export _ddmesh_broadcast=\""meshbroadcast"\""
 
        print "export _ddmesh_mesh6net=\""mesh6net"\""
 
        print "export _ddmesh_mesh6pre=\""mesh6pre"\""
 
        print "export _ddmesh_mesh6nodenet=\""mesh6nodenet"\""
 
        print "export _ddmesh_mesh6ip=\""mesh6ip"\""
 
        print "export _ddmesh_mesh6nodepre=\""mesh6nodepre"\""
 
}
 
 
 
BEGIN {
 
        if(arg1=="-n")
 
                lookup_node(arg2)
 
        else
 
                lookup_ip(arg1)
 
        exit 0;
 
}
 
'
 
</pre>
 
 
 
  
 
== Sysinfo ==
 
== Sysinfo ==
 
Der aktuelle Zustand eines Routers kann über die folgende URL abgefragt werden.
 
Der aktuelle Zustand eines Routers kann über die folgende URL abgefragt werden.
 
  [[sysinfo-json|http://<router-ip>/sysinfo-json.cgi]]
 
  [[sysinfo-json|http://<router-ip>/sysinfo-json.cgi]]
 +
[[sysinfo-json|http://<router-ip>/sysinfo.json]] (ab Firmware 4.2.18)
 
Diese json Datenstruktur wird unter anderem vom Freifunkserver (freifunk-dresden.de) abgefragt, um die Hotspot-Liste und Kartendaten zu generieren.
 
Diese json Datenstruktur wird unter anderem vom Freifunkserver (freifunk-dresden.de) abgefragt, um die Hotspot-Liste und Kartendaten zu generieren.
  
Zeile 256: Zeile 65:
 
== Übertragungsgeschwindigkeiten ==
 
== Übertragungsgeschwindigkeiten ==
 
=== Backbone (fastd) ===
 
=== Backbone (fastd) ===
''fastd'' ist ein VPN Dienst, welcher für die Backbone-Verbindung zwischen Router-Server, Server-Server oder Router-Router verwendet wird. Die folgenden Werte Router (von [https://projects.universe-factory.net/projects/fastd/wiki/Benchmarks Fastd-Projekt] entnommen) wurden auf Routern mit Openwrt ermittelt, wobei ausschließlich ''fastd'' lief, um die maximale Geschwindigkeit zu ermitteln. Da die Freifunk-Firmware weitere Komponenten (Firewall,Routing,...) beinhaltet, sind diese Werte niedriger.
+
''fastd'' ist ein VPN Dienst, welcher für die Backbone-Verbindung zwischen Router-Server, Server-Server oder Router-Router verwendet wird. Die folgenden Werte (vom [https://projects.universe-factory.net/projects/fastd/wiki/Benchmarks Fastd-Projekt] entnommen) wurden auf Routern mit Openwrt ermittelt, wobei ausschließlich ''fastd'' lief, um die maximale Geschwindigkeit zu ermitteln. Da die Freifunk-Firmware weitere Komponenten (Firewall,Routing,...) beinhaltet, sind die Werte auf einem Freifunkrouter niedriger.
 
Bei einer schmalen Internetanbindung wird die Geschwindigkeit weiter beschränkt.
 
Bei einer schmalen Internetanbindung wird die Geschwindigkeit weiter beschränkt.
  
Zeile 267: Zeile 76:
 
|}
 
|}
  
* Freifunk Server-Server Verbindungen
+
* Freifunk Server-Server fastd - Verbindungen (Werte in Klammern sind direkte Verbindungen zwischen Servern)
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
!  !! Rx !! Tx
 
!  !! Rx !! Tx
 
|-
 
|-
| VPN7(OVH) / VPN1(MyLoc) || 45 Mbits/sec || 93 Mbits/sec
+
| VPN7(OVH) / VPN1(MyLoc) || 45 (98) Mbits/sec || 93 (96) Mbits/sec
 
|-
 
|-
| VPN7(OVH) / VPN5(Netcup-Server) || 18 Mbits/sec || 20 Mbits/sec
+
| VPN7(OVH) / VPN5(Netcup-Server) || 18 (65) Mbits/sec || 20 (66) Mbits/sec
 
|-
 
|-
| VPN5(Netcup-Server) / VPN1(MyLoc) ||  21 Mbits/sec || 22 Mbits/sec
+
| VPN5(Netcup-Server) / VPN1(MyLoc) ||  21 (65) Mbits/sec || 22 (66) Mbits/sec
 
|-
 
|-
 
| VPN1/VPN1 (Linux Container) || 531 Mbits/sec ||  528 Mbits/sec
 
| VPN1/VPN1 (Linux Container) || 531 Mbits/sec ||  528 Mbits/sec
  
 
|}
 
|}
 +
 +
= Infrastruktur =
 +
* [[Infrastruktur]] aktuell ist es eine lose Sammlung von Stichpunkten, welche nach und nach in eine Dokumentation der Firmware/Server Infrastruktur verwandelt wird. Diese Dokumentation beschreibt die externen Abhängigkeiten, das Zusammenspiel der Freifunkkomponenten (Server,Router,Dienste...).
 +
 +
== Registrierung ==
 +
'''URL:''' http://register.freifunk-dresden.de/bot.php?registerkey=
 +
 +
registerkey ist wie folgt definiert: ([0-9a-f][0-9a-f]:){32}<br/>
 +
(Beispiel: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)
 +
 +
 +
Dieser Key '''MUSS''' im gesamten Freifunknetz von Dresden eindeutig sein. In der Firmware wird dieser aus
 +
einem Zufallswert und der MD5-Prüfsumme der Netzwerkinformationen erzeugt. Die Netzwerkinformationen enthalten unter
 +
anderem die MAC Adresse, welche eindeutig ist.
 +
 +
key1=$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | hexdump -e '16/1 "%02x:"' | sed 's#:$##')
 +
key2=$(ip link | grep ether | md5sum | cut -d' ' -f1 | sed 's#\(..\)#\1:#g;s#:$##')
 +
key="$key1:$key2"
 +
 +
 +
'''Hinweis:''' Die Registrierung eines Knotens (Router oder Server) muss wenigstens 1 mal pro Stunde erfolgen.
 +
 +
Der Registrator kann unter Umständen eine '''neue Knotennummer''' zurück liefern, welche unmittelbar zu einer
 +
neuen IP Adresse für den Knoten führen muss.<br>
 +
 +
In der Firmware wird die neue Knotennummer gespeichert und der Router wird neu gestartet.<br>
 +
Gleiches MUSS beim Server beachtet und implementiert sein.
 +
 +
== Berechnung der IP Adressen ==
 +
Jeder Knoten erhält eine IP Adresse aus dem 10.200.x.x IP-Bereich. Diese leitet sich von der Knotennummer ab, die vom Registrator zurückgegeben wird.<br>
 +
Es darf niemals eine selbst ausgedachte Knotennummer verwendet werden, da es sonst zu Dopplungen im Netz und damit zu IP-Konflikten kommt.<br>
 +
Die Folge wäre eine Nichterreichbarkeit von einzelnen oder sogar mehreren Routern.
 +
 +
'''ACHTUNG:''' Bitte nutzt NIEMALS eine eigene Knotennummer !!!

Aktuelle Version vom 18. Oktober 2019, 15:08 Uhr

Technische Informationen liefern Antworten für den Aufbau eigner Knoten.

Allgemeines

Falls ein Knoten nicht die Kriterien erfüllt, kann dieser das Freifunk-Netz erheblich stören.
Da das Netz möglichst offen bleiben soll, ist ein Knotenausschluss nicht so leicht möglich. Ansonsten wären wir gezwungen Registrierungsmaßnahmen vorzusehen, sodass kein Knoten unerlaubt teilnehmen kann. Das wollen wir nicht einführen, denn es würde aber den Ausbau des Netzes erheblich behindern.


Knotennummer durch Registrierung eines Knotens anfordern

Im Freifunknetz Dresden muss sich ein Knoten automatisch und regelmäßig beim Registrierungsservice melden.
Die Knotennummern sind in Nutzungsbereiche unterteilt:

(siehe ddmesh-ipcalc.sh)

Start End Nutzungsbereich
0 256 VServer, Nummer fest vergeben
900 999 spezial: temporäre Knotennummer für Freifunkrouter im Autosetup
1000 spezial: Startpunkterkennung für Registration-Service
1001 50999 Knotennummer für offizielle Firmware: Vergeben durch Registration-Service
51000 spezial: Startpunkterkennung für Registration-Service
51001 59999 Knotennummer für alternative Knoten oder eigengebaute Firmware
60000 65278 Reserviert
65279 broadcast (10.200.255.255)
  • Temporäre Knoten

Die Firmware verwendet temporäre Knoten, die sich die Firmware nach dem erstmaligem Start selber zufällig erzeugt. Damit kann diese am Freifunknetz teilnehmen und eine Registrierung über das Netz selber durch führen.
Diese Knotennummer sollte aber die Zeiten der Registrierungspflicht nicht überschreiten.


  • Erstmalige Knotennummer

Nach der Registrierung erhält der Freifunk-Knoten eine freie Knotennummer. Abhängig davon, ob die Registrierung durch die Original-Firmware oder einem alternativen Aufbau erfolgt, wird eine Knotennummer aus unterschiedlichen Bereichen vergeben. Dieses dient zur Verbesserung der Störanfälligkeit. Alternative Knoten (oder selbst erzeugte Firmware aus dem GitHub-Repository) dürfen nur Nummern ab 51000 verwenden.


  • Automatische Neuzuweisung

Knotennummern können jederzeit neu zugewiesen werden. In diesem Fall ist es absolut notwendig, dass die daraus resultierende Neuberechnung der IP-Bereiche (Adressen) sofort erfolgt und angewendet wird.
Bei Verschiebungen von Knotenbereichen kann somit das Netz ohne Nutzereingriff umgeordnet werden. Dies war bereits notwendig.
Daraus ergibt sich die Notwendigkeit der regelmäßigen Registrierung eines Freifunk-Knotens.


  • Regelmäßige Registrierungsplicht

Jeder Freifunk-Knoten, ob Original-Firmware oder Alternativknoten muss, sich regelmäßig registrieren.
Die Registrierung sorgt für die Reservierung der Knotennummer aktuell für die nächsten 4 Wochen. Nach dieser Zeit wird diese Knotennummer wieder frei und kann an andere Knoten vergeben werden.
Das Intervall für eine Registrierung ist 1h-5h zur vorhergehenden Registration.
Ein Knoten, der somit eine bereits vergebene Knotennummer verwendet, erlangt keinen Zugang zum Netz, da ein IP-Konflikt eintreten würde. In diesem Fall muss der Knoten über das eigene Internet (nicht über das Freifunknetz) auf den Registrierungsservice zugreifen.

Sysinfo

Der aktuelle Zustand eines Routers kann über die folgende URL abgefragt werden.

http://<router-ip>/sysinfo-json.cgi
http://<router-ip>/sysinfo.json (ab Firmware 4.2.18)

Diese json Datenstruktur wird unter anderem vom Freifunkserver (freifunk-dresden.de) abgefragt, um die Hotspot-Liste und Kartendaten zu generieren.

Diese API kann ebenso verwendet werden, um eigene Anwendungen zu entwickeln. Zur Unterscheidung verschiedener Versionen dieser Datenstruktur dient das Versions-Feld.

Detailierte Informationen sind in sysinfo-json zu finden.

Übertragungsgeschwindigkeiten

Backbone (fastd)

fastd ist ein VPN Dienst, welcher für die Backbone-Verbindung zwischen Router-Server, Server-Server oder Router-Router verwendet wird. Die folgenden Werte (vom Fastd-Projekt entnommen) wurden auf Routern mit Openwrt ermittelt, wobei ausschließlich fastd lief, um die maximale Geschwindigkeit zu ermitteln. Da die Freifunk-Firmware weitere Komponenten (Firewall,Routing,...) beinhaltet, sind die Werte auf einem Freifunkrouter niedriger. Bei einer schmalen Internetanbindung wird die Geschwindigkeit weiter beschränkt.

  • Router (nur als fastd Dienst)
TL-WR841N/ND v9 TL-WR1043ND v1 TL-WDR3600 v1 TL-WR1043ND v2 Netcup-Server
35.5 Mbits/sec 42.1 Mbits/sec 50.3 Mbits/sec 62.0 Mbits/sec 14.2 Mbits/sec
  • Freifunk Server-Server fastd - Verbindungen (Werte in Klammern sind direkte Verbindungen zwischen Servern)
Rx Tx
VPN7(OVH) / VPN1(MyLoc) 45 (98) Mbits/sec 93 (96) Mbits/sec
VPN7(OVH) / VPN5(Netcup-Server) 18 (65) Mbits/sec 20 (66) Mbits/sec
VPN5(Netcup-Server) / VPN1(MyLoc) 21 (65) Mbits/sec 22 (66) Mbits/sec
VPN1/VPN1 (Linux Container) 531 Mbits/sec 528 Mbits/sec

Infrastruktur

  • Infrastruktur aktuell ist es eine lose Sammlung von Stichpunkten, welche nach und nach in eine Dokumentation der Firmware/Server Infrastruktur verwandelt wird. Diese Dokumentation beschreibt die externen Abhängigkeiten, das Zusammenspiel der Freifunkkomponenten (Server,Router,Dienste...).

Registrierung

URL: http://register.freifunk-dresden.de/bot.php?registerkey=

registerkey ist wie folgt definiert: ([0-9a-f][0-9a-f]:){32}
(Beispiel: 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)


Dieser Key MUSS im gesamten Freifunknetz von Dresden eindeutig sein. In der Firmware wird dieser aus einem Zufallswert und der MD5-Prüfsumme der Netzwerkinformationen erzeugt. Die Netzwerkinformationen enthalten unter anderem die MAC Adresse, welche eindeutig ist.

key1=$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | hexdump -e '16/1 "%02x:"' | sed 's#:$##')
key2=$(ip link | grep ether | md5sum | cut -d' ' -f1 | sed 's#\(..\)#\1:#g;s#:$##')
key="$key1:$key2"


Hinweis: Die Registrierung eines Knotens (Router oder Server) muss wenigstens 1 mal pro Stunde erfolgen.

Der Registrator kann unter Umständen eine neue Knotennummer zurück liefern, welche unmittelbar zu einer neuen IP Adresse für den Knoten führen muss.

In der Firmware wird die neue Knotennummer gespeichert und der Router wird neu gestartet.
Gleiches MUSS beim Server beachtet und implementiert sein.

Berechnung der IP Adressen

Jeder Knoten erhält eine IP Adresse aus dem 10.200.x.x IP-Bereich. Diese leitet sich von der Knotennummer ab, die vom Registrator zurückgegeben wird.
Es darf niemals eine selbst ausgedachte Knotennummer verwendet werden, da es sonst zu Dopplungen im Netz und damit zu IP-Konflikten kommt.
Die Folge wäre eine Nichterreichbarkeit von einzelnen oder sogar mehreren Routern.

ACHTUNG: Bitte nutzt NIEMALS eine eigene Knotennummer !!!