{"id":1054,"date":"2011-05-19T23:18:12","date_gmt":"2011-05-19T21:18:12","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1054"},"modified":"2011-05-19T23:18:12","modified_gmt":"2011-05-19T21:18:12","slug":"arp-roaming-infrastruktur-ohne-infrastruktur","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1054","title":{"rendered":"ARP-Roaming: Infrastruktur ohne Infrastruktur"},"content":{"rendered":"<p>Eine der anspruchvollsten Aufgaben in einem Netzwerk ist die Verwaltung der Teilnehmer und das Routing von Informationen zwischen diesen. Ist diese Aufgabe in klassischen verdrahteten Netzwerken noch vergleichsweise einfach zu bewerkstelligen, da sich die Netztopologie nur selten \u00e4ndert und daher in den meisten F\u00e4llen statisch behandelt werden kann, herrschen in WLANs sehr dynamische Bedingungen vor. Zu jedem Zeitpunkt kann ein Client dem Netzwerk beitreten, zu einem anderen Zeitpunkt wieder verlassen, oder bei gr\u00f6\u00dferen Netzwerken, wie sie z.B. in Firmen und Universit\u00e4ten vorkommen sogar von einem Zugangspunkt zu einem anderen umziehen.<\/p>\n<p>Bei diesen vergleichsweise komplexen Netzwerken, handelt es sich immer in der Regel um Infrastruktur-Netzwerke, also solche, bei denen ein zentraler Zugangspunkt den Zugriff der Teilnehmer verwaltet, Zeitscheiben f\u00fcr die Daten\u00fcbertragung zuteilt oder andere Management-Aufgaben, wie die Sitzungsverwaltung \u00fcbernimmt. Aber nicht in jedem drahtlosen Netzwerk gibt es diese zentrale Instanz. Ein sehr gutes Beispiel hierf\u00fcr sind sogenannte <a href=\"http:\/\/de.wikipedia.org\/wiki\/Ad-hoc-Netz\">Ad-hoc-Netzwerke<\/a>, die wie ihr Name bereits vermuten l\u00e4sst ad-hoc aus dem Nichts aus aufgebaut werden k\u00f6nnen. Nehmen an solch einem Netzwerk wenige Clients teil, sehen sich diese in den meisten F\u00e4llen und abgesehen von der Vergabe der passenden Netzwerk-Parameter (<a href=\"http:\/\/de.wikipedia.org\/wiki\/Service_Set\">BSSID<\/a>, ESSID, IP der Clients, Netmask und Gateway) ist nicht sonderlich viel zu beachten.<\/p>\n<p>Spannender wird es jedoch, wenn nicht mehr alle Teilnehmer jeden anderen sehen und das Ad-hoc-Netzwerk als ein <a href=\"http:\/\/en.wikipedia.org\/wiki\/Wireless_mesh_network\">Mesh-Netzwerk<\/a> zu betrachten ist. Ein Projekt, was sich mit dem Betrieb solcher Mesh-Netzwerke besch\u00e4ftigt, ist <a href=\"http:\/\/freifunk.net\/\">Freifunk<\/a>, dass in einer ganzen Reihe von St\u00e4dten bereits meist kleinere, teils aber auch gr\u00f6\u00dfere Ad-hoc-Netzwerke aufzuweisen hat. In diesen Netzen muss typischerweise jeder am Routing teilnehmen, um ein Datenpaket vom Absender zum Empf\u00e4nger zu bef\u00f6rdern, da es im Gegensatz zu Infrastruktur-Netzwerken kein zentrales Routing gibt und daher sich die Clients untereinander kooperativ um alle Verwaltungsaufgaben k\u00fcmmern m\u00fcssen. Die Aufgabe des Routings ist dabei relativ unproblematisch \u00fcber eine Reihe von Protokollen geregelt, von denen <a href=\"http:\/\/en.wikipedia.org\/wiki\/Open_Shortest_Path_First\">OSPF<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Optimized_Link_State_Routing_Protocol\">OLSR<\/a> und <a href=\"http:\/\/en.wikipedia.org\/wiki\/B.A.T.M.A.N.\">BATMAN<\/a> die am H\u00e4ufigsten eingesetzten sind. Diese funktionieren aber allesamt nur, wenn alle zu routenden Clients sich auch am Protokoll beteiligen und regelm\u00e4\u00dfig ihre Informationen dem Netz mitteilen.<\/p>\n<p>Ein relativ neuer Weg, der derzeit vom <a href=\"http:\/\/chemnitz.freifunk.net\/\">Freifunk Chemnitz<\/a> beschritten wird, ist es nun, auch Clients ohne Routing-Software den Zugang zum Netz zu erm\u00f6glichen. Die hierf\u00fcr eingesetzte Technik des ARP-Roaming \u00e4hnelt ein wenig dem <a href=\"http:\/\/en.wikipedia.org\/wiki\/Roaming\">Vorgehen in Infrastruktur-Netzwerken<\/a>, denn der Client wird von den Routern &#8222;verwaltet&#8220; und wenn n\u00f6tig zwischen diesen umgezogen, wenn sich seine Position im Netzwerk \u00e4ndert. Damit dies auch ohne Infrastruktur-Modus in einem Ad-hoc-Netzwerk funktioniert, m\u00fcssen jedoch eine Reihe von Bedingungen erf\u00fcllt sein.<\/p>\n<p>Eine der wichtigsten Bedingungen, damit man einen Client ohne Probleme von einem zum anderen Router umziehen kann, ist, dass der Client m\u00f6glichst wenig davon mitbekommt. Insbesondere der Standard-Gateway sollte aus Sicht des Clients an jeder Stelle des Netzes identisch sein. Zu diesem Zweck wird beim Freifunk Chemnitz im Ad-hoc-WLAN-Teil des Netzes mit einer <a href=\"http:\/\/en.wikipedia.org\/wiki\/Anycast\">Anycast-IP<\/a> f\u00fcr den Standard-Gateway gearbeitet, die unabh\u00e4ngig vom Router, der die Anfrage des Clients empf\u00e4ngt immer identisch ist. Somit entf\u00e4llt bei einem <a href=\"http:\/\/en.wikipedia.org\/wiki\/Handover\">Handover<\/a> eines Clients die Umkonfiguration von Netzwerk-Parametern.<\/p>\n<p>Ein weiteres Problem, was sowohl mit dem Routing zusammenh\u00e4ngt, aber auch die Verwaltung der Clients betrifft ist zudem die IP-Adress-Vergabe. Man k\u00f6nnte theoretisch zwar einen zentralen <a href=\"http:\/\/en.wikipedia.org\/wiki\/Dynamic_Host_Configuration_Protocol\">DHCP<\/a>-Server nehmen und auf Layer 2 (Ethernet-Ebene) routen, h\u00e4tte dann aber sofort einen Netzausfall, wenn der Client sich in einem Teil des Netzwerkes anmeldet, der gerade keine Verbindung zum DHCP-Server besitzt. Der gegenteilige Weg, also dass jeder Router auch gleichzeitig DHCP-Server spielt, scheint zwar \u00fcbertrieben, birgt aber andererseits einen Reihe essentieller Vorteile, die man f\u00fcr die Netzwerk-Verwaltung benutzen kann. Damit nun auch ein einzelner, nicht gerade mit dem Rest des Netzwerkes verbundener Knoten noch operativ bleibt, muss jeder der DHCP-Server autark und autoritiv entscheiden k\u00f6nnen. Da er dies f\u00fcr den gesamten im Netzwerk verwendeten Adressbereich nicht autark tun kann, muss jedem DHCP-Server ein eigener Adressbereich zugeteilt werden, den dieser autonom verwalten darf. Zu diesem Zweck wird der gesamte f\u00fcr das WLAN vorgesehene Adressbereich noch einmal in Subnetze unterteilt. Im Fall von Freifunk Chemnitz handelt es sich hierbei um ein \/17-Netz f\u00fcr WLAN, welches in \/28-Netze f\u00fcr jeden Router aufgeteilt wird. Da sich einige Clients etwas zickig haben, wenn der DHCP-Server aus einem anderen Subnetz kommt, ist eine der IPs dieses \/28-Netzes f\u00fcr den DHCP-Server des Routers zugewiesen.<\/p>\n<p>W\u00e4re noch ein letzter Aspekt kurz zu erw\u00e4hnen: N\u00e4mlich das Backbone-Netzwerk, welches von den Nodes untereinander verwendet wird, um das Netz auch beim Zusammenbruch direkter Funkstrecken (z.B. Sichverbindungen, Richtfunk) \u00fcber alternative Wege, wie eine VPN-Verbindung \u00fcber UMTS) am Leben zu halten. Da auch diese Struktur sehr dynamisch sich \u00e4ndert, wird dieser gesamte Netzbereich (beim Freifunk Chemnitz ein \/21) mit OLSR verwaltet.<\/p>\n<p>Somit besitzt jeder Node, der am Routing teilnimmt folgende 4 Angaben:<\/p>\n<ol>\n<li>Seine Node-IP: z.B. 10.8.40.42<\/li>\n<li>DHCP-Range: z.B. 10.8.130.144\/28<\/li>\n<li>DHCP-Server-IP: z.B. 10.8.130.145<\/li>\n<li>Gateway-Anycast: z.B. 10.8.255.254<\/li>\n<\/ol>\n<p>Diese geh\u00f6ren zu den folgenden 2 Netzwerken:<\/p>\n<ol>\n<li>Backbone\/Routing: 10.8.40.0\/21<\/li>\n<li>WLAN\/Roaming: 10.8.128.0\/17<\/li>\n<\/ol>\n<p>Betrachtet man sich das Netzwerk bisher, so ist dieses noch sehr unflexibel: M\u00f6chte ein Client umziehen, muss er, trotz dem er an jedem Router Pakete in das Netzwerk senden kann, zum Empfang der Antwort immer in Reichweite des Knotens bleiben, der ihm seine IP zugeteilt hat, da bedingt durch die im Routing bekanntgegebenen Subnetze alle Pakete des WLAN immer wieder zu dem Knoten, der die IP vergeben hat, zur\u00fcck geroutet werden.<\/p>\n<p>Soviel zum Vorgepl\u00e4nkel; tut mir echt leid, dass ich etwas ausholen musste, aber der spannende Teil kommt nun!<\/p>\n<p>OLSR bietet nun die M\u00f6glichkeit, die an jedem Knoten angeschlossenen &#8222;Netzwerke&#8220; &#8211; sogenannte Host-Network Associations &#8211; bekanntzugeben. Neben ganzen Subnetzen funktioniert dieser Mechanismus nun auch f\u00fcr einzelne IPs, womit es m\u00f6glich wird, einen Client, der von seinem Heimat-Knoten entfernt im Netzwerk lebt &#8211; \u00e4hnlich dem Roaming im Telefonnetzen &#8211; an seiner fremden Basisstation zu erreichen. Dies funktioniert, weil Hostrouten immer Vorrang vor Netzwerk-Routen haben und diese somit \u00fcberschreiben.<\/p>\n<p>Wenn man nun einen Client von einem zum anderen Knoten im Netzwerk umziehen kann, ist als letzter Schritt f\u00fcr eine Automatisierung dieses Vorgangs zu sorgen, da der Client m\u00f6glichst nichts davon mitbekommen soll. Damit man aber von Seite der WLAN-Knoten wei\u00df, dass nun pl\u00f6tzlich ein Knoten in Reichweite ist, muss eine M\u00f6glichkeit gefunden werden, die Clients der Umgebung zu beobachten und die Verbindungsqualit\u00e4t zu bewerten. Ein einfacher Ansatz ist derzeit bereits im Netz von Freifunk Chemnitz umgesetzt und betrachtet den Inhalt der <a href=\"http:\/\/en.wikipedia.org\/wiki\/Address_Resolution_Protocol\">ARP<\/a>-Tabelle der Router als Quelle f\u00fcr neue Clients. Wird dort ein neuer Client entdeckt, wird durch einen <a href=\"http:\/\/en.wikipedia.org\/wiki\/Arping\">ARP-Ping<\/a> gepr\u00fcft, ob dieser wirklich in der N\u00e4he ist und im Erfolgsfall als Client im OLSR registriert, um dem Netzwerk Bescheid zu geben, dass dieser Knoten den neu gesichteten Client empfangen kann. Schlegt ein ARP-Ping fehl, so wird nach einem Timeout erneut versucht diesen Client zu erreichen bzw. nach einer einstellbaren Anzahl Fehlversuche der Client als unerreichbar wieder entfernt.<\/p>\n<p>Auch wenn dieser bisher noch recht passive Versuch der Client-Erkennung beim Umzug von Clients eine Reihe kleinerer Nebenwirkungen besitzt, was sich i.d.R. durch Nicht-Erreichbarkeit des Clients \u00e4u\u00dfert, funktioniert dieser Ansatz in der Praxis bereits vergleichsweise gut f\u00fcr das noch sehr fr\u00fche Entwicklungsstadium: Immerhin wird hier auf Software-Ebene nachgebildet, was typischerweise die Netzwerk-Hardware erledigt. Weitere Ausbaustufen umfassen daher auch Dinge wie eine verbesserte Erkennung neuer Clients bereits <a href=\"http:\/\/en.wikipedia.org\/wiki\/Packet_analyzer\">anhand ihres Traffics<\/a>, bzw. ein dem <a href=\"http:\/\/en.wikipedia.org\/wiki\/ARP_spoofing\">ARP-Spoofing<\/a> entlehntes zwangsweises Umziehen des Standard-Gateway f\u00fcr einzelne Clients. Auch eine proaktive Erkennung der Bewegung eines Clients zwischen den Routern und eine dieser Bewegung angepasste vorausschauendes Handover des Clients sind Dinge, die auf der Wunschliste bereits hei\u00df diskutiert werden und in sp\u00e4tere Versionen durchaus einflie\u00dfen werden. Mehr dazu aber in einem gesonderten Beitrag, da jedes dieser Themen eine ganze Menge Aspekte ber\u00fchrt, die weit \u00fcber den Umfang dieses Eintrags hinausgehen w\u00fcrden.<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1054&amp;md5=891c322cca558ff27adfc91aad0f8c56\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Eine der anspruchvollsten Aufgaben in einem Netzwerk ist die Verwaltung der Teilnehmer und das Routing von Informationen zwischen diesen. Ist diese Aufgabe in klassischen verdrahteten Netzwerken noch vergleichsweise einfach zu bewerkstelligen, da sich die Netztopologie nur selten \u00e4ndert und daher in den meisten F\u00e4llen statisch behandelt werden kann, herrschen in WLANs sehr dynamische Bedingungen vor. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[29],"tags":[98,69,7],"class_list":["post-1054","post","type-post","status-publish","format-standard","hentry","category-software","tag-developement","tag-internet","tag-links"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1054","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1054"}],"version-history":[{"count":2,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1054\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1054\/revisions\/1056"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1054"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1054"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1054"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}