Skip to content

Latest commit

 

History

History
327 lines (220 loc) · 10.9 KB

2018-10-11-ophase.md

File metadata and controls

327 lines (220 loc) · 10.9 KB

![OpenWrt](images/logos/openwrt.svg =200x) ![B.A.T.M.A.N. Advanced](images/logos/batman-adv.svg =200x) ![Freifunk](images/logos/freifunk.svg =200x)

Freifunk: Mesh Workshop

In diesem Hands-On bauen wir ein Mesh-Netzwerk basierend auf batman-adv, einem Layer 2 Mesh Protokoll. Das Mesh ermöglicht es Geräte untereinander flexibel zu verbinden und alle angeschlossenen Geräte im Mesh erreichbar zu machen, sei es durch direkte Nachbarschaft oder über multi-hop Verbindungen.


1. Mit Router per SSH verbinden

Auf den bereitgestellten Embedded Routern läuft ein aktuelles OpenWrt, die Geräte identifizieren sich über den Namen ophase{1-6}. Verbinde dein Laptop nun mit dem LAN-Port (gelb) des Routers und konfiguriere manuell eine IP-Addresse aus 192.168.0.0/24 (Subnetzmaske 255.255.255.0), nutze dafür die Bereiche aus der folgenden Tabelle.

Router IP-Bereich für Clients
192.168.0.1 192.168.0.110 - 192.168.0.119
192.168.0.2 192.168.0.120 - 192.168.0.129
192.168.0.3 192.168.0.130 - 192.168.0.139
192.168.0.4 192.168.0.140 - 192.168.0.149
192.168.0.5 192.168.0.150 - 192.168.0.159
192.168.0.6 192.168.0.160 - 192.168.0.169

Verbinde dich nun per SSH mit dem Router, die Zugangsdaten lauten:

  • IP-Addresse: siehe Label auf dem Router
  • Benutzer: root
  • Passwort: keines Das geht unter Linux/BSD/Mac sowie unter Windows 10 mit dem ssh Befehl. Vorherige Versionen von Windows benötigen bspw. PuTTY.
# ssh [email protected]
                
BusyBox v1.28.3 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 18.06-SNAPSHOT, r7391+11-0d549271d3
 -----------------------------------------------------
root@ophase1:~# 

Wir empfehlen zum gemeinsamen arbeiten den Terminal-Muxertmux zu verwenden. Versuche zunächst einer vorhandenen tmux Session beizutreten:

# tmux attach
no sessions

Folgt die no sessions Meldung ist keine Session offen und du kannst die erste Session öffnen:

# tmux

Tritt folgender Fehler auf, so musst du zunächst die TERM Variable auf einen anderen Wert setzen:

# tmux attach
open terminal failed: missing or unsuitable terminal: rxvt-unicode-256color
# export TERM=xterm
# tmux

So können alle am Team beteiligten mitarbeiten und den Fortschritt verfolgen.


2. Mesh über Mesh Point (11s) verbinden

Mesh Point ist ein Protokoll aus dem 802.11s Standard, der 2011 veröffentlicht wurde, und erstmals Wireless Mesh-Netzwerke als IEEE-Standard beschreibt. Das Protokoll unterstützt bis zu 32 Mesh-Knoten, was für eine Nachbarschaft womöglich genügt, allerdings nicht für ein regionales Netzwerk. Daher werden wir im folgenden das interne Routingprotokoll deaktivieren und stattdessen batman-adv einsetzen.

2.1 Regulatory Domain prüfen

Die "Regulatory Domain" ist die Konfigurationsoption um die regional angemessene Funkregulierung anzuwenden. Für uns in Deutschland gilt die Regulierung der ETSI, der Ländercode ist DE.

# iw reg get
# iw reg set DE

2.2 Finde das 5 GHz Radio

Üblicherweise wird das Radio als Access-Point initialisiert. Das ist für unseren Fall aber unbrauchbar. Entferne daher nun alle Interfaces auf dem 5 GHz Radio.

Identifiziere zunächst das Physical Radio (phy#N), dass auf dem 5 GHz Band operiert. Ein guter Indikator hierfür ist die Liste unterstützter "Frequencies".

# iw phy

2.3 Bereits vorhandene WLAN-Interfaces des 5 GHz Radios entfernen

Entferne nun alle virtuellen Interfaces auf dem Physical Radio:

# iw dev
# iw dev <device> del

2.4 Mesh Point Interface einrichten

An dessen Stelle konfigurieren wir ein Mesh-Point Interface. Hier muss das korrekte physical Radio angegeben werden, allerdings im Format phyN (Ohne #).

# iw phy <phy> interface add mesh0 type mesh

Setze anschließend den administrativen Status des Mesh-Point Interfaces auf up.

# ip link set up dev mesh0

2.5 WiFi-Mesh beitreten

Gekürzter Auszug aus iw dev help:

iw dev <devname> mesh join <mesh ID> \
  [[freq <freq in MHz> <NOHT|HT20|HT40+|HT40-|80MHz>] \ 
   [basic-rates <rate in Mbps,rate2,...>]] \
  [mcast-rate <rate in Mbps>] \
  [<param>=<value>]

Konstruiere nun den passenden Befehl um dem 802.11s Mesh beizutreten. Die Knoten sollen dabei nicht das in 802.11s integrierte Forwarding verwenden. Setze dazu den Parameter mesh_fwding=0.

# iw dev mesh0 mesh join <mesh-id> freq <frequency> <ht-mode> \
    basic-rates 6,9,12,18,24,36,48,54 mcast-rate 12 mesh_fwding=0

Die mesh-id ist der gemeinsame Identifier, den alle am Mesh teilnehmenden Geräte nutzen um sich untereinander zu verbinden. Desweiteren können nur Geräte, die sich auf dem gleichen Kanal befinden sich in einem 802.11s Mesh untereinander austauschen, wähle daher die für dein Team passenden Einstellungen aus:

Team 1/2/3 Team 4/5/6
Mesh-ID ophase-a ophase-b
Kanal 36 (5180 MHz) 48 (5240 MHz)
HT-Mode HT20 HT20

Wenn deine Nachbarn diesen Schritt abgeschlossen haben, solltest du sie in der Liste verbundener Stations wiederfinden:

# iw dev mesh0 station dump

2.6 Mesh auf dem mesh0 Radio-Interface aktivieren

Konfiguriere mesh0 nun für die Kommunikation mittels batman-adv. Batman-adv wird anschließend auf dem Interface nach Nachbarn suchen.

# batctl if add mesh0
# ip link set up dev bat0

2.7 Nachbarschaft einsehen

Zunächst kannst du nun deine direkte batman-adv Nachbarschaft einsehen. Hier werden für jedes Transportinterface alle dort gesichteten Nachbarn aufgezeigt.

# batctl neighbors

Zudem erhälst du von jedem Nachbarn Routen zu weiteren Geräten im Mesh-Netzwerk.

# batctl originators

3. Mesh über Kabel verbinden

3.1 Kabelverbindung herstellen

Mesh ist nicht an kabellose Kommunikationswege gebunden, so kann das Routing im Regelfall über beliebige Wege erfolgen, die ein Ethernet bereitstellt.

Verbinde nun ein LAN-Kabel zwischen den WAN-Port (blau) eines Routers aus dem Wireless-Mesh ophase-a mit dem WAN-Port (blau) eines Routers aus ophase-b.

3.2 Mesh auf dem Kabel-Interface aktivieren

Der Interface-Name des WAN-Ports ist bei den verwendeten Geräten eth0.2.

# ip link set up dev eth0.2
# batctl if add eth0.2

3.4 Nochmals die Nachbarschaft einsehen

Übrigens kann man neighbors auch mit n abkürzen.

# batctl n

Wenn alles klappt, solltest du nun einen Mesh-Nachbarn auf eth0.2 sehen.


4. IP-Netzwerk auf dem Mesh

Der Clou an Mesh-Netzwerken ist, dass man viele unterschiedliche Geräte auf unterschiedlichen Wegen zusammenstecken kann und darauf aufsetzend ein Netzwerk für Endnutzer betreiben kann.

Für den Betrieb eines Endnutzer Netzwerkes sind allerdings viele weitere Komponenten notwendig, z.B.:

  • DHCP/DHCPv6
  • Router Advertisments
  • DNS (Resolver & Authoritative)
  • Firewall (Policies, NAT, MSS-Clamping)

4.1 Reachability

4.1.1 Layer 2

Die eigene primäre MAC-Adresse im Mesh kannst du der Kopfzeile von batctl originators entnehmen, sie folgt dem Label MainIF/MAC:

# batctl originators | head -n1
[B.A.T.M.A.N. adv 2018.1, MainIF/MAC: mesh0/XX:XX:XX:XX:XX:XX
 (bat0/f0:9f:c2:de:c4:c5 BATMAN_IV)]

Welche MAC-Adresse gehört zu welchem Team? Tauscht euch dazu untereinander aus.

Team 1: ____:____:____:____:____:____ Team 4: ____:____:____:____:____:____

Team 2: ____:____:____:____:____:____ Team 5: ____:____:____:____:____:____

Team 3: ____:____:____:____:____:____ Team 6: ____:____:____:____:____:____

Gateway: 00:0d:b9:45:82:59

Erreichst du alle Knoten (im folgenden auch Originators genannt) im Mesh?

# batctl originators
# batctl ping <MAC Address>

Welche Knoten erreichst du direkt, welche über benachbarte Knoten? Zeichne einen Graph, der die möglichen Pfade im Mesh abbildet.

# batctl traceroute <MAC address>







Welche Datenrate erreichst du zu jedem Knoten im Mesh-Netzwerk?

# batctl throughputmeter <MAC address>

Team 1: _____________ Mbit/s Team 4: _____________ Mbit/s

Team 2: _____________ Mbit/s Team 5: _____________ Mbit/s

Team 3: _____________ Mbit/s Team 6: _____________ Mbit/s

4.1.2 Layer 3

Um die lokalen IP-Addressen im LAN ebenfalls im gesamten Mesh erreichbar zu machen, fügen wir bat0 als Slave-Interface in die LAN Bridge ein:

# ip link set master br-lan dev bat0

Im Mesh-Netzwerk befindet sich auf der IP-Adresse 192.168.0.10 ein Gateway. Kannst du es anpingen? Kannst du die auf dem Webserver hinterlegte Webseite aufrufen?

# ping 192.168.0.10
# curl http://192.168.0.10/freifunk.html

Kannst du dir das dort hinterlegte Video auf einem angeschlossenen Laptop ansehen?

http://192.168.0.10/freifunk.mp4

An welchen Knoten ist das Gateway angeschlossen?

# batctl traceroute 192.168.0.10

Knoten: ____________________

Welche Datenrate erreichst du zum Gateway?

# iperf3 -c 192.168.0.10

Gateway: _____________ Mbit/s

Baue nun über das Gateway eine Internetverbindung auf und versuche den Zielhost zu erreichen.

# ip route add default via 192.168.0.10 dev br-lan
# ping 82.195.73.11
# traceroute -n 82.195.73.62

Kannst du über das Mesh DNS-Namen auflösen? Auf dem Gateway läuft hierfür ein DNS-Resolver.

# nslookup darmstadt.freifunk.net 192.168.0.10

5. Ausblick

Ihr habt nun erfolgreich ein Mesh-Netzwerk zusammengebaut. Die Ausbaustufen ab hier sind quasi beliebig - beispielsweise sollte man private Meshes zur Erweiterung des Heimnetzes unbedingt noch um Verschlüsselung erweitern.

Für Freifunk bauen wir allerdings gemeinsam ein freies und offenes Mesh für die Region, dabei verzichten wir bewusst auf Verschlüsselung, Zugangscodes und Vorschaltseiten zugunsten der Barrierefreiheit und stellen durch den Bau von Firmwareimages für möglichst viele Geräte und den Betrieb der Backend-Infrastruktur die nötige Grundstruktur.

Interesse geweckt?

Freifunk Darmstadt

Freifunk Darmstadt trifft sich jeden Montag ab 19:00 Uhr zum planen, diskutieren und beraten in den Räumen des Chaos Computer Club Darmstadt e.V. in der Wilhelminenstr. 17 in der Darmstädter Innenstadt.

Wir freuen uns auf Euch!

Freifunk Frankfurt

Freifunk Frankfurt freut sich auf euch! Komm zu unserem Treffen jeden zweiten Montag im Monat. Wir treffen uns in den Räumlichkeiten des Chaos Computer Club Frankfurt e.V. in der Häuser Gasse 2.