c3d2-wiki/Freifunk_Dresden.mw

350 lines
14 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{Broken|Reason=Technische Details depubliziert unter [[Intern:Freifunk Dresden]].|}}
[[Datei:1406FreifunkDresden-Logo.svg|rechts]]
[[Freifunk Dresden]] ist das Projekt in Dresden zu [[wikipedia:de:Freifunk]]. Das Freifunk-Netz Dresden ist ein von Freiwilligen betriebenes freies WLAN-Netzwerk. Ziel ist es, Dresden flächendeckend mit [[Freifunk]] zu versorgen.<ref>Seite des [http://www.freifunk-dresden.de Freifunk Dresden]</ref>
== Entstehung ==
[[Freifunk Dresden]] wurde ursprünglich unter dem Namen ''ddmesh'' von [[Stephan Enderlein]] gestartet und existiert bereits seit einigen Jahren.
Seit 2014 sind durchgängig mehr als 50 Knoten in Dresden erreichbar und auch Geschäfte in Dresden nehmen die Vorteile von Freifunk für sich und ihre Kunden wahr.
== Mitmachen ==
Um Teil des Freifunk-Netzwerkes zu werden, braucht man sowohl einen handelsüblichen Router als auch die passende Freifunk-Firmware-Version dazu.
=== Firmware ===
Seit {{#formatdate:2014-12-03}} steht die [http://download.ddmesh.de/firmware/2.1.5/ Firmware 2.1.5] zur Verfügung.
Die Firmware-Dateien sind nach den unterstützten Geräten benannt. Der Name einer Firmware-Datei setzt sich als <code>openwrt-ar71xx-generic-''ROUTERNAME''-squashfs-''ZUSATZ''.bin</code> zusammen.
: So ist beispielsweise die Datei <code>openwrt-ar71xx-generic-''tl-wr841n-v8''-squashfs-''factory''.bin</code> für einen Router
:* des Modells ''TL-WR841N''
:* in der ''V''ersion ''8'' (der Hardware)
:*: siehe Etikett auf der Unterseite des Gerätes.
:* ''Factory'' bedeutet, dass diese Firmware-Datei für die Erstinstallation der Freifunk-Firmware auf einem Gerät verwendet werden muss, auf dem sich bisher noch eine andere Firmware befindet, meist die Original-Firmware des Herstellers.
: Beim Dateinamen <code>openwrt-ar71xx-generic-''tl-wr841n-v8''-squashfs-''sysupgrade''.bin</code> bedeutet der Zusatz ''Sysupgrade'' hingegen, dass diese Datei zum Updaten eines bereits für den Dresdner Freifunk im Einsatz befindlichen Routers ist.
Ausführliche Erklärungen zur Konfiguration der Firmware werden im [[freifunk-dresden:Hauptseite | Wiki]] (wiki.freifunk-dresden.de) gepflegt.
=== Router ===
Wie der [http://download.ddmesh.de/firmware/2.1.5/ar71xx/ Firmware-Liste] zu entnehmen ist, gibt es eine Vielzahl an Freifunk-kompatiblen Routern. Allerdings erfreuen sich bestimmte Modelle in Dresden meist insbesondere wegen der günstigen Anschaffungskosten besonderer Beliebtheit:
{| class="wikitable sortable zebra toptextcells"
|-
! Geräte-Name
! Hersteller
! Preis (&euro;)
! RAM (MB)
! ROM (MB)
! class="unsortable" | Beschreibung
|-
| TL-WR841N
| TP-Link
| style="text-align:right" | 16-20
| style="text-align:right" | 32
| style="text-align:right" | 4
| Im Unterschied zum Modell mit der Endung ''ND'' mit nicht abnehmbaren Antennen ausgestattet.
|-
| TL-WR841ND
| TP-Link
| style="text-align:right" | 20-29
| style="text-align:right" | 32
| style="text-align:right" | 4
| ''D'' steht für ''detachable'', der Router besitzt also abnehmbare Antennen.
|-
| TL-WDR3600
| TP-Link
| style="text-align:right" | 40-
| style="text-align:right" | 128
| style="text-align:right" | 8
| mehr Speicher, USB Anschlüsse, auch 5 GHz, 2 abnehmbare Antennen
|-
| TL-WDR4300
| TP-Link
| style="text-align:right" | 45-
| style="text-align:right" | 128
| style="text-align:right" | 8
| mehr Speicher, USB Anschlüsse, auch 5 GHz, 3 abnehmbare Antennen
|-
| Nanostation&nbsp;M2&nbsp;loco
| Ubiquiti
| style="text-align:right" | 40-
| style="text-align:right" | 32
| style="text-align:right" | 8
| 2,4 GHz Richtfunk, Outdoor, 60° Öffnungswinkel, Power over Ethernet + Injector
|-
|}
== Standorte ==
Das Netz von Freifunk Dresden erstreckt sich nicht nur über Dresden selbst, sondern ist mittlerweile vereinzelt u. a. in
* Coswig,
* Freital,
* Meißen,
* Radeberg und
* Radebeul
zu finden. Detaillierte Standortinformationen sind auf der [http://www.freifunk-dresden.de/topology/google-maps.html Freifunk-Karte] einsehbar.
Neben den festen Standorten gibt es Freifunk auch auf [[Freifunk Dresden/Veranstaltung | Veranstaltung]]en, wie z. B. Weihnachtsmärkten.
== Original-Firmware ==
Die Firmware basiert auf [[w:de:OpenWrt|OpenWrt]] mit BMX (Alternativentwicklung basierend auf batmand) und einer custom Weboberfläche.<br />
Das Routingprotokoll batman-adv wird hier nicht verwendet und wurde parallel zu BMX mit einem komplett anderen Ziel entwickelt.
Nutzung der Original-Firmware hat folgende Vorteile:
* Konsistente Konfiguration mit fast allen anderen Teilnehmern
* Anschluß ans Backbone-VPN (vtun)
* Offenes WLAN, welches über das Backbone ins Internet kommt (alternativ durch zusätzliche Pakete ein eigener VPN-Dienst konfigurierbar)
* Webserver der die Knotenmetadaten ausliefert (automatische Knotenregistrierung)
=== Freie Software und Peering ===
Die Software ist frei und kann durch die Quellen von OpenWRT und die Sourcen zu Änderungen von der Freifunk-Seite eingesehen werden. Konfiguration und Scripte sind in den Images zu finden oder auf [https://github.com/ddmesh/firmware-freifunk-dresden GitHub] (Licensen beachten).<br />
Die Dokumentation zum Bau eigner Firmware Images und Alternativ-Knoten sind im Aufbau.
Da zu [[w:de:Freier Software|Freie Software]] für viele von uns auch der freie und möglichst barrierefreiem Zugang zu weiteren Informationen zählt, wollen wir diesen Umstand ändern - auch um Freifunk noch besser machen zu können. Im Widerspruch dazu steht das berechtigte Interesse der bisherigen Freifunk-Teilnehmer auf einen Störungsfreien Betrieb und infolgedessen Imageschaden bei den normalen Benutzern, der durch Experimente mit alternativer Firmware gefährdet sein könnte - das Marketing für Freie Software sowie für Freifunk selbst sind leider schwierig.
Ideen dazu werden [[Diskussion:Freifunk Dresden|diskutiert]], um die jetzigen Betreibenden in Blick auf offenem Zugang zu Informationen zu überzeugen.
== WLAN-Einstellungen ==
Die detailierten Einstellungen werden [[Intern:Freifunk Dresden|derzeit intern]] beschrieben.
== Adressvergabe ==
----
<font color="red">'''Folgende Informationen sind veraltet und werden noch aktualisiert.'''</font>
==== IP-Adressberechnungs mit Shell- und Lua Script ====
Die Berechnung kann sich in künftigen Versionen ändern, derzeit wird u.a. eine Aufteilung des Netzwerkes in "original"-FFF und "custom" erwogen. Deshalb ist Vorsicht geboten was die Aktualität des Inhaltes angeht - bitte überprüfen bevor ihr peert.
Die Scripte deren Algorithmus formalisiert werden soll:
===== usr/bin/ddmesh-ipcalc.sh =====
<source lang="bash">
#!/bin/sh
if [ "$1" = "" ]
then
echo ""
echo "ddmesh-ipcalc.sh (lua) Stephan Enderlein (c) 2013 V1.7"
echo ""
echo "Calculates all the addresses for the ddmesh freifunk node"
echo "usage: ddmesh-ipcalc.sh [-n node] | [ip]"
echo ""
exit 1
fi
if [ "$1" = "-n" ]; then
node=`echo "$2" | sed 's/[\$\`\(\)]/0/g'`
lua -lddmesh -e "ipcalc.print($node)"
else
ip=`echo "$1" | sed 's/[\$\`\(\)]/0/g'`
lua -lddmesh -e "print(iplookup(\"$ip\"))"
fi
</source>
===== usr/lib/lua/ddmesh.lua =====
<source lang="lua">
--[[----------------------------------------------------------------------------------------
ddmesh.lua
library for different freifunk functions
version: 6
-------------------------------------------------------------------------------------------]]
----------------- ipcalc ---------------
ipcalc={}
ipcalc.data={}
ipcalc.data.max=2048
function split(str, delim, maxNb)
-- Eliminate bad cases...
if string.find(str, delim) == nil then
return { str }
end
if maxNb == nil or maxNb < 1 then
maxNb = 0 -- No limit
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
-- Handle the last field
if nb ~= maxNb then
result[nb + 1] = string.sub(str, lastPos)
end
return result
end
function ipcalc.rCalcIp(ip)
if ip==nil or ip=="" then return -1 end
a = split(ip, "[.]")
if #a ~= 4 then return -1 end
if a[1]==nil or a[1]=="" or tonumber(a[1]) ~= 10 then return -1 end
if a[2]==nil or a[2]=="" or tonumber(a[2]) ~= 200 and tonumber(a[2]) ~= 201 then return -1 end
if a[3]==nil or a[3]=="" or tonumber(a[3]) < 0 or tonumber(a[3]) > 255 then return -1 end
if a[4]==nil or a[4]=="" or tonumber(a[4]) < 0 or tonumber(a[4]) > 255 then return -1 end
middle = a[3]
if a[2]=="201" then middle = middle + 256 end
minor = math.floor(a[4]/64) --x>>6
node = middle*4+minor --x<<2
if node < 0 or node > ipcalc.data.max then return -1 end
return node
end
function ipcalc.calc(node)
--node has to be a number n \in N_0, 0 <= n <= 2048
if node==nil or node=="" then return -1 end
node=tonumber(node)
if node==nil or node=="" then return -1 end
if node < 0 or node > ipcalc.data.max then return -1 end
local domain = "freifunk-dresden.de"
--Ternary Operator in use
-- major network for nodes n < 1024: 200, for nodes > 1023: 201
local major = node >= 1024 and 201 or 200 --a[2]
-- etc.
local middle = node >= 1024 and math.floor((node-1024) / 4) or math.floor(node / 4) --a[3]
local minor = (node % 4) * 64
local meshnet = "10"
local nodeip = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 1
local meshnetmask = "255.0.0.0"
local meshpre = 15
local meshbroadcast = "10.255.255.255"
local meshnetwork = "10.200.0.0"
local dhcpstart = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 2
local dhcpend = meshnet .. "." .. major .. "." .. middle .. "." .. minor + 63
local dhcpoffset = 1 --used by config/dhcp
local dhcplimit = 62 --used by config/dhcp
local dhcprangepre = 26
local dhcprangemask = "255.255.255.192"
local dhcpnetmask = "255.255.255.255"
local dhcpbroadcast = "10.255.255.255" -- needed, else dnsmasq will not start
local dhcpnetwork = meshnet .. "." .. major .. "." .. middle .. "." .. minor
local hna = meshnet .. "." .. major .. "." .. middle .. "." .. minor .. "/" .. dhcprangepre
local mesh6pre = "48"
local mesh6net = "fd11:11ae:7466::"
-- client range
local mesh6nodenet= "fd11:11ae:7466:" .. string.format("%x", node) .. "::"
local mesh6ip = mesh6nodenet .. "1"
local mesh6nodepre= "64"
-- preparing variabled to be expoted
ipcalc.data.node = node
ipcalc.data.domain = domain
ipcalc.data.hostname = "r" .. node
ipcalc.data.ip = nodeip
ipcalc.data.network = meshnetwork
ipcalc.data.netpre = meshpre
ipcalc.data.netmask = meshnetmask
ipcalc.data.broadcast = meshbroadcast
ipcalc.data.dhcpstart = dhcpstart
ipcalc.data.dhcpend = dhcpend
ipcalc.data.dhcpoffset = dhcpoffset
ipcalc.data.dhcplimit = dhcplimit
ipcalc.data.dhcprangepre = dhcprangepre
ipcalc.data.dhcprangemask = dhcprangemask
ipcalc.data.dhcpnetwork = dhcpnetwork
ipcalc.data.dhcpbroadcast = dhcpbroadcast
ipcalc.data.dhcpnetmask = dhcpnetmask
ipcalc.data.clienthna = hna
ipcalc.data.mesh6ip = mesh6ip
ipcalc.data.mesh6net = mesh6net
ipcalc.data.mesh6pre = mesh6pre
ipcalc.data.mesh6nodenet = mesh6nodenet
ipcalc.data.mesh6nodepre = mesh6nodepre
end
function ipcalc.print(node)
if node==nil or node=="" then print("ERROR"); return -1 end
node=tonumber(node)
if node==nil then print("ERROR"); return -1 end
if node < 0 or node > ipcalc.data.max then return -1 end
ipcalc.calc(node)
for k,v in pairs(ipcalc.data) do
print("export _ddmesh_"..k.."="..v)
end
end
--not needed for ip address calculation
function iplookup(ip)
if ip==nil then return -1 end
n=ipcalc.rCalcIp(ip)
if n == -1 then return -1 end
ipcalc.calc(n)
return ipcalc.data.hostname
end
--not needed for ip address calculation
function lookup(node)
if node==nil then return -1 end
if string.sub(node,1,1) == "r" then
n=tonumber(string.sub(node,2))
else
n=tonumber(node)
end
if n==nil then return -1 end
if n < 0 or n > ipcalc.data.max then return -1 end
ipcalc.calc(n)
return ipcalc.data.ip
end
</source>
----
== Metadaten ==
=== Freifunk-API ===
Es existiert eine Inter-Community-API analog zur SpaceAPI. Beispiel: [http://cholin.spline.de/freifunk/api-viewer/ Freifunk API Viewer]
[https://github.com/freifunk/directory.api.freifunk.net/blob/master/directory.json Directory.json], [http://info.ddmesh.de/info/freifunk.json Dresden]
=== Knotenmetadaten ===
Jeder Knoten bietet ein JSON-Dokument unter http://10.200.../sysinfo-json.cgi an. Es enthält Versionsstände, Geokoordinaten, Kontaktinfo, Auslastung und alle Routen.
== Wiki ==
* [[:Kategorie:Freifunk Dresden]]
== Siehe auch ==
* [[wikipedia:de:Freifunk]]
* [https://wiki.freifunk.net/Freifunk_Dresden freifunk:Freifunk Dresden]
* Planung zu [[Datenspuren 2014/Freifunk Dresden | Freifunk bei den Datenspuren 2014]]
* [[Freifunk Dresden]] bei den [[Datenspuren]]
** [[Datenspuren 2013]]: [https://datenspuren.de/2013/fahrplan/events/5175.html Vortrag ''ddmesh''] (by [[user:W01f|vv01f]]), [http://ftp.c3d2.de/datenspuren/2013/5175_ddmesh_hq.mp4 Video]
** [[Datenspuren 2014]]: [http://datenspuren.de/2014/fahrplan.html#13k Vortrag ''Sachstand Freifunk Dresden''] (by [[user:Emploi|Emploi]])
== Weblinks ==
* [https://www.freifunk-dresden.de/ <code>www.freifunk-dresden.de</code>, Homepage von] [[Freifunk Dresden]]
** [https://dresden.freifunk.net/ <code>dresden.freifunk.net</code>]
** [http://wiki.freifunk-dresden.de/ <code>wiki.freifunk-dresden.de</code>, Wiki von] [[Freifunk Dresden]]
** [http://bt.freifunk-dresden.de/ Bugtracker von] [[Freifunk Dresden]]
* [http://www.ddmesh.de/ <code>www.ddmesh.de</code>] (wie auch <code>www.freifunk-dresden.de</code>)
** [http://download.ddmesh.de/firmware/ Firmware]
*** [http://download.ddmesh.de/firmware/latest/ar71xx/changelog.txt changelog der aktuellen Version der Firmware]
** [http://www.ddmesh.de/hotspots.html Hotspot-Liste]
* [https://github.com/ddmesh/firmware-freifunk-dresden Firmware auf GitHub]
* [https://drive.google.com/?ddrp=1#folders/0B1LY99qDqRVPdTBNT2JEMlRkRzQ Flyer / Sticker / Kollaboration für Werbemittel]
== Einzelnachweise ==
<references/>
[[Kategorie:Projekt]]