Opennet im VLAN

Aus Opennet
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Überblick

Ein VLAN kann zur Mehrfachnutzung einer vorhandenen Netzwerkverkabelung eingesetzt werden. Beispielsweise ist es möglich, in die heimische Netzwerkverteilung Opennet-Verkehr (inkl. OLSR) einzuspeisen, ohne dass dieser Netzwerkverkehr für den Nutzer spontan sichtbar ist. Praktisch erfolgt diese Überlagerung durch die Markierung (tagging) spezifischer Pakete (z.B. der Opennet-Verkehr) mit einer sogenannten VLAN-ID. Diese markierten Pakete werden nur von Geräten beachtet, die entsprechend konfiguriert werden.

VLANs stellen jedoch keinerlei Zugangskontrolle dar - die Pakete sind bei entsprechender Konfiguration für jeden Client sichtbar.

Einrichtungsaufwand

Der Aufwand zur Vorbereitung der neuen Opennet-Clients (Notebooks, Server, ...) in deinem heimischen Netzwerk ist minimal und sollte in wenigen Minuten zu bewältigen sein.

Zusätzlich zu den Endknoten musst du jedoch auch alle relevanten Router in deinem Netzwerk vorbereiten. Dies kann unter Umständen länger dauern. Beachte allerdings den untenstehenden Hinweis (unter Bekannte Probleme), um dich nicht eventuell von deinem AP oder deinen Routern auszusperren.

Alternativen

IP-Alias

Ein ähnlicher Effekt ist zwar auch durch IP-Aliase erreichbar, allerdings bleiben die Pakete des separaten IP-Netzes für jeden Netzteilnehmer auf den ersten Blick sichtbar. Zudem gestaltet sich die Konfiguration beim Übergang in weitere Subnetze wesentlich komplexer als bei VLANs.

GRE-Tunnel

Da dein potentielles Opennet-VLAN eine einzige Broadcast Domain darstellt, werden alle OLSR-Broadcast-Pakete über deine gesamte Netzwerkverkabelung verteilt (ohne direkt sichtbar zu sein). Falls du also eine Bandbreiten-optimierte Umsetzung für die OLSR-Verteilung in deinem Heimnetz suchst, dann solltest du dir eventuell stattdessen GRE-Tunnel anschauen. Hier werden die Broadcast-Pakete nur zwischen den Endpunkten des Tunnels ausgetauscht. Vgl. auch Opennet per GRE

Anwendungsfälle

Alice und spontanes OLSR

  • Alice verbindet ihr Notebook mit einer beliebigen Netzwerkdose in ihrer Wohnung
  • Alice tippt eine kurze Befehlszeile (z.B. "sudo ifup opennet") ein
  • ihr Notebook hat nun eine reguläre Opennet-IP und nimmt am OLSR-Routing teil
  • ihr normales lokales Netzwerk (inkl. Routing in das Internet) bleibt parallel bestehen

Bob bringt seinen Server ins Opennet

  • Bob betreibt in seinem heimischen Netzwerk einen Server
  • der Server ist nicht direkt mit dem Opennet-AP in Bobs Netz verbunden (Switches und/oder Router liegen dazwischen)
  • Bob konfiguriert auf seinem Server eine statische Opennet-IP (inkl. OLSR)
  • der Server kann nun Dienste im Opennet anbieten oder OLSR-spezifische Operationen (Node-Überwachung, ...) ausführen
  • die anderen Geräte im Netz nehmen diesen Opennet-Verkehr (zwischen Server und AP) nicht wahr

Carolin freut sich über eine OLSR-Netzwerkbuchse

  • Carolin entwickelt Firmware für Opennet-APs
  • Carolin konfiguriert den Router auf ihrem Schreibtisch derart, dass auf einem Port Opennet-Verkehr und auf den anderen Ports ihr lokales Netzwerk ausliefert wird
  • nun kann Carolin jederzeit ihre experimentellen Opennet-APs direkt mit der Opennet-Netzwerkbuchse verbinden - die frischen APs brauchen sich dabei um nichts zu kümmern, da der Port die Pakete ohne VLAN-Markierung (untagged) ausliefert

Voraussetzungen

Alle Router in deinem Netz müssen 802.1Q unterstützen. Praktisch jedes Gerät mit Openwrt, sowie konfigurbare Switches und manche (tendenziell recht teure) Router sind dazu in der Lage.

Die untenstehende Beschreibung verwendet die VLAN-ID 10 für den Opennet-Verkehr. Dies ist eine willkürliche Wahl. Prinzipiell ist jede Zahl zwischen 2 und 4095 möglich. Bei manchen Ethernet-Switches (hier ist das physikalische Netzwerk-Interface in einem Router gemeint) treten jedoch mit openwrt Probleme auf, wenn die VLAN-ID größer als 15 ist.


Einrichtung der Opennet-Node

Dies betrifft Alices Notebook und Bobs Server (siehe oben).

Vorbereitung

  • Pakete vlan und olsrd installieren:
   aptitude install vlan olsrd
  • folgende Zeilen in die /etc/network/interfaces einfügen:
    • dabei XXX durch eine beliebige IP ersetzen (bzw. melde deine mobile IP an)
    • eventuell eth0 durch dein lokales Netzwerk-Interface ersetzen
 iface opennet inet manual
   pre-up      if ! ifconfig -a | grep -q "^eth0 "; then echo "First bring eth0 up."; false; fi
   pre-up      /sbin/ip link add link eth0 name opennet type vlan id 10
   post-up     ifconfig opennet 192.168.33.XXX netmask 255.255.0.0
   post-up     invoke-rc.d olsrd start
   post-down   /sbin/ip link delete opennet
   post-down   invoke-rc.d olsrd stop
  • olsrd einrichten:
    • START_OLSRD in der /etc/default/olsrd auf YES setzen
    • interface-Zeile in der /etc/olrsd/olsrd.conf setzen:
 Interface "opennet"

Nutzung

  • Verbindung aufbauen/abbauen:
 ifup opennet
 ifdown opennet
  • die obigen Kommandos erfordern root-Rechte - also musst du eventuell sudo verwenden
  • nun kannst du das OLSR-Routing um deinen Rechner herum betrachten: http://localhost:8080


Einrichtung des VLAN im Netz

Das folgende Procedere muss für alle Router im Netzwerk durchgeführt werden. Einfache Switches erfordern keine spezifische Konfiguration. Konfigurierbare Switches sollten selbsterklärend analog zur folgenden Beschreibung bearbeitet werden.

Prinzipiell ist es empfehlenswert, den VLAN-Verkehr auf die notwendigen Ports jedes Geräts zu beschränken. Die folgende Konfiguration geht jedoch der Einfachheit halber von einer Verteilung im gesamten verkabelten Netz aus.

VLAN erzeugen

Gemischte tagged/untagged-Konfiguration mit Detailbeschreibung.

Die folgende Beispielkonfiguration kannst du der Einfachheit halber manuell an die Datei /etc/config/network anhängen.

Die verwendeten Portnummern gelten nur für das angegebene Gerät. Du solltest auf jeden Fall bei OpenWRT nachschauen, welche Nummern die Ports deines Routers haben. Diese Portnummern, sowie der virtuelle CPU-Port sind in der untenstehenden ports-Einstellung jeweils mit dem Präfix t einzutragen.

Beispielkonfiguration für Netgear WNDR3700 (/etc/config/network):

 config 'switch_vlan'
       option 'device' 'rtl8366s'
       option 'vlan' '10'
       option 'ports' '0t 1t 2t 3t 5t'

Somit erhält der obige rtl8366s-Switch (recht verbreitet) ein zusätzliches VLAN (mit der ID 10) auf allen Ports, wobei alle ausgehenden Pakete immer mit dieser ID markiert werden.

Die obige Konfiguration ist auch einfach durch die Switch-Konfiguration über das Web-Interface von openwrt erreichbar. Du musst jedoch unbedingt vor dem Speichern der Einstellung den untenstehenden Hinweis für alle openwrt-Versionen bis einschließlich backfire lesen. Andernfalls verlierst du dauerhaft die Kabelverbindung zu deinem Router.

Bridge über mehrere VLAN-Interfaces

Falls das WAN-Interface des Routers nicht an dem internen Switch des LAN-Interfaces hängt, dann ist eine Bridge-Konfiguration der beiden VLANs sinnvoll.

Füge die folgenden Zeilen an die Datei /etc/network/interfaces an:

 config 'interface' 'opennet'
       option 'proto' 'none'
       option 'type' 'bridge'
       option '_orig_ifname' 'eth0.10'
       option '_orig_bridge' 'true'
       option 'ifname' 'eth0.10 eth1.10'
       option 'auto' '1'
       option 'stp' '1'

Für den Port eth1 (der übliche WAN-Port) wird damit magisch aufgrund des neuen Interface-Namens (eth1.10) ein VLAN mit der ID 10 angelegt. Diese Magie funktioniert nur mit einfachen Ports, also nicht mit internen Switches.

Die Bridge-Konfiguration verknüpft das VLAN des LAN-Interfaces mit dem VLAN des WAN-Ports.

IP-Konfiguration (optional)

Es ist nicht erforderlich, dem Router eine IP aus dem VLAN-Bereich (also eine Opennet-IP) zu geben. Das Interface muss also lediglich aktiviert, nicht jedoch für ipv4 konfiguriert werden.

Falls der Router jedoch auch im Opennet sichtbar sein soll, dann sind noch folgende Schritte erforderlich:

  • statische IP auf dem Interface opennet konfigurieren
  • das Interface opennet einer Firewall-Zone zuteilen
  • Masquerading und Forward-Policies konfigurieren
  • OLSR installieren

Bekannte Probleme (UNBEDINGT LESEN)

Gemischtes VLAN-Tagging mit openwrt (bis einschließlich backfire)

Mit openwrt bis einschließlich backfire schlägt trunking, also die oben beschriebene gemischte Konfiguration von tagged (Opennet-Verkehr) und untagged (sonstiger Verkehr) Ports auf unangenehme Weise fehl. Daraufhin wird der Router nicht mehr über die Ports erreichbar sein.

Kurz gesagt: du solltest vorher unbedingt sicherstellen, dass du im Notfall per WLAN das Konfigurationsinterface des Routers erreichen kannst. Andernfalls wirst du im Problemfall kaum um eine komplette Neu-Einrichtung des Routers herumkommen.

  • Details zum Bug: Ticket #8867
  • Workaround (ersetze X.Y durch die IP deines Routers):
 wget --no-check-certificate https://dev.openwrt.org/raw-attachment/ticket/8867/switch.sh
 chmod +x switch.sh
 scp -p switch.sh root@172.16.X.Y:/lib/network/

Debugging

Wireshark

Der Netzwerk-Sniffer Wireshark zeigt die unmarkierten und die VLAN-Pakete auf dem physikalischen Interface gemeinsam an. Für eine Filterung der VLAN-Pakete kannst du beispielsweise folgende Regeln verwenden:

  • Pakete für VLAN #10: vlan.id == 10
  • Pakete mit VLAN-Markierung: vlan.id
  • Pakete ohne VLAN-Markierung: not vlan.id

tcpdump

Mit dem Debian-Paket v4.3 scheint es spontan nicht möglich zu sein, auf dem physikalischen Interface nach VLAN-IDs zu filtern. Oder hat jemand andere Informationen?

tcpdump kann jedoch auf das spezifische VLAN-Interface angesetzt werden (z.B. tcpdump -i opennet -n). Nun werden naturgemäß nur die Pakete mit der passenden VLAN-ID angezeigt.


Port-Konfiguration eines Routers

Das Programm swconfig ist für die Einstellung des internen Switches, sowie für das vlan-Tagging zuständig.

Die üblichste Befehlszeile wird hier folgende sein:

 swconfig dev eth0 show

Der Name des Switch-Interfaces ist bei manchen Geräten jedoch nicht identisch mit dem des Netzwerk-Interfaces. Beispiele für andere Switch-Interfaces sind:

  • rtl8366s
  • ... bitte weitere eintragen

Die Port-Zuteilung eines VLANs lässt sich beispielsweise folgendermaßen ändern:

 swconfig dev eth0 vlan 10 set ports "0t 1t 2t 3t 5t"
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge