IEEE 802.11s Mesh Network - Allgemeines
Transcription
IEEE 802.11s Mesh Network - Allgemeines
Hochschule RheinMain — Master Informatik — Masterprojekt IEEE 802.11s Mesh Network auf SoHo Routern mit OpenWRT Thomas Wagner 26. August 2012 Inhaltsverzeichnis Inhaltsverzeichnis I Abbildungsverzeichnis III 1 Einführung 1.1 Wireless Mesh Networks . . . . . . . . . . . . . 1.1.1 Einsatzgebiete . . . . . . . . . . . . . . 1.2 Überblick über IEEE 802.11s . . . . . . . . . . 1.2.1 Komponenten eines 802.11s-Meshnetzes 1.2.2 Einsatzgebiete . . . . . . . . . . . . . . 1.3 OpenWRT . . . . . . . . . . . . . . . . . . . . 1.4 Das Projekt . . . . . . . . . . . . . . . . . . . 1.4.1 Ziel des Projektes . . . . . . . . . . . . 1.4.2 Anpassung des Projektzieles . . . . . . 1.4.3 Projektabschluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 IEEE 802.11s-Meshnetzwerk im Betrieb 2.1 Erweiterung des 802.11-Frames . . . . . . . . . . . . . . . . . 2.2 Vermaschung . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Address Resolution Protokoll . . . . . . . . . . . . . . . . . . 2.4 Hybrid Wireless Meshprotokoll . . . . . . . . . . . . . . . . . 2.4.1 Aufbau eines Pfades . . . . . . . . . . . . . . . . . . . 2.4.2 Reaktiver Modus . . . . . . . . . . . . . . . . . . . . 2.4.3 Proaktiver Modus . . . . . . . . . . . . . . . . . . . . 2.4.4 Vor- und Nachteile der verschiedenen Routingvarianten 2.5 Überblick über die verschiedenen Kommunikationsebenen . . . 3 IEEE 802.11s-Meshnetzwerke unter Linux I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 3 4 4 5 5 5 5 . . . . . . . . . 6 6 8 8 9 10 11 11 12 12 13 Inhaltsverzeichnis 3.1 3.2 Verhältnis zwischen Mesh Points und Mesh Access Points . . . . . . . . . . 14 Meshframehandling im Linuxkernel . . . . . . . . . . . . . . . . . . . . . . 15 4 IEEE 802.11s-Meshnetzwerke unter OpenWRT 4.1 UCI - das OpenWRT-Konfigurationstool . . . 4.1.1 802.11s per UCI einrichten . . . . . . 4.1.2 LUCI - Webkonfigurationsinterface . . 4.2 Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . . . 5 Troubleshooting 5.1 Kein Datenaustausch im 802.11s-Meshnetzwerk . 5.1.1 Manuelles Füllen der Tabellen . . . . . . 5.2 ARP-Verabeitung . . . . . . . . . . . . . . . . . 5.2.1 ARP-Filterung per sysctl . . . . . . . . . 5.3 Open11s-Funktionen in der MAC80211-Schicht . 5.4 Welche Frames erreichen die MAC80211-Schicht 5.5 Fehlerbehebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 17 18 18 . . . . . . . 19 19 20 20 20 20 20 21 6 Zusammenfassung 23 6.1 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 6.1.1 LUCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 6.1.2 Auth SAE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 A 802.11s-Meshnetz mit iw verwalten A.1 Aufsetzen eines 802.11s-Meshnetzes A.2 Netzstatus abfragen . . . . . . . . . A.3 Mesh-Parameter . . . . . . . . . . . A.4 Verschlüsseltes Mesh einrichten . . . B 802.11s-Meshnetz unter OpenWRT B.1 Mesh Point . . . . . . . . . . . B.2 Mesh Portal (MPP) . . . . . . . B.3 Mesh Access Point (MAP) . . . B.4 Mesh-Parameter . . . . . . . . . B.5 Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 25 26 27 . . . . . 28 29 31 34 36 36 C OpenWRT mit 802.11s für WRT160NL kompilieren 38 Literaturverzeichnis 41 II Abbildungsverzeichnis 1.1 1.2 Wireless Mesh Network mit direktem Path und Path über mehrere Hops . . . . Netzwerk mit Mesh Point, MPP und MAP . . . . . . . . . . . . . . . . . . . . 2.1 2.2 2.3 2.4 2.5 Standard-802.11-Frame wird um das Mesh-Control-Field erweitert . Sequenznummer bei Broadcast . . . . . . . . . . . . . . . . . . . . Peerbildung nach Beacon-Empfang . . . . . . . . . . . . . . . . . . Erwartungsgemäßes Verhalten der Verarbeitung eines ARP-Request. Path Request nach Senden des Rootannouncments . . . . . . . . . 3.1 3.2 Das Open 11s-Projekt steuert 802.11s-Erweiterungen für Linux Wireless bei. . . 13 Treiber übergibt Frame an MAC80211 . . . . . . . . . . . . . . . . . . . . . . 15 5.1 ARP-Reply kann wegen fehlenden Pfades nicht gesendet werden. . . . . . . . . 19 . . . . . . . . . . . . . . . . . . . . Quelle der in den Abbildungen verwendeten Cliparts: openclipart.org, Public Domain. III . . . . . 1 3 . 6 . 7 . 8 . 9 . 11 Kapitel 1 Einführung Dieses Kapitel vermittelt zunächst die Grundlagen, auf denen dieses Projekt aufbaut. Abschnitt 1.1 beschreibt allgemeine (Wireless) Mesh Networks. Anschließend geht Abschnitt 1.2 auf den Spezialfall IEEE 802.11s ein. Zum Betreiben des Meshnetzes kommt in diesem Projekt das in Abschnitt 1.3 beschriebene OpenWRT als Betriebssystem zum Einsatz. Nach Vermittelung der Grundlagen werden in Abschnitt 1.4 die Ziele dieses Masterprojektes genauer beschrieben. 1.1 Wireless Mesh Networks Wireless Mesh Networks (WMN) sind kabellose Ad-hoc-Netzwerke, die ohne feste Infrastruktur auskommen. Netzaufbau und Konfiguration finden automatisch statt. Knoten, die im direkten Funkkontakt stehen, bauen einen virtuellen Datenkanal (Peer ) zueinander auf, wie Abbildung 1.1 zeigt. Abbildung 1.1: Wireless Mesh Network mit direktem Path (gelb) und Path über mehrere Hops (orange). 1 1.2. Überblick über IEEE 802.11s Über diesen Datenkanal können benachbarte Knoten direkt miteinander kommunizieren. Nachrichten an entfernte Knoten müssen von den WMN-Teilnehmern entsprechend weitergeleitet werden. Die Strecke von Datenquelle (sendender Knoten) zu Datensenke (empfangender Knoten) wird als Pfad bzw. Path bezeichnet. In der Regel haben Meshnetzwerke auch keinen zentralen Knoten bzw. Master-Knoten. Alle Teilnehmer sind gleichberechtigte Kommunikationsparter. Peers und Paths zwischen den Knoten werden ständig aktualisiert. Dies erlaubt eine hohe Dynamik hinsichtlich der Topologie des Netzwerkes. Außerdem zeichnet sich ein Meshnetz durch eine gute Skalierbarkeit aus. Die Knoten können sich also jederzeit in ein Mesh ein- und ausbuchen, sowie ihre Position innerhalb des Netzwerkes verändern. 1.1.1 Einsatzgebiete Wireless Mesh Networks sind vielseitig einsetzbar. Nachfolgend werden beispielhaft zwei Einsatzszenarien erläutert. Sensornetzwerke: In einem Sensornetzwerk werden die einzelnen Sensoren häufig über ein Meshnetz miteinander verbunden. Dieses Meshnetz (WSN, Wireless Sensor Network) kann von außen als eine einzige logische Sensorenplattform betrachtet werden. Internet in strukturschwachen Regionen: In strukturschwachen Regionen, in denen kein DSL oder vergleichbar schnelle Internetanbindungen verfügbar sind, werden Meshnetze genutzt, um einzelne Haushalte per Funk an das Internet anzuschließen. Die einzelnen Häuser werden mit Antennen ausgestattet und vernetzen sich untereinander. Zusätzlich wird mindestens ein Haus per Richtfunk mit einem Sendemast verbunden, der dann den Zugang zum Internet für das gesamte Meshnetz zur Verfügung stellt. 1.2 Überblick über IEEE 802.11s Das Institute of Electrical and Electronics Engineers (IEEE) hat seine WLAN-Spezifikation 802.11 mit der Teilspezifikation 802.11s [11s] um einen Standard für Meshnetzwerke erweitert. Die Spezifikation hat zur Zeit den Status Draft. Sie ist also noch nicht endgültig abgeschlossen. Das besondere dabei ist, dass das Routing auf MAC-Ebene stattfindet (Layer 2 des OSI-Modells) und nicht wie sonst üblich auf IP-Ebene (OSI-Layer 3). Dies macht das Routing sehr effizient hinsichtlich Bearbeitungszeit, Ressourcenbedarf und Energieverbrauch. Für die Anwendungsebene wird das Routingverfahren transparent gehalten. Anwendungen können über normale IP-Sokets kommunizieren. Es müssen keine speziellen MAC-Sockets implementiert werden. Dies geschieht durch das Address Resolution Protokoll (ARP), welches IP-Adressen auf MAC-Adressen abbildet (siehe [ARP]). Wie in Meshnetzen üblich, können auch in 802.11s-Netzen ständig Teilnehmer wegfallen und neue hinzukommen. Daher wird auf die Verwendung von DHCP verzichtet. Gemäß der Spezifikation ist nämlich nicht gewährleistet, das ein DHCP-Server immer verfügbar ist. Die IP-Adressen 2 1.2. Überblick über IEEE 802.11s müssen von den Meshteilnehmern statisch konfiguriert werden. Kapitel 2 erläutert die wichtigsten Vorgänge im Betrieb eines 802.11s-Meshnetzes, wie die Vermaschung der Knoten und das Routing der Datenpakete. Parameter eines 802.11s-Meshnetzes: • Mesh-ID: Identifiziert ein Meshnetz und ist somit das Pendant zur ESSID im herkömmlichen WLAN-Netz. Alle Netzwerkteilnehmer mit derselben Mesh-ID bilden ein Meshnetz. • Kanal/Frequenz: Es werden die im 802.11-Standard-üblichen Kanäle und Frequenzen genutzt. Die Teilnehmer eines Meshnetzes müssen denselben Kanal verwenden. • Bandbreite: Standardgemäß wird eine Bandbreite von 20 MHz genutzt. Optional kann, wie beim IEEE 802.11n-Standard, auch eine Bandbreite von 40 MHz gewählt werden. Verschlüsselte Kommunikation: Da laut Spezifikation ein 802.11s-Meshnetzwerk stark skaliert, kann es keinen zentralen Knoten als Authentifizierungsserver geben. Die Authentifizierung muss Peer-2-Peer über einen Preshared-Key erfolgen. Hierfür können die in IEEE 802.11i definierten Authentifizierungsmethoden wie WPA2 eingesetzt werden. Als Alternative definiert 802.11s mit [SAE] ein eigenes Authenfizierungs- und Verschlüsselungsprotkoll: Simultaneous Authentication of Equals (SAE, Auth SAE). Auth SAE wendet Zero-KnowledgeProof an. Es ist sicher gegenüber aktiven und passiven Attacken, so wie Wörterbuchattacken. 1.2.1 Komponenten eines 802.11s-Meshnetzes Abbildung 1.2: Netzwerk mit Mesh Point (MP), Mesh Portal (MPP) und Mesh Access Point (MAP) Die Teilnehmer eines 802.11s-Meshnetzwerkes werden als Mesh Point (MP) bezeichnet. Ein MP kann ein Router sein, aber auch ein 802.11s-fähiges Laptop, dass sich mit dem Mesh verbunden hat. Die Mesh Points können zusätzlich zwei Sonderrollen einnehmen. Ein Mesh Access Point (MAP) gehört zum einen zu einem Mesh wie ein gewöhnlicher MP, zum anderen gibt er sich als normaler 802.11a/b/g/n-Access Point aus und macht somit das Mesh für herkömliche WLAN-Endgeräte 3 1.3. OpenWRT nutzbar. Ein Mesh Portal (MPP) verbindet das Mesh mit einem andren Netzwerk (Gateway). Es ist möglich, einen Meshknoten gleichzeitig als MAP und MPP zu konfigurieren. Abbildung 1.2 zeigt ein Meshnetz mit verscheidenen Komponenten. 1.2.2 Einsatzgebiete Der Einsatzzweck von 802.11s liegt hauptsächlich im Ersatz kleinerer interner Netzwerke, sowie im Last-Mile-Internetaccess (siehe [Abid]). In kleineren Firmen könnte das Intranet durch ein 802.11sMeshnetzwerk realisiert werden. Das Verlegen von Kabeln und die Installation von Switches ist somit überflüssig. Relativ teure Businesshardware kann durch günstige SoHo-Produkte ersetzt werden. Ein Firmengebäude kann problemlos mit WLAN abgedeckt werden, ohne dass Repeater, welche in der Realität oft Probleme verursachen, zum Einsatz kommen müssen. Auch im Heimbereich kann 802.11s zum Einsatz kommen. In älteren Häusern mit stark abschirmenden Wänden kann das Meshnetz für flächendeckenden Netzwerkzugriff sorgen. Dieses Konzept kann auf große Wohnalagen ausgedehnt werden. In einem Studentenwohnheim oder einem Hochhaus gäbe es dann einen zentralen High-Speed-Internetzugang. Die einzelnen Wohnungen nutzen diesen gemäß dem Last-Mile-Internetaccess-Konzept dann über das Meshnetzwerk. In San Francisco wird dieses Konzept bereits angewandt, um in sozialen Brennpunkten kostenlosen Internetzugang anzubieten. Ein Meshnetz wird hier über ganze Häuserblocks verteilt. Auch das One Laptop per Child-Projekt1 nutzt den 802.11s-Standard. Im Gegensatz zu den vorher genannten Einsatzgebieten existiert hier keine feste Infrastruktur, also keine fest installierten Router. Die Laptops vernetzen sich direkt im freien Feld miteinander. Dies ist dank der Dynamik und Skalierbarkeit der 802.11s-Netze problemlos möglich. Damit sind Meshnetze auch für den Katastrophenschutz, Rettungsdienst oder die Polizei eine denkbare Möglichkeit, eine mobile Vernetzung an größeren Einsatzorten umzusetzen. Ein Einsatzleitfahrzeug dient als Gateway zum Internet bzw. zum Polizei-Intranet. Weitere Einsatzwagen vernetzen sich mit dem Einsatzleitfahrzeug. Zudem können Akkubetriebene Router die Reichweite des Netzes erweitern. 1.3 OpenWRT OpenWRT ist eine minimale Linuxdistribution, die für den Einsatz auf Embedded Devices, insbesondere für Router, konzipiert worden ist. Die OpenWRT-Community2 stellt sowohl fertige Images der Stable-Version zum Download, als auch den kompletten Quellcode zusammen mit einer auf Menuconfig basierenden Toolchain über SVN bereit. Der Einsatz von OpenWRT auf SoHo-Routern bringt diverse Vorteile gegenüber dem Betrieb mit der originalen Firmware. OpenWRT nutzt die 1 2 One Laptop per Child verteilt 100-Dollar-Laptops an Kinder in Entwicklungsländern. OpenWRT-Homepage: http://www.openwrt.org/; Projektmanagement: https://dev.openwrt.org/ 4 1.4. Das Projekt technischen Möglichkeiten der Hardware nahezu komplett aus, während die Herstellersoftware oft nur einen bestimmten Bereich an Funktionen zulässt. Kapitel 3 zeigt, dass 802.11s-Meshnetze unter Linux mit Hilfe des Kernelmoduls MAC80211 betrieben werden. MAC80211 ist für SoftMAC-WLAN-Karten zuständig. Die meisten SoHo-Router setzen diese relativ günstige Variante von WLAN-Karten ein. OpenWRT kann somit mit sehr vielen Routern 802.11s-Meshnetze aufbauen, auch wenn die Konfiguration noch nicht ganz ausgereift ist, wie in Kapitel 4 zu sehen ist. 1.4 1.4.1 Das Projekt Ziel des Projektes Ziel des Projektes ist es ein Meshnetzwerk nach IEEE 802.11s-Standard mit SoHo-Routern aufzubauen. In dem Projekt kommen fünf Router vom Typ Linksys WRT160NL3 zum Einsatz. Diese werden mit OpenWRT Backfire 10.03.1 (Stable, Dez. 2011) oder der Entwicklerversion Attitude Adjustment (Version: r32582) aus dem SVN-Trunk geflasht. Es soll dokumentiert werden, wie ein Meshnetzwerk unter OpenWRT konfiguriert und aufgebaut werden kann. Bisher fehlende Konfigurationsmöglichkeiten sollen durch entsprechende Erweiterungen ergänzt werden. Mit diesem Dokument werden wichtige Komponenten von 802.11s erläutert und die Umsetzung von 802.11s unter Linux und OpenWRT betrachtet. 1.4.2 Anpassung des Projektzieles Das Meshnetzwerk ließ sich mit der gegebenen Hardware zwar aufbauen, aber das Austauschen von Daten zwischen den einzelnen Knoten schlug fehl. Das Projektziel wurde dementsprechend angepasst. Höchste Priorität hatte das Auffinden und Beheben des Fehlers, der den Datenaustausch zwischen den WRT160NL-Knoten in dem Meshnetzwerk verhinderte. Kapitel 5 beschreibt den Weg der Fehlerbehebung. 1.4.3 Projektabschluss Alle Ziele konnten innerhalb des Projektes umgesetzt werden. Kapitel 6 erläutert die erreichten Ziele genauer. Die im Rahmen des Projektes erstellten Erweiterungen sind über das VS-Wiki der Hochschule RheinMain4 verfügbar. 3 4 Informationen zu OpenWRT auf dem WRT160NL http://wiki.openwrt.org/toh/linksys/wrt160nl https://wwwvs.cs.hs-rm.de/vs-wiki/index.php/MasterProjekte/802.11s auf SoHo-Routern 5 Kapitel 2 IEEE 802.11s-Meshnetzwerk im Betrieb In erster Linie sind 802.11s-Meshnetzwerke eine Spezialform von generellen 802.11-WLAN-Netzwerken. Sie nutzen die Standard-802.11-Frames, mit einer in Abschnitt 2.1 beschriebenen Erweiterung. Zudem kommt Carrier Sense Multiple Access/Collision Avoidance (CSMA/CA) zum Einsatz. Dieser Mechanismus soll das gleichzeitige Senden zweier 802.11-WLAN-Geräte auf der selben Frequenz verhindern. Bevor ein 802.11-Frame abgeschickt wird, muss der Sender überprüfen, ob auf der Frequenz gesendet wird und gegebenenfalls die zusendende Frame solange zurückhalten, bis die Frequenz wieder frei ist. 2.1 Erweiterung des 802.11-Frames Abbildung 2.1: In 802.11s Meshnetzen wird der Body eines Standard-802.11-Frames um das Mesh-Control-Field erweitert. 6 2.1. Erweiterung des 802.11-Frames Wie in Abbildung 2.1 zu sehen ist, werden auch in 802.11s-Meshnetzen Standard-802.11-Frames zur Datenübertragung verwendet, die um ein Mesh-Control-Field erweitert sind. Das Mesh-ControlField nutzt die ersten Bytes des Frame-Bodys. Die Nutzdaten folgen anschließend. WLAN-Geräte, die nicht 11s-fähig sind, behandeln das Mesh-Control-Field daher als Teil eines normalen FrameBodys. 11s-Frames können also mit den Standard 802.11-Mechanismen verarbeitet werden und stellen für nicht 11s-fähige WLAN-Geräte, die sich mit einem Meshnetzwerke die Frequenz teilen, keinen unnötigen Ballast dar. Der 11s-Frame wird von ihnen als netzwerkfremd erkannt und verworfen. Adressfeld 1 und 2 werden für einen Hop des Datenpaketes verwendet. Adressfeld 3 und 4 werden für die Absender- (BSSID) und Ziel-MAC-Adresse innerhalb des Meshnetzes genutzt. Im Flags-Field des Mesh-Control-Fields kann durch das Setzen der ersten beiden Bits die Nutzung von Adressfeld 5 und 6 bekannt gegeben werden. Diese werden als globale Absender- und Empfängeradresse genutzt und benötigt, wenn Empfänger und Sender außerhalb des Meshnetzes liegen. Beispiel: Zwei Computer kommunizieren miteinander. Sie sind mit verschiedenen MAPs (vgl. Abschnitt 1.2.1) verbunden, die sich im selben Meshnetz befinden. Adresse 5 ist in diesem die MAC-Adresse des sendenden Computers und Adresse 6 die Adresse des empfangenden Computers. Abbildung 2.2: Router B erhält bei einem Broadcast identische Nachrichten auf verschiedenen Wegen. Anhand der MAC-Adresse des Absenders und der Sequenznummer wird die Dublette erkannt. Ein TTL-Feld (Time-to-live) verhindert, dass Pakete endlos lange im Netz weitergeleitet werden. Außerdem wird jede Nachricht vom Sender mit einer Sequenznummer versehen. Diese kommt bei Broadcasts zum Einsatz und soll das Wiederholen identischer Nachrichten und somit überflüssigen Datenverkehr vermeiden, wie Abbildung 2.2 zeigt. Die Netzwerkknoten loggen, welche Nachrichten sie von welcher MAC-Adresse mit welcher Sequenznummer erhalten haben. Sollten identische Nachrichten über verschiedene Wege denselben Knoten erreichen, wird die Dublette anhand Sender-MAC und Sequenznummer erkannt und die Nachricht nur einmal weitergeleitet. 7 2.2. Vermaschung 2.2 Vermaschung In 802.11s-Meshnetzen ist die Netzbildung (Vermaschung) streng von der Routingebene getrennt. Alle Peers werden in der so genannten Stationtable eingetragen. Zum Eintrag gehören auch Informationen zur Verbindungsqualität und zum Datendurchsatz. Theoretisch könnten anhand der Einträge der Stationtable der Pfad zu benachbarten Knoten direkt abgeleitet werden. Durch die Trennung von Vermaschung und Routing ist dies aber nicht mehr möglich. Somit hält man sich die Möglichkeit offen, neben dem Standard-Routingprotokoll HPWM auch zusätzliche Protokolle optional zuzulassen. Abbildung 2.3: Nach Empfang des Beacons (1) wird per Peer Request (2) und Peer Reply (3) der Peer (4) zwischen den Knoten etabliert. Jeder Netzwerkknoten sendet in regelmäßigen Abständen ein Beacon, mit dem unter anderem auch die Mesh-ID publiziert wird. Empfängt nun ein anderer Knoten mit derselben Mesh-ID den Beacon in ausreichendener Qualität, stellt er daraufhin einen Peer-Request an den Beacon-Sender. Dieser quittiert dies mit einem Beacon-Reply (siehe Abbildung 2.3). Die beiden Knoten sind nun über einen Peer verbunden. Der Peer ist ein logischer Datenkanal, der vom unterliegenden Routingprotokoll zum Datenaustausch genutzt wird. 2.3 Address Resolution Protokoll (ARP) Möchte ein Knoten mit einer bestimmten IP-Adresse kommunizieren, kommt das Address Resolution Protokoll (ARP) zum Einsatz. Wie in klassischen WLAN-Netzen üblich, existiert eine ARPTabelle, in der IP-Adressen MAC-Adressen zugeordnet werden. Hat der Router einen entsprechenden Eintrag in dieser Tabelle, kann das Datenpaket an die korrekte MAC-Adresse adressiert werden. 8 2.4. Hybrid Wireless Meshprotokoll Ist dies nicht der Fall, wird ein ARP-Request per Broadcast durch das Meshnetz geschickt. Der ARP-Request enthält die gesuchte IP-Adresse, sowie IP- und MAC-Adresse des Senders. Er wird mit einen ARP-Reply quittiert. Die Quittierung erfolgt über einen Path als Unicast. Standardgemäß werden 802.11s-Meshnetze mit dem in Abschnitt 2.4 beschriebenen HPWM Protokoll betrieben. Wird der reaktive Modus dieses Protokolls genutzt, kann es durchaus vorkommen, dass noch kein Abbildung 2.4: Erwartungsgemäßes Verhalten der Verarbeitung eines ARP-Request. Path für diesen Unicast besteht. Der ARP-Reply wird dann so lange zurückgehalten, bis der Path, wie in Abschnitt 2.4.2 beschrieben, aufgebaut ist. Abbildung 2.4 veranschaulicht das Prinzip. 2.4 Hybrid Wireless Meshprotokoll (HPWM) Das Hybrid Wireless Meshprotokoll (HPWM) ist das Standardprotokoll für das Routing innerhalb von 802.11s-Meshnetzen. 802.11s erlaubt es zwar, eigene Routingprotokolle zu nutzen. Diese können aber nur optional hinzugefügt werden. Bei der vollständigen Implementierung des Standards ist das Vorhandensein von HPWM Pflicht. Wie der Name schon sagt, handelt es sich bei HPWM um ein hybrides Protokoll. Standardgemäß befindet sich das Meshnetz im reaktiven Modus. Jeder Knoten erfragt den Path zu einem bestimmten Ziel genau dann, wenn er zu diesem Ziel auch Daten senden will. Im proaktiven Mo- 9 2.4. Hybrid Wireless Meshprotokoll dus hat ein Knoten die Rolle eines Rootknotens und stellt in einer Treetopologie Paths zu allen anderen Netzteilnehmern her. Sollte der Rootknoten ausfallen, wird automatisch in den reaktiven HPWM-Modus gewechselt. [Conn] zeigt einen guten Überblick über beide Routingmodi. HPWM speichert alle aktiven Pfade in einer Meshpath-Tabelle ab. In einem Tabelleneintrag wird einer Empfänger-Adresse eine Next-Hop-Adresse zugeordnet. Die Next-Hop-Adresse muss über einen Peer erreichbar sein. Wenn Sender und Empfänger über einen Peer miteinander verbunden, sind Next-Hop-Adresse und Empfänger-Adresse identisch. Aus HPWM-Sicht ist nicht der komplette Pfad zu einem Empfängerknoten bekannt, sondern immer nur der nächste Hop. 2.4.1 Aufbau eines Pfades Für den Aufbau von Pfaden innerhalb von 802.11s-Meshnetzen wird eine Variation des Ad-hoc On-demand Distance Vector-Routingalgorithmus (AODV) verwendet. [AODV] sieht hierfür vier Nachichtentypen vor: Route Request (RREQ), Route Reply (RREP), Route Error (RERR) und Reply Acknowledgement (RREP-ACK). HPWM nutzt Variationen dieser Nachichtentypen: Path Request (PREQ), Path Reply (PREP), Path Error (PERR) und Path Reply Acknowledgement (PREPACK). Für den Aufbau eines Pfades, wird von einem Knoten zunächst ein PREQ-Paket gesendet. Im Adressfeld 4 ist die Ziel-MAC-Adresse wie bei einem Unicast eingetragen. Als Hop-Zieladresse, ist aber die MAC-Broadcast-Adresse (FF:FF:FF:FF:FF:FF) eingetragen. Wie bei einem gewöhnlichen Broadcast werden die Pakete über alle vorhandenen Peers weitergeleitet. Kommen nun auf verschiedenen Wegen identische Nachrichten bei einem Knoten an, werden die Dubletten nicht wie sonst üblich anhand der Kombination von Sender-MAC-Adresse und Sequenznummer verworfen. Stattdessen kommt eine Erweiterung des AODV-Konzepts zum Tragen, die in [Abid] beschriebene Best Path Metric. Pakete werden nur dann verworfen, wenn sie eine schlechtere Path Metric haben, als bereits empfangene identische Pakete. Best Path Metric: Die Path Metric beschreibt die Qualität eines Pfades. Hierfür wird die Airtime eines Paketes auf einem Pfad gemessen. Die Airtime beschreibt die Dauer, die ein Paket von der Quelle zum Ziel braucht. Die Netzwerknoten messen zusätzlich die Zeit interner Verzögerungen, welche in der Regel durch den Einsatz von CSMA/CA zustande kommen. Um die Path Metric zu bestimmen wird von der Airtime diese Verzögerungszeit abgezogen. Der Pfad mit dem geringsten Wert erfüllt nun das Best Path Metric-Kriterium. Der Zielknoten bekommt nun über jeden Peer genau eine Kopie des PREQ-Paketes zugestellt, sofern der Knoten einen möglichen Pfad zum Sender des PREQ-Paktes hat. Der Zielknoten trägt nun in seiner Meshpath-Tabelle die MAC-Adresse des PREQ-Senders ein. Als Next-Hop wird die MAC-Adresse eingetragen, von der das PREQ-Paket kam, welches das Best Path Metric-Kriterium erfüllt. Nun wird über diesen Pfad der PREP gesendet. Alle Hop-Knoten tragen nun nach dem selben Schema die MAC-Adresen von PREQ-Sender und Empfänger ein. Als Next-Hop für die Empfänger-MAC wird die PREP-Quelle eingetragen und als Next-Hop für die Sender-MAC die 10 2.4. Hybrid Wireless Meshprotokoll PREQ-Quelle genommen, die das Best Path Metric-Kriterium erfüllt. Kommt nun das PREP-Paket beim PREQ-Sender an, quittiert er den Pfad mit einem PREP-ACK-Paket. 2.4.2 Reaktiver Modus Im reaktiven Modus wird ausschließlich die im Abschnitt 2.4.1 beschriebene Variation von AODV verwendet. Ein Pfad wird erst dann aufgebaut, wenn Daten an eine bestimmte MAC-Adresse versandt werden sollen. Hierfür wird die Meshpath-Tabelle überprüft. Ist für die Zieladresse kein Eintrag vorhanden, wird zunächst der Pfad, wie in Abschnitt 2.4.1 beschrieben ist, aufgebaut. Anschließend erfolgt der Datenversand. Wird der Pfad nicht mehr genutzt, gilt er nach einem Timeout als ungültig. 2.4.3 Proaktiver Modus Im proaktiven Modus übernimmt ein Knoten die Root-Rolle und signalisiert dies den anderen Knoten durch das Rootannouncement. Dieses wird per Broadcast im Meshnetz verteilt. Abbildung 2.5 Abbildung 2.5: Path Request nach Senden des Rootannouncments zeigt die Ausbreitung des Rootannouncements. Durch die Verteilung bildet sich auf Pfadebene ein Baum, mit dem Rootknoten als Wurzel. Nach Empfang des Rootannouncements baut ein Knoten durch senden eines PREQ-Paketes den Pfad zum Rootknoten auf (Markierung 1 in Abbildung 2.5). Geschieht der Aufbau über mehrere Hops, bauen die Knoten, die die PREQ- und PREP-Pakete weitergeleitet haben, zu dem PREQ-Sender ebenfalls einen Pfad auf (Markierung 2). Nachdem jeder Knoten im Netz auf das Rootannouncement reagiert hat, kennt somit jeder Knoten den Pfad zum Rootknoten und zu den Hop-Knoten auf dem Weg zum Rootknoten, sowie den Pfad zu all seinen Kindknoten. Pakete, die an unbekannte MAC-Adressen adressiert sind, müssen in jedem Fall Richtung Rootknoten gesendet werden. Ist ein Knoten mit der Ziel-MAC-Adresse im Netz vorhanden, muss spätestens der Rootknoten den Pfad zu diesem kennen. Ist dies nicht der Fall, wird mit dem PERR-Paket (Path Error) signalisiert, dass kein Pfad zum Ziel vorhanden ist. PERR wird auch benutzt, wenn ein Knoten aus dem Netz entfernt wird. 11 2.5. Überblick über die verschiedenen Kommunikationsebenen 2.4.4 Vor- und Nachteile der verschiedenen Routingvarianten Herrscht in einem Netz eine hohe Dynamik, so ist der reaktive Modus von HPWM von Vorteil. Die Pfade ändern sich ständig und müssen neu angepasst werden. In eher statischen Umgebungen ist dies aber von Nachteil. Die Kommunikation wird unnötig verzögert, da vor jedem Datenaustausch erst ein Pfad erstellt werden muss. Der proaktive Modus ist für statische Umgebungen besser geeignet. Insbesondere dann, wenn der Rootkonten gleichzeitig ein Portal (MPP) zum Internet darstellt. Die Pfade werden einmal aufgebaut und die Kommunikation kann direkt erfolgen. 2.5 Überblick über die verschiedenen Kommunikationsebenen Die nachfolgende Tabelle gibt einen Überblick über die Sendeebene, der in den vorherigen Abschnitten beschriebenen Pakettypen. Ebene Typ Direkter Funkkontakt Peer Beacon, Peer-Request, Peer-Reply Rootannouncement, Gateannouncement, PREQ, PREP, PREPACK, PERR, ARP-Request ARP-Reply, Datenversand Path Verschlüsselungsebene: Die Verschlüsselung von 802.11s-Meshnetzwerken erfolgt Peer-2-Peer, wie Abschnitt 1.2 zeigt. Jede Kommmunikation auf Peer- und Pathebene ist demnach verschlüsselt. Verschlüsselte 802.11s-Meshnetzwerke sind somit gegen Routing Attacks geschützt. 12 Kapitel 3 IEEE 802.11s-Meshnetzwerke unter Linux Das Linux Wireless-Projekt1 ist für den WLAN-Stack im Linuxkernel2 zuständig. Dieser wird unter dem Namen Compat Wireless veröffentlicht. Der WLAN-Stack wird derzeit komplett neu entwickelt. Die Entwicklung des alten Stacks um das Konfigurationsprogramm iwconfig ist eingestellt. Das Kernelmodul CFG80211 bildet den zentralen Knoten des neuen Stacks. Es kommuniziert direkt mit den Gerätetreibern der WLAN-Hardware. Da in der Regel, um WLAN-Hardware günstig herstellen zu können, die MAC-Schicht nicht in Hardware implementiert ist, muss diese durch Software emuliert werden. Hierfür ist das Kernelmodul MAC80211 zuständig, das bei s.g. Soft-MAC-WLAN-Karten diese Emulation vornimmt. MAC80211 wird in diesem Fall zwischen CFG80211 und Treiber geschaltet. NL80211 ist ein Kernelinterface (nl80211.h), das CFG80211 und die unterliegenden Schichten )*$ " ( &'(" ! "#$% &" ! %)+ Abbildung 3.1: Das Open 11s-Projekt steuert 802.11s-Erweiterungen für Linux Wireless bei. 1 2 Homepage des Linux Wireless-Projekts: http://linuxwireless.org/ Linuxkernel-Homepage: http://kernel.org/ 13 3.1. Verhältnis zwischen Mesh Points und Mesh Access Points kapselt. Für OpenWRT existiert eine abgespeckte Variante von NL80211: libnl-tiny. Programme im Userlayer können NL80211 nutzen, um über den neuen WLAN-Stack zu kommunizieren. Zur Zeit tun dies die Programme hostapd, crda und WPA Supplicant, wenn NL80211 als Treiber eingestellt wird (wpa supplicant -Dnl80211), sowie iw und Auth SAE. iw ist das CLI-Programm für den neuen WLAN-Stack. Mit iw können alle WLAN-Netze aufgesetzt und konfiguriert werden. Anhang A zeigt, wie per iw ein 802.11s-Meshnetzwerk eingerichtet wird. Das Open 11s-Projekt3 erweitert iw, NL80211, CFG80211, MAC80211 und die im Linuxkernel vorhandenen WLAN-Treiber um die 802.11s-Funktionen (siehe Abbildung 3.1). Da 802.11s noch in der Entwicklung ist (Status: Draft), existiert auch noch keine 802.11s-fähige Hardware. Somit kann das Routing auf MAC-Ebene nur mit Soft-MAC-WLAN-Karten umgesetzt werden. Unter Linux ist daher der Einsatz von MAC80211 in 802.11s-Meshnetzen zwingend erforderlich. Fortschritt der Implementierung: Der aktuelle 11s-Entwurf (Sept. 2011) ist allerdings bei Weitem noch nicht vollständig implementiert. Mit jeder weiteren Version von Compat Wireless kommen weitere Funktionen des 11s-Entwurfs hinzu. Die verschiedenen Compat Wireless-Versionen sind nicht immer zueinander kompatibel. Zum Betreiben eines Meshes sollten alle Knoten daher dieselbe Version nutzen. Open11s bietet zur Verschlüsselung derzeit ausschließlich Auth SAE4 an. Andere Methoden (vgl. Abschnitt 1.2) werden mit dem aktuellen Entwicklungstand nicht unterstüzt. Auth SAE wird vom Open11s-Projekt entwickelt und greift auf NL80211 zu. Um ein verschlüsseltes Mesh aufzusetzen, konfiguriert man es zunächst mit iw und ruft dann das Programm meshd-nl80211 auf. Dieses setzt die Auth SAE-Verschlüsselung um. Anhang A.4 zeigt hierfür ein Konfigurationsbeispiel. Verschlüsselung: 3.1 Verhältnis zwischen Mesh Points und Mesh Access Points In der aktuellen Implementierung von 11s agieren Mesh Points und Mesh Access Points auf verschiedenen Ebenen. Sind MAPs und MPs im selben Netz vorhanden, dient das Mesh ausschließlich zur Weiterleitung von Daten. Es bilden sich zwei Gruppen: Die eine besteht aus den einfachen Mesh Points und eventuell Mesh Portalen. Die andere Gruppe bildet sich aus allen Mesh Access Points und den Netzwerkknoten, die sich außerhalb des Meshes befinden und über eine klassische Netzwerkverbindung (WLAN, Ethernet) mit einem MAP verbunden sind. 3 Homepage des Open-11s-Projekts: http://open80211s.org/ Auth SAE-Projekt: http://authsae.sourceforge.net/ Siehe auch: https://github.com/cozybit/open80211s/wiki/HOWTO, Abschnitt For secured mesh und Secure Mesh Setup 4 14 3.2. Meshframehandling im Linuxkernel Alle Teilnehmer können sich gegenseitig anpingen. Datenversand kann aber nur innerhalb der jeweiligen Gruppen erfolgen. Ein MAP kann also alle anderen MAPs kontaktieren, sowie die externen Knoten, die sich hinter diesem verbergen. Gleiches gilt für einen aus Sicht des Meshes externen Rechner. Er kann alle MAPs und mit den MAPs extern verbundenen Knoten erreichen, aber keinen MP. Die Mesh Points hingegen können nur andere MPs (oder MPPs und das dahinter verborgene Netzwerk) erreichen, aber keinen MAP. Um den MAPs und den Mesh-externen Knoten, die mit ihnen Verbunden sind, Zugang zu einem fremden Netzwerk wie dem Internet zu ermöglichen, muss der entsprechende MPP in die Gruppe der MAPs überführt werden. Dies geschieht, indem dieser gleichzeitig als MPP und MAP konfiguriert wird. Die Einrichtung von MAP, MPP und MP ist im Anhang B beschrieben. 3.2 Meshframehandling im Linuxkernel Abbildung 3.2: Treiber übergibt Frame an MAC80211 Wie Abbildung 3.2 zeigt, wird die Interrupt-Service-Routine des WLAN-Treibers aufgerufen, wenn eine Frame empfangen wurde. Dieser erstellt ein Tasklet (siehe [Love]), welches für die Verarbeitung des Frames zuständig ist und die entsprechenden Daten an die MAC80211-Schicht weiter gibt (ieee80211 rx()). Nun wird geprüft, ob der Frame zu einem WLAN-Interface gehört. Für jeden Interfacetyp gibt es spezielle Handler. Der Meshhandler ist für die Meshinterfaces zuständig und überprüft zunächst, ob der Frame über die richtige Ebene versand wurde (siehe Tabelle in Abschnitt 2.5). Ist dies der Fall, wird entsprechend agiert. So wird zum Beispiel bei einem Broadcast auf Peer-Ebene der Frame weitergeleitet. Beim Empfang eines Datenpaketes mit einer fremden 15 3.2. Meshframehandling im Linuxkernel MAC-Adresse als Ziel wird in der Mesh-Path-Tabelle der nächste Hop ausgelesen und der Frame über den entsprechenden Path weitergeleitet. Ist das Datenpaket für den Knoten selbst bestimmt, wird der Payload des Frames an die IP-Schicht weitergegeben. 16 Kapitel 4 IEEE 802.11s-Meshnetzwerke unter OpenWRT Wie in Abschnitt 1.3 beschrieben, handelt es sich bei OpenWRT um eine für Router spezialisierte Linuxdistribution. Es kommen die Programme zum Einsatz, die auch auf Desktopdistributionen für den Netzwerkbereich zuständig sind. Teilweise werden auch Lightwight-Varianten dieser Programme genutzt. Das besondere an OpenWRT ist, dass alle Programme über ein einheitliches Konfigurationstool eingerichtet werden können. 4.1 UCI - das OpenWRT-Konfigurationstool Normalerweise erfolgt die Konfiguration der einzelnen Programme unter Linux über Konfigurationsdateien in Unterordnern des Verzeichnisses /etc. Deren Aufbau und Syntax ist allerdings alles andere als einheitlich. Deshalb nutzt OpenWRT UCI1 (Universal Configuration Interface) als Abstraktionsschicht für die individuellen Einrichtungsdateien. Auch für das Starten und Stoppen sowie das Aktivieren und Deaktivieren von Systemdiensten ist UCI zuständig. 802.11s-Meshnetzwerke werden ebenfalls über UCI eingerichtet. 4.1.1 802.11s per UCI einrichten Zu Beginn des Projektes war die Einrichtung von 802.11s-Meshnetzwerken mit UCI nur teilweise möglich. Die sogenannten Meshparameter konnten nicht eingestellt werden. Diese werden mit dem Programm iw gesetzt. Hier können z.B. Timeout-Perioden festgelegt werden, aber auch das Senden von Rootannouncement und Gateannouncement, welches zentrale Elemente von 802.11sMeshnetzen sind. Im Rahmen dieses Projektes wurde ein Patch erstellt, das diese fehlenden Funktionen ergänzt. Das Patch wurde dem OpenWRT-Projekt zur Verfügung gestellt2 , so dass künftig 1 2 http://wiki.openwrt.org/doc/uci https://dev.openwrt.org/ticket/11634 17 4.2. Verschlüsselung Meshnetzwerke vollständig über UCI eingerichtet werden können. Anhang B zeigt Konfigurationsbeispiele der verschiedenen Meshkomponenten. 4.1.2 LUCI - Webkonfigurationsinterface Von handelsüblichen Routern ist man es gewohnt, sie über eine Weboberfläche per Browser konfigurieren zu können. Dies ist auch mit OpenWRT möglich. Hier kommt eine MVC-Webanwendung namens LUCI zum Einsatz. LUCI ist ein Wrapper für UCI. Mit Abschluss dieses Projektes kann ein 802.11s-Meshnetzwerk komplett über LUCI eingerichtet werden. Zuvor konnte lediglich der Netzwerktyp 11s eingestellt werden. Weitere Optionen, wie z.B. das essentielle Setzen der Mesh-ID, konnte anschließend per UCI vorgenommen werden. 4.2 Verschlüsselung Wie in Kapitel 3 zu sehen, ist die Verschlüsselung von 802.11s-Meshnetzwerken unter Linux mit Auth SAE umgesetzt. Auth SAE ist aber kein Teil der OpenWRT-Distribution, da das Projekt den Entwicklungsstatus Prealpha hat. Im Rahmen dieses Projektes wurde ein Auth SAE-Paket für OpenWRT erstellt. Die Verschlüsselung lief stabil. Der Prealpha-Status zeigte sich lediglich in einer komplizierten Konfiguration, welche von der Dokumentation auf der Projekthomepage3 abwich. Auth SAE-Integration in UCI und LUCI: Um für den Enduser eine bequeme Einrichtung von Auth SAE zu ermöglichen, wurde UCI und LUCI entsprechend erweitert. Im einfachsten Fall muss nur ein Passphrase vom Nutzer gesetzt werden. Für alle übrigen erforderlichen Parameter werden Standartwerte genutzt, wenn der Nutzer keine Werte per UCI gesetzt hat. Anhang B.5 enthält weitere Informationen und zeigt ein Konfigurationsbeispiel. 3 Beschreibung der Konfigurationsparameter von Auth SAE: https://github.com/cozybit/authsae/blob/master/README 18 Kapitel 5 Troubleshooting In dem aus fünf Linksys WRT160NL-Routern bestehenden 802.11s-Meshnetzwerk erfolgte keine Datenkommunikation. Der Grund hierfür lag in einem Fehler des ATH9k-WLAN-Treibers, der Frames filterte, die zum Aufbau der Kommunikation benötigt wurden. Ein Großteil der Projektbearbeitungszeit wurde für die Fehleranalyse und die Behebung des Fehlers aufgewandt. Dieses Kapitel zeigt die wichtigsten Analysemethoden, die den Fehler zunächst eingekreist hatten und letztendlich die Behebung ermöglichten. 5.1 Kein Datenaustausch im 802.11s-Meshnetzwerk Zu Projektbeginn wurde ein einfaches Meshnetz aufgebaut. Hierbei wurden zwei Varianten getestet: der Aufbau über das CLI-Programm iw und über das OpenWRT-Konfigurationstool UCI (vgl Abschnitt 4.1). Um die Funktionsfähigkeit zu kontrollieren, wurde erfolglos versucht die Knoten gegenseitig anzupingen. Wie Abschnitt 2.5 zeigt, gibt es im 802.11s-Meshnetzwerk mehrere Ebenen. Der Fehler konnte der Peer-Ebene zugeordnet werden. Ein Aufruf von iw dev wlan0 station dump zeigte, dass alle WRT160NL-Router wie erwartet zueinander Peers aufgebaut hatten. Die Meshpath-Tabelle zeigte aber keine Einträge (Kommando: iw dev wlan0 mpath dump). Auch die ARP-Tabelle war leer. Abbildung 5.1: ARP-Reply kann wegen fehlenden Pfades nicht gesendet werden. 19 5.2. ARP-Verabeitung Kein Pfadaufbau: Per Wireshark wurde Entdeckt, dass kein Pfad aufgebaut wird (siehe Abbildung 5.1). Neben dem ARP-Request sind nur die Beacons der Router zu sehen. Ein ARP-Request wird auf Peer-Ebene verbreitet (vgl. Abschnitt 2.5). Der ARP-Reply wird aber über einen Pfad geschickt. Auf den ARP-Frame sollte daher ein PREQ-Frame folgen (siehe Abbildung 2.4), der in Wireshark nicht zu sehen ist. Außerdem müssten alle anderen Router den ARP-Request, welcher ein Broadcast ist, über alle Peers weiterleiten. Auch dies ist in Wireshark nicht sichtbar. Die ARP-Pakete wurden auf den WRT160NL-Routern definitiv nicht korrekt verarbeitet. 5.1.1 Manuelles Füllen der Tabellen Als Workaround wurden probeweise Meshpath- und ARP-Tabelle manuell per CLI gefüllt. Das Netzwerk verhielt sich wie erwartet. Die Datenkommunikation erfolgte problemlos. 5.2 ARP-Verabeitung Als nächstes wurde die ARP-Verarbeitung im Linuxkernel überprüft. Hierzu wurde in dem zum Linuxkernel gehörenden Compat Wireless-Modul alle Funktionen der Datei arp.c mit printk() makiert. Auf dem Router, der den ping-Befehl ausführte, konnte die Erstellung des ARP-Requestes im Kernellog mitverfolgt werden. Auf allen übrigen Routern wurde aber keine Funktion von arp.c aufgerufen. Demzufolge werden ARP-Request-Pakete nicht an die ARP-Schicht weitergeleitet, sondern vorher gefiltert. 5.2.1 ARP-Filterung per sysctl Die zuvor erläuterten Probleme waren ein Indiz dafür, das in den sysctl-Einstellungen ARP-Filter aktiviert waren. Eine Überprüfung widerlegte aber dieses Indiz: root@mesh02:~# sysctl -a | grep arp | grep wlan | grep arp_ignore net.ipv4.conf.wlan0.arp_ignore = 0 5.3 Open11s-Funktionen in der MAC80211-Schicht Das Open11s-Projekt hat die MAC80211-Schicht um 802.11s-Funktionen erweitert. Der Aufruf dieser Funktionen wurde genauer untersucht. Gaben Funktionen Fehlerwerte zurück, wurden diese per printk() im Kernellog sichtbar gemacht. Eine Überwachung des Kernelogs zeigte, dass alle Funktionen ohne Fehler arbeiteten. 5.4 Welche Frames erreichen die MAC80211-Schicht Da scheinbar alle Frames innerhalb von MAC80211 korrekt verarbeitet werden, kommt die Frage auf, ob die Frames mit dem ARP-Request überhaupt die MAC80211-Schicht erreichen. Wie Ab- 20 5.5. Fehlerbehebung bildung 3.2 zeigt, bildet beim Frameeempfang die Funktion ieee80211 rx() den Eingang in die MAC80211-Schicht. Diese wurde nun im Kernelog überwacht: void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb){ /* ... */ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; if(skb->data[38]==0x8 && skb->data[39]==0x6) #define macaddstm "%X-%X-%X-%X-%X-%X" #define mac_3 hdr->addr3[0],hdr->addr3[1],hdr->addr3[2], \ hdr->addr3[3],hdr->addr3[4],hdr->addr3[5] printk(KERN_DEBUG "ARP received from "macaddstm"\n", mac_3); /* ... */ } Im Kernellog wurde die 3. MAC-Adresse des 802.11-Frames geloggt, wenn Byte 38 und 39 den Wert 0x0806 hatten. Diese Bytes bilden in LLC-Frames von Meshnetzen das Type-Feld. Der Typ 0x0806 steht für ARP-Pakete. Im Kernellog erschien keine ARP received-Meldung. Folglich wurde der ARPRequest bereits auf Treiberebene gefiltert. Das printk()-Statement wurde abgeändert, so dass alle Frames ausgegeben wurden. Auf der Frequenz des Meshnetzes funkten noch zwei weitere Router: Eine Fritz!Box und ein Sitecom-Router. Bei einem Vergleich zwischen einem Wiresharkdump und dem Kernellog war zu erkennen, dass neben dem ARP-Request auch ein weiterer Frametyp vom Treiber nicht an die MAC80211-Schicht weitergeleitet wurde. Der Beacon aller Meshteilnehmer wurde korrekt an die MAC80211-Schicht übergeben, ebenfalls der Beacon der netzwerkfremden Fritz!Box. Der Beacon des Sitecom-Routers kam aber ebenfalls in der MAC80211-Schicht nicht an. Das erwartete Verhalten wäre, dass die netzwerkfremden Beacons von ieee80211 rx() über mehrere Schritte an ieee80211 rx handlers() weitergegeben werden. Der dem Frametyps entsprechende Handler würde erkennen, das die Beacons zu keinem auf dem Router konfigurierten Netzwerk gehören und sie daraufhin verwerfen. 5.5 Fehlerbehebung Die MAC80211-Schicht konfiguriert den Treiber. Neben Einstellungen wie Frequenz und Bandbreite werden auch Framefilter definiert. Diese werden bei Routern mit ATH9k-WLAN-Chips über die Funktion ath9k configure filter() (ath9k/main.c) gesetzt. Die Überwachung mit printk() zeigte, dass MAC80211 wie erwartet alle erforderlichen Flags setzte. Der Fehler musste also Treiberintern liegen. Die Funktion ath calcrxfilter() in ath9k/recv.c enthält einen Hinweis, dass das ATH9K RX FILTER PROM-Flag bei älteren Chips gesetzt werden soll: 21 5.5. Fehlerbehebung u32 ath_calcrxfilter(struct ath_softc *sc){ /* ... */ if (sc->nvifs > 1 || (sc->rx.rxfilter & FIF_OTHER_BSS)) { /* The following may also be needed for other older chips */ if (sc->sc_ah->hw_version.macVersion == AR_SREV_VERSION_9160) rfilt |= ATH9K_RX_FILTER_PROM; rfilt |= ATH9K_RX_FILTER_MCAST_BCAST_ALL; } return rfilt; } Das ATH9K RX FILTER PROM-Flag wird standardgemäß bei der Chipversion AR-9160 gesetzt. Bei dem Linksys WRT160NL wird die Version AR-9100 genutzt. Das if-Statement wurde entsprechend erweitert: if (sc->sc_ah->hw_version.macVersion == AR_SREV_VERSION_9160 || sc->sc_ah->hw_version.macVersion == AR_SREV_VERSION_9100 ) rfilt |= ATH9K_RX_FILTER_PROM; } Nach dieser Erweiterung funktionierte das 802.11s-Meshnetzwerk wie erwartet. Die Fehlerbehebung im ATH9k-Treiber wurde sowohl auf kernel.org, als auch auf der OpenWRT-Entwickler-Seite publiziert1 . 1 https://bugzilla.kernel.org/show bug.cgi?id=45591, https://dev.openwrt.org/ticket/11972 22 Kapitel 6 Zusammenfassung In diesem Masterprojekt ging es darum, ein 802.11s-Meshnetzwerk mit SoHo-Routern vom Typ Linksys WRT160NL einzurichten. Dies ist erfolgreich gelungen. Ein Fehler im ATH9k-WLANTreiber der Router konnte behoben werden. Es wurde ein Testnetzwerk aufgebaut, das alle Komponenten eines 802.11s-Meshnetzwerkes enthielt: Mehrere Mesh Points, Mesh Access Points und ein Mesh Portal. Aufbau und Konfiguration sind im Anhang dieses Dokumentes beschrieben. Zu Beginn des Projektes konnte ein Mesh noch nicht komplett über das OpenWRT-eigene Konfigurationstool UCI eingerichtet werden. Über die Weboberfläche LUCI konnte sogar nur der Netzwerktyp ausgewählt werden. Essentielle Einstellungen, wie das Setzen der Mesh-ID waren nicht möglich. Die fehlenden Einstellungsmöglichkeiten für UCI wurden ergänzt. LUCI wurde erweitert, so dass nun für ein 802.11s-Meshnetzwerk Mesh-ID, Root-/Gateannouncement und Auth SAEVerschlüsselung eingestellt werden konnten. Das Open11s-Projekt sieht zur Zeit für Linux nur eine Variante verschlüsselter Kommunikation vor: Die Nutzung von Auth SAE. Ein Auth SAE-Paket wurde innerhalb dieses Projektes für OpenWRT erstellt. UCI wurde entsprechend erweitert, um Auth SAE einrichten zu können. Über LUCI kann ebenfalls die Verschlüsselungsmethode Auth SAE gewählt und ein Passphrase gesetzt werden. Somit ist es möglich, ein verschlüsseltes Mesh komplett über die Web-Schnittstelle einzurichten. Das Projekt wurde mit Revision r32582 aus dem OpenWRT SVN-Trunk1 beendet. Alle in dem Projekt entstandenen Veränderungen gegenüber dieser SVN Revison sind über das VS-Wiki der Hochschule RheinMain abrufbar2 . 1 2 https://dev.openwrt.org/wiki/GetSource https://wwwvs.cs.hs-rm.de/vs-wiki/index.php/MasterProjekte/802.11s auf SoHo-Routern 23 6.1. Ausblick 6.1 Ausblick In diesem Abschnitt werden Aufgaben betrachtet, die in Nachfolgeprojekten dieses Masterprojekts bearbeitet werden könnten. 6.1.1 LUCI Mit der Webanwendung LUCI kann man mit Abschluss dieses Projektes 802.11s-Meshnetzwerke konfigurieren. Der Netzwerkstatus wird allerdings nicht korrekt angezeigt. Eine Anpassung von LUCI zur korrekten Anzeige des Netzwerkstatus wäre wünschenswert. Zur Zeit wird die Fehlermeldung Wireless is disabled or not associated“ angezeigt, auch wenn das Netzwerk funktioniert. Ferner ” wird die Mesh-ID nicht angezeigt und der Netzwerkmodus als unknown“ ausgegeben. ” 6.1.2 Auth SAE Ein Auth SAE-Paket wurde zwar innerhalb dieses Projektes für OpenWRT erstellt, dabei zeigten sich allerdings einige Schwächen, besonders im Bereich der Konfiguration. Auth SAE lässt sich nur per Konfigurationsdatei einrichten. Für eine bessere Integration in UCI, wäre die Einrichtung über Kommandozeilenparameter oder Umgebungsvariablen wünschenswert. Zum Auslesen der Konfigurationsdatei wird libconfig genutzt. Ein Ersetzen der Konfigurationsdatei durch Kommandozeilenparameter oder Umgebungsvariablen würde diese Abhängigkeit auflösen und das System insgesamt leichtgewichtiger machen. In der Auth SAE-Konfigurationsdatei müssen WLAN-Modus, WLAN-Kanal und Bandbreite (htmod) gesetz werden. Beim Start von Auth SAE werde diese Zwangsweise neu gesetzt. Dies ist von Nachteil, wenn man z.B. bei einem Mesh Access Point auf einer WLAN-Karte sowohl die 802.11sSchnittstelle, als auch die 802.11a/b/g/n-Schnittstelle betreibt. Auth SAE ändert die vorher eingestellten Parameter und bietet dabei nur eine geringe Auswahl an Optionen. Als WLAN-Modus kann nur 11a, 11b oder 11g gewählt werden. Bei der Bandbreiten-Option kann htmod="40-" nicht ausgewählt werden. In OpenWRT werden Kanal, Bandbreite und WLAN-Modus sowieso über einen andren Weg gesetzt. Es wäre daher sinnvoll, das Setzen von Kanal, Bandbreite und WLAN-Modus aus der Auth SAE-Software zu entfernen. Das Auth SAE-Paket nutzt libnl. Eine zukünftige Anpassung an libnl-tiny wäre empfehlenswert. Zur Zeit müssen libnl und libnl-tiny parallel installiert werden. Auf dem Linksys WRT160NL ist dies dank ausreichend RAM kein Problem. Auf Routern mit wenig RAM könnten dies die Installation von Auth SAE verhindern. 24 Anhang A 802.11s-Meshnetz mit iw verwalten A.1 Aufsetzen eines 802.11s-Meshnetzes Das nachfolgende Konfigurationsbeispiel zeigt das Erstellen eines Interfaces mesh0 über das auf WLAN-Kanal 1 die Verbindung zum Meshnetzwerk mit der Mesh-ID testmesh vorgenommen wird: iw phy phy0 interface add mesh0 type mp ifconfig mesh0 $IP up iw mesh0 set channel 1 iw mesh0 mesh join testmesh A.2 Netzstatus abfragen Über den Befehl station dump können alle Peers aufgelistet werden: root@mesh02:~# iw dev mesh0 station dump Station ab:cd:ef:00:00:64 (on wlan0) inactive time: 670 ms rx bytes: 4213 rx packets: 112 tx bytes: 280 tx packets: 4 tx retries: 0 tx failed: 0 signal: -26 [-39, -26] dBm signal avg: -24 [-37, -24] dBm tx bitrate: 1.0 MBit/s rx bitrate: 1.0 MBit/s 25 A.3. Mesh-Parameter mesh llid: mesh plid: mesh plink: authorized: authenticated: preamble: WMM/WME: MFP: TDLS peer: 29709 60578 ESTAB yes yes long yes no no [...] Über den Befehl mpath dump können alle Paths aufgelistet werden: root@mesh02:~# iw DEST ADDR ab:cd:ef:00:00:83 ab:cd:ef:00:00:64 dev mesh0 mpath dump NEXT HOP IFACE ab:cd:ef:00:00:64 wlan0 ab:cd:ef:00:00:64 wlan0 SN 1044 1 METRIC 8193 8193 QLEN 0 0 EXPTIME 300 300 Und mit dem Befehl arp kann nachgesehen werden, welche IP-Adresse zu welcher MAC-Adresse gehört: root@mesh02:~# arp IP address HW type 192.168.88.1 0x1 192.168.88.3 0x1 A.3 Flags 0x2 0x2 HW address ab:cd:ef:00:00:82 ab:cd:ef:00:00:64 Mask * * Device wlan0 wlan0 Mesh-Parameter Mit Hilfe der Mesh-Parameter lassen sich z.B. Timeout-Perioden einstellen. Aber auch das Senden von Rootannouncement und Gateannouncement lässt sich über Mesh-Parameter aktivieren. Als Beispiel wird das Aktivieren des Rootannouncements gezeigt: root@mesh02:~# iw dev mesh0 set mesh_param mesh_hwmp_rootmode=1 Einen Überblick über alle Mesh-Parameter und deren aktuelle Werte gibt der Befehl get mesh param: root@mesh02:~# iw dev mesh0 get mesh_param mesh_retry_timeout = 100 msec. mesh_hwmp_max_preq_retries = 4 mesh_confirm_timeout = 100 msec. mesh_path_refresh_time = 1000 msec. mesh_holding_timeout = 100 msec. mesh_min_discovery_timeout = 100 msec. mesh_max_peer_links = 32 mesh_hwmp_preq_min_interval = 10 TUs mesh_ttl = 31 mesh_hwmp_active_path_timeout = 5000 TUs mesh_element_ttl = 31 mesh_hwmp_rann_interval = 5000 26 A.4. Verschlüsseltes Mesh einrichten mesh_auto_open_plinks = 0 mesh_gate_announcements = 0 mesh_max_retries = 3 mesh_hwmp_rootmode = 0 mesh_hwmp_net_diameter_traversal_time = 50 TUs A.4 Verschlüsseltes Mesh einrichten Wie Kapitel 3 zeigt, ist zur Zeit Auth SAE die einzige Möglichkeit, um ein 802.11s-Meshnetzwerk zu verschlüsseln. Auth SAE wird über eine Konfigurationsdatei1 eingerichtet. Die wichtigste Einstellung ist das Setzen des Passwortes. Weitere Parameter zur Einstellung2 werden auf der Auth SAEProjektseite beschrieben. Das Mesh wird wie in Abschnitt A.1 beschrieben aufgesetzt. Das Setzen des Kanals ist allerdings überflüssig, da Auth SAE dies selbst vornimmt. An Stelle des Mesh-JoinBefehls (iw mesh0 mesh join testmesh) wird Auth SAE gestartet: meshd-nl80211 -c /etc/authsae.cfg -i mesh0 # oder meshd-nl80211 -B -c /etc/authsae.cfg -i mesh0 # als Daemon Anhang B.5 zeigt die Konfiguration von Auth SAE in OpenWRT mit UCI. 1 2 Konfigurationsbeispiel: https://github.com/cozybit/authsae/blob/master/config/authsae.sample.cfg Beschreibung der Konfigurationsparameter: https://github.com/cozybit/authsae/blob/master/README 27 Anhang B 802.11s-Meshnetz unter OpenWRT einrichten In diesem Anhang wird die Einrichtung eines 802.11s-Meshnetzwerkes auf einem OpenWRT-Router beschrieben. Es wird vorausgesetzt, dass OpenWRT, wie in Anhang C beschrieben, installiert und konfiguriert worden ist. Netzwerkinterface (Kommandozeile, UCI): Zunächst wird ein Netzwerkinterface namens meshif angelegt. Hierzu wird die Datei /etc/config/network wie folgt erweitert: config interface ’meshif’ option proto ’static’ option ipaddr ’192.168.88.1’ option netmask ’255.255.255.0’ Alternativ kann das Interface per UCI -Kommandos angelegt werden: uci uci uci uci uci uci add network interface rename network.@interface[-1]=meshif set network.meshif.proto=static set network.meshif.ipaddr=192.168.88.1 set network.meshif.netmask=255.255.255.0 commit network Um die Änderungen nutzbar zu machen, muss das Netzwerk mit dem Befehl /etc/init.d/network restart neu gestartet werden. Netzwerkinterface (LUCI): Das Interface kann auch über die Webschnittstelle LUCI konfiguriert werden: 28 B.1. Mesh Point B.1 Mesh Point UCI: Nach dem Flashen mit OpenWRT wird die WLAN-Karte automatisch erkannt und in die Datei /etc/config/wireless folgender Eintrag eingefügt: config wifi-device ’radio0’ option type ’mac80211’ option macaddr ’...’ option channel ’1’ Diese Angaben reichen, um ein Mesh zu betreiben. Eventuell muss die Option Channel noch angepasst werden: uci set wireless.radio0.channel=... uci commit wireless 802.11s-Meshnetzwerke können auch mit 40 GHz statt mit 20 GHz betrieben werden, ähnlich wie dies bei 802.11n-Netzwerken der Fall ist. Hierzu werden folgende Optionen hinzugefügt: 29 B.1. Mesh Point uci set wireless.radio0.hwmode=11ng uci set wireless.radio0.htmode=HT40+ uci commit wireless # oder htmode=HT40- Die Option HT40+ gibt an, dass zusätzlich 20 GHz Bandbreite oberhalb des Frequenzbereiches des gewählten Kanals genutzt werden. Wird HT40- gewählt, werden die 20 GHz unterhalb des Frequenzbereiches des gewählten Kanals genutzt. Um den Router als einfachen Meshpoint zu nutzen, wird per UCI ein Wifi-Interface hinzugefügt und entsprechend konfiguriert. OpenWRT schreibt das Setzen der SSID für Wifi-Interfaces vor, auch wenn diese in Meshnetzwerken nicht genutzt wird. Die Namenswahl kann beliebig erfolgen. Der Übersicht halber wird im folgenden Beispiel die SSID der Mesh-ID gleichgesetzt: uci uci uci uci uci uci uci add wireless wifi-iface set wireless.@wifi-iface[-1].device=radio0 set wireless.@wifi-iface[-1].mode=mesh set wireless.@wifi-iface[-1].network=meshif set wireless.@wifi-iface[-1].ssid=testmesh set wireless.@wifi-iface[-1].mesh_id=testmesh commit wireless Durch Aufruf des Kommandos wifi auf der Konsole wird das WLAN des Routers mit den per UCI gesetzen Optionen neu gestartet. Der Meshpoint ist nun verfügbar. LUCI: Zunächst wird ein neues Netzwerk hinzugefügt: Dieses wird als Mesh konfiguriert. Optional können Frequenz und Bandbreite angepasst werden. 30 B.2. Mesh Portal (MPP) Die ESSID spielt in 802.11s-Meshnetzwerken keine Rolle. Das UCI-System erfordert dennoch das Setzen der ESSID. Diese kann frei gewählt werden. Der Übersicht zuliebe sollte sie gleich der Mesh-ID gesetzt werden. B.2 Mesh Portal (MPP) Um ein Mesh Portal einzurichten, muss die Firewall1 des Routers ensprechend konfiguriert werden. OpenWRT ordnet die verschiedenen Netzwerk-Interfaces einer Firewall-Zone zu. Mesh Portal in ein WAN (Internet) (UCI): Standardgemäß existiert bereits eine Zone WAN, die dem Internetport (eth1) des Routers zugewiesen ist. Folgendes Beispiel erläutert die Erstellung einer Zone meshfw für das Interface des Meshnetzwerks meshif. Eine Forwardingregel erlaubt den Meshteilnehmern WAN-Zugriff. Die Meshteilnehmer können WAN-Adressen aufrufen. Ihre IP ist aber nur intern sichbar und aus dem Internet nicht aufrufbar. Für den WAN-/Internetzugang ist daher der Einsatz von NAT und Masquerading notwendig. Dies wird mit der Option masq=1 aktiviert. # Einrichten der Zone "Meshfw" uci add firewall zone uci set firewall.@zone[-1].name=meshfw uci set firewall.@zone[-1].network=meshif uci set firewall.@zone[-1].masq=1 uci set firewall.@zone[-1].input=ACCEPT uci set firewall.@zone[-1].output=ACCEPT uci set firewall.@zone[-1].forward=REJECT # Verknüpfen der Zonen "Meshfw" und "WAN" 1 Generelle Informationen zum http://wiki.openwrt.org/doc/uci/firewall Einrichten einer Firewall unter OpenWRT: 31 B.2. Mesh Portal (MPP) uci add firewall forwarding uci set firewall.@forwarding[-1].dest=wan uci set firewall.@forwarding[-1].src=meshfw uci commit firewall Mesh Portal in ein WAN (Internet) (LUCI): Auf dem Reiter Network/Firewall/General Settings wird durch Klicken des Add-Buttons eine neue Firewall-Zone erstellt. Diese wird wie folgt konfiguriert: Rootannouncement/Gateannouncement: Wird das Mesh hauptsächlich als Internetzugang genutzt, ist es sinnvoll Rootannouncement und Gateannouncement zu aktivieren. (In der aktuellen Compat Wireless-Version ist das Gateannouncement nicht implementiert, obwohl man es in den Einstellungen schon aktivieren kann. An dessen Stelle wird ein Rootannouncement gesendet.) Bei der Konfiguration über LUCI wird im Wireless Network-Dialog Root Announcement und Gate 32 B.2. Mesh Portal (MPP) Announcement auf yes gesetzt. Per UCI kann man hierfür die Optionen mesh root und mesh gate auf 1 setzen. uci add wireless.@wifi-iface[0].mesh_root=1 uci add wireless.@wifi-iface[0].mesh_gate=1 uci commit wireless Mesh Portal zum Intranet: Nachfolgend wird die Verbindung von einem Meshnetz mit einem internen Netzwerk beschrieben. Es wird davon ausgegangen, dass die Teilnehmer der beiden Netze sich gegenseitig per IP erreichen können. Die einfachste Möglichkeit ist es, die Netzwerk-Interfaces der beiden Netze einer Firewall zuzuordnen: # Die Netzwerk-Interfaces "meshif" und "lan" # werden einer Zone zugeordnet: uci add firewall zone uci set firewall.@zone[-1].name=meshfw uci set firewall.@zone[-1].network=meshif lan uci commit firewall Alternativ können auch hier zwei Firewallzonen verknüpft werden. Im nachfolgenden Beispiel wird davon ausgegangen, dass die Zone LAN bereits existiert. Wie die Zone WAN wird LAN in der Regel automatisch erstellt. Da sich die Teilnehmer von LAN und dem Meshnetz direkt ansprechen, wird masq nicht gesetzt. # Einrichten der Zone "Meshfw" uci add firewall zone uci set firewall.@zone[-1].name=meshfw uci set firewall.@zone[-1].network=meshif uci set firewall.@zone[-1].input=ACCEPT uci set firewall.@zone[-1].output=ACCEPT uci set firewall.@zone[-1].forward=REJECT uci commit firewall # Verknüpfen der Zonen "Meshfw" und "LAN" # Es werden zwei Forwardingregeln angelegt # Eine für MESH->LAN und die andere für LAN->MESH uci add firewall forwarding uci set firewall.@forwarding[-1].dest=lan uci set firewall.@forwarding[-1].src=meshfw uci commit firewall uci add firewall forwarding uci set firewall.@forwarding[-1].dest=meshfw uci set firewall.@forwarding[-1].src=lan 33 B.3. Mesh Access Point (MAP) uci commit firewall Änderungen übernehmen: Um die Firewalleinstellungen zu übernehmen, muss die Firewall neu gestartet werden: /etc/init.d/firewall restart MPP für Mesh Access Point: Sollen die mit MAPs verbundenen Netzwerkteilnehmer das Portal nutzen können, muss dieses gleichzeitig als MPP und MAP konfiguriert werden. Abschnitt 3.1 erläutert die technischen Hintergründe. B.3 Mesh Access Point (MAP) In diesem Abschnitt wird beschrieben, wie der in Abschnitt B.1 eingerichtete Mesh Point in einen Mesh Access Point umgewandelt wird. Hierzu muss zunächst das Netzwerkinterface meshif durch die Bridge br-meshif ersetzt werden. UCI: Per UCI wird der Type von meshif auf bridge gesetzt wird: uci set network.meshif.type=bridge uci commit network Nach dem Neustart des Netzwerkes isi die Bridge sichtbar: root@mesh01:~# ifconfig br-lan [...] br-meshif Link encap:Ethernet HWaddr ....... inet addr:192.168.88.1 Bcast:192.168.88.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 [...] Nun wird ein weiteres Wifi-Interface ergänzt, um den Router als Wireless Access Point (Mode: ap) zugänglich zu machen. Dabei wird die gleiche WLAN-Karte (radio0 ) genutzt, die auch das Mesh nuzt: uci uci uci uci uci uci uci add wireless wifi-iface set wireless.@wifi-iface[-1].device=radio0 set wireless.@wifi-iface[-1].mode=ap set wireless.@wifi-iface[-1].encryption=none set wireless.@wifi-iface[-1].ssid=testmap set wireless.@wifi-iface[-1].network=meshif commit wireless 34 B.3. Mesh Access Point (MAP) Durch das Teilen der WLAN-Karte müssen sich das Mesh und der Access Point die Frequenz und Bandbreite teilen. Ist dies nicht erwünscht, wird ein Router mit zwei WLAN-Karten benötigt. Dank der USB-Schnittstelle kann der Linksys WRT160NL mit einem WLAN-USB-Stick einfach um eine zweite WLAN-Karte erweitert werden. Nach Neustart von Netzwerk (/etc/init.d/network restart) und WLAN (wifi) kann der MAP genutzt werden. Hinweis: Bei einem Test mit der SVN-Trunk Version r32582 funktionierte der MAP erst nach Neustart des gesamten Betriebssystems. In der aktuellen Stable-Version genügte es hingegen Netzwerk und WLAN neu zu starten. LUCI: Als erstes wird MESHIF als Bridge konfiguriert: Anschließend wird ein weiteres WLAN-Netzwerk ergänzt ... ... und als Access Point eingerichtet: Nutzung eines Mesh Portals: Wie Abschnitt 3.1 erläutert, können MAPs nur mit anderen MAPs Daten austauschen. Soll ein MAP und die mit ihm verbunden Netzwerknoten ein MPP nutzen können, so muss dieses gleichzeitig als MPP und MAP konfiguriert werden. 35 B.4. Mesh-Parameter B.4 Mesh-Parameter Alle per iw einstellbaren Mesh-Parameter (siehe Anhang A.3) können auch per UCI gesetzt werden. Hierzu wird die Listenfunktion von UCI genutzt: uci add_list wireless.@wifi-iface[0].mesh_param=mesh_max_peer_links=32 uci add_list wireless.@wifi-iface[0].mesh_param=mesh_ttl=30 uci commit wireless Die Listenfunktion von UCI ist leider noch nicht ausgereift. Es ist zum Beispiel nicht möglich, einzelne Elemente einer Liste zu entfernen. Man kann nur die Liste komplett löschen. Dies bereitet dem Webinterface LUCI Probleme. Deshalb werden die wichtigsten Mesh-Parameter, welche das Senden von Rootannouncement und Gateannouncement steuern, nicht über die mesh param-Liste gesetzt, sondern direkt über Parameter des Interfaces eingestellt: uci add wireless.@wifi-iface[0].mesh_root=1 uci add wireless.@wifi-iface[0].mesh_gate=1 Rootannouncement und Gateannouncement können somit per LUCI aktiviert werden (siehe Abschnitt B.2). Die übrigen Mesh-Parameter können nur per UCI gesetzt werden. B.5 Verschlüsselung Mit der im Rahmen dieses Projekts entstandenen Erweiterungen für OpenWRT ist es möglich, Auth SAE per UCI zu konfigurieren. Es müssen mindestens folgende Parameter gesetzt werden: uci set wireless.@wifi-iface[0].encryption=authsae uci set wireless.@wifi-iface[0].key=secret uci commit wireless Dies kann alternativ auch mit LUCI gesetzt werden: 36 B.5. Verschlüsselung Optional können die Parameter2 authsae group, authsae blacklist, authsae thresh, authsae lifetime und authsae mcastrate mit UCI gesetzt werden. 2 Beschreibung der Konfigurationsparameter: https://github.com/cozybit/authsae/blob/master/README 37 Anhang C OpenWRT mit 802.11s-Unterstützung für Linksys WRT160NL kompilieren Zunächst wird ein Verzeichnis openwrt r32582 angelegt. In diesem Verzeichnis wird die Revision 32582 des SVN-Trunk von OpenWRT ausgescheckt. Der OpenWRT-Quellcode liegt danach im Unterordner trunk: mkdir openwrt_r32582 cd openwrt_r32582 svn co svn://svn.openwrt.org/openwrt/trunk/@32582 Nun werden die in diesem Projekt entstandenen Erweiterungen1 eingespielt, indem die Datei Openwrt r32582 11s mesh addons.tbz im Ordner trunk entpackt wird: cd trunk tar xvf Openwrt_r32582_11s_mesh_addons.tbz Das OpenWRT-Buildsystem basiert auf Menuconfig. Die Standardkonfiguration für den Linksys WRT160NL-Router wird mit folgenden Befehlen in die Konfigurationsdatei geschrieben: echo CONFIG_TARGET_ar71xx=y > .config echo CONFIG_TARGET_ar71xx_generic_WRT160NL=y >> .config make defconfig 1 Download der Erweiterungen: https://wwwvs.cs.hs-rm.de/vs-wiki/index.php/MasterProjekte/802.11s auf SoHo-Routern 38 Nun werden weitere benötigte Pakete nachgeladen: ./scripts/feeds update packages luci ./scripts/feeds install -a -p luci ./scripts/feeds install -d m libconfig make download Anschließend wird Menuconfig gestartet ... make menuconfig ... und folgende Optionen ausgewählt: (Variante: <Y> includes) LuCI --> Collections ---> luci Applications ---> luci-app-ddns luci-app-ntpc luci-app-qos luci-mesh Libraries ---> libiw Network ---> authsae (Nur wenn Mesh verschlüsselt sein soll) ath9k-nohwcrypt (Nur wenn Auth SAE benutzt werden soll und Router ATH9k-Chip hat) Jetzt kann die OpenWRT-Toolchain kompiliert und das Image für den Router erstellt werden: make world Das Image zum flashen des Routers ist unter bin/ar71xx/openwrt-ar71xx-generic-wrt160nl-squashfs-factory.bin verfügbar. Der OpenWRT Flash-Dialog bietet die Option an, beim Flashen die alten Einstellungen zu behalten (Keep Settings). Diese Option sollte unbedingt abgewählt werden, da sonst der Router unbrauchbar wird. Wenn dies dennoch geschen sollte, gibt das OpenWRT-Wiki Auskunft darüber, wie mit Hilfe eines TTL-Pegelwandlers über eine serielle Leitung ein intaktes Firmwareimage per TFTP überspielt werden kann2 . Die Imagedatei openwrt-ar71xx-generic-wrt160nl-squashfs-sysupgrade.bin ist fehlerhaft und macht den Router ebenfalls unbrauchbar. 2 http://wiki.openwrt.org/toh/linksys/wrt160nl#hardware 39 Soll die Auth SAE-Verschlüsselung genutzt werden und kommt zusätzlich eine ATH9k-WLANKarte zum Einsatz, wie dies beim Linksys WRT160NL der Fall ist, muss der ATH9k-Treiber mit der Option nohwcrypt=1 geladen werden. Das Paket ath9k-nohwcrypt richtet den Treiber beim ersten Start des Routers entsprechend ein. Die Änderungen werden erst nach einem weiteren Neustart des Routers aktiviert. Ist ath9k-nohwcrypt nicht installiert worden, kann der Treiber über die Kommandozeile entsprechend konfiguriert werden: echo "ath9k nohwcrypt=1" >/etc/modules.d/28-ath9k 40 Literaturverzeichnis [11s] IEEE Standard for Information Technology. Local and metropolitan area networks — Specific requirements Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) specifications Amendment 10: Mesh Networking, DRAFT - Sep. 2011. [AODV] IETF — The Internet Engineering Task Force — Network Working Group. Ad hoc On-Demand Distance Vector (AODV) http://tools.ietf.org/html/rfc3561, Jul. 2003. Routing. [ARP] IETF — The Internet Engineering Task Force — Network Working Group. An Ethernet Address Resolution Protocol. http://tools.ietf.org/html/rfc826, Nov. 1982. [Abid] Riduan M. Abid, Taha Benbrahim, Saâd Biaz. IEEE 802.11s Wireless Mesh Networks for Last-mile Internet Access: An Open-source Real-world Indoor Testbed Implementation. http://www.eng.auburn.edu/users/sbiaz/publications/IEEE802.11.MeshNetworksAbid.pdf. [Conn] W. Steven Conner (Intel Corp.), Jan Kruys (Cisco Systems), Kyeongsoo Joseph Kim (STMicroelectronics), Juan Carlos Zuniga (InterDigital Comm. Corp.). IEEE 802.11s Tutorial Overview of the Amendment for Wireless Local Area Mesh Networking, Nov. 2006. [Love] Robert Love. Linux-Kernel-Handbuch: Leitfaden zu Design und Implementierung von Kernel 2.6, ISBN: 3-827-32204-9, 19 Jul. 2005. [SAE] D. Harkins (IEEE). Simultaneous Authentication of Equals: A Secure, Password-Based Key Exchange for Mesh Networks, Aug. 2008. 41