Vorgeplänkel

Das BATMAN Protokoll ist auf unseren Images so konfiguriert, dass es über das "adhoc0" (drahtlos) und "freifunk_vpn" (Tinc über den DSL) Interface mesht. Stehen jetzt aber aus irgendwelchen Gründen zwei Router so dicht zusammen, dass sie über Patch-Kabel verbunden werden könnten, dann kann man damit den Overhead über die Funk-Schnittstelle mindern, indem man das "meshen" zwischen den Routern über einen LAN-Port leitet.


Was muss man tun?

Ohne Vorbereitung das Kabel auf beiden Seiten einfach in einen der vier LAN-Ports oder den WAN-Port zu stecken bringt nichts. BATMAN muss man sagen, dass da eine "Brücke" ist, über die er arbeiten kann. Dazu muss man die network-Config im Ordner /etc/config bearbeiten. Beim WDR-3500 muss vorher noch ein weiteres VLAN erzeugt werden. In dieser Anleitung nehmen wir nur den letzten der LAN Ports.

Erst mal die Agenda für den TL-WR1043ND

  1. Wir nehmen aus dem "switch" einen der 4 Ports heraus.
  2. Wir machen ein zusätzliches "vlan" (virtuelles LAN) auf und bauen ihn dort ein.
  3. Wir machen ein neues Mesh-Interface mit dem Namen "mesh_lan" auf.
  4. Jetzt Kabel einstecken und booten.
  5. Prüfen: geht was übers Kabel? Wie sehe ich das?

Etwas Theorie

Zum Verständnis ist es wichtig zu wissen, wie die LAN-Ports im Router durchnummeriert werden. Das ist pro Modell oder Typ durchaus unterschiedlich und unterscheidet sich bisweilen intern sogar von der auf dem Gehäuse aufgeruckten Numerierung. Die muss man sich also für den konkreten Router erst einmal besorgen. Das OpenWrt-Wiki gibt hier Auskunft. Als erstes lernt man dort, dass es mehr als nur die sichtbaren Ports gibt, da spielt die CPU nämlich noch mit rein, sie hat einen eigenen Port.

Beispiel anhand des TP-WD1043ND wiki.OpenWRT

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'   
config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 5t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '0 5t'

So sieht das Ende der network-Konfiguration aus. Der erste Block macht einen Reset auf den "switch0" und aktiviert das "vlan". Nun werden zwei virtuelle Interfaces angelegt. Block vlan 1 ist für den LAN-Teil zuständig und Block vlan 2 für das WAN (meistens mit dem DSL-Anschluss daran).

LAN-Block (vlan 1)

Wir sehen in der Zeile "ports" die Zahlen 1 bis 5 mit Blanks separiert. Die 5 hat auch noch ein "t" angehängt. Im hardwarespezifischen Teil des OpenWRT-Wikis zu diesem Router-Modell bekommen wir gesagt, dass die Zahlen 1..4 den Nummern der Steckplätze auf der Rückseite entsprechen. Die 5 ist der Router mit einem unsichtbaren Port selber und "t" zeigt an, das die Pakete die an ihn gerichtet sind "getaggt" (gekennzeichnet) sind. Mehr zum Thema "tagged-Packets" könnt ihr im OpenWRT-Wiki nachlesen.

WAN-Block (vlan 2)

Hier steht unter "ports" eine "0" und die "5t". Was die 5 ist, haben wir eben erfahren. Jedoch die "0" steht hier für den WAN-Port. Da wir von dem hier nichts wollen, lassen wir "vlan 2" in Ruhe.

1. Wir nehmen aus dem "switch" einen der 4 Ports heraus

Wir suchen uns einen Port aus und nehmen den aus der ports-Kette im vlan 1 raus. Dieser Port ist dann nicht mehr für einen normalen Client zu gebrauchen. Am Besten den dann auf dem Gerät markieren. Ich wähle den Steckplatz LAN 4 aus. Beim 1043 hat er auch die Nr. 4. Dann sieht vlan 1 anschließend so aus:

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 5t'

2. Wir machen ein zusätzliches "vlan" auf

Wir kopieren den ganzen Block mit dem vlan 1 direkt darunter und bauen ihn als vlan 3 um (nächste freie Nummer nehmen). Dann setzen wir den herausgenommenen Port 4 dort wieder ein (Wichtig: die CPU "5t" bleibt drin).

config switch_vlan
        option device 'switch0'
        option vlan '3'
        option ports '4 5t'

3. Wir machen ein neues mesh Interface mit dem Namen "mesh_lan" auf

In der network Konfiguration befindet sich dieser Block:

config interface 'mesh'
        option ifname 'adhoc0'
        option mtu '1528'
        option proto 'batadv'
        option mesh 'bat0'

Diesen kopieren wir ebenfalls komplett noch einmal dahinter und ändern ihn ab:

config interface 'mesh_lan'
       option ifname 'eth0.3'
       option mtu '1500'
       option proto 'batadv'
       option mesh 'bat0'

Was hat sich hier geändert? Wir haben diesem Block den sinnvollen Namen "mesh_lan" gegeben. Das wollen wir schließlich ja auch. Dann sagen wir mit "ifname", dass wir damit das dritte virtuelle "Unter-Interface" von eth0 ansprechen. Die durchnummerierten vlan-Blöcke werden hier nämlich angehängt. Von der Router-Ersteinrichtung wissen wir ja noch, dass "eth0.1" das LAN Interface - also unser "switch" ist und eth0.2 der WAN-Ausgang. Zur Erinnerung: wir haben eben das "vlan 3" erstellt, was wir hier mit "eth0.3" auch benutzen. Wir sagen mit "proto batadv" auch, dass dieses Protokoll auf dem Port gesprochen wird.

4. Jetzt Kabel einstecken und booten

Die "network" Konfiguration nun speichern, ein Kabel in den Port 4 einstecken und in dem anderen Router den dafür reservierten LAN-Port verbinden. Nach dem "reboot" sollte alles aktiv geworden sein.

5. Prüfen: geht was übers Kabel? Wie sehe ich das?

Nach dem Boot-Vorgang also schnell wieder einwählen mit SSH oder PUTTY und dann den Befehl absetzen:

batctl if

Wir sehen dann hoffentlich:

adhoc0: activ
eth0.3: activ

Was ab geht auf der "Brücke" kann man sich anzeigen lassen mit:

batctl td mesh_lan

Zum Anhalten CTRL-C drücken.

Kleiner Auszug (stark gekürzt am Zeilenende):

21:40:29.661984 BAT 92:f6:52:f4:71:ed > a0:f3:c1:48:d5:51: TT response, ttvn 122, entries 3, ttl 50, v 14, 
21:40:29.673194 BAT 92:f6:52:f4:71:ed > 66:66:b3:59:5a:a8: TT response, ttvn 122, entries 3, ttl 49, v 14, 
21:40:29.741951 BAT b2:48:7a:c5:d2:e6: OGM IV via neigh 66:66:b3:59:5a:a8, seq 607981500, tq 138, ttvn 27, 
21:40:29.744361 BAT 3e:f0:4d:12:b8:ae: OGM IV via neigh 12:fe:ed:4f:f9:35, seq 1346194223, tq 195, ttvn 197
21:40:29.746917 BAT 66:70:02:84:e0:dc: OGM IV via neigh a2:f3:c1:48:d5:52, seq 1179044385, tq 109, ttvn 6, 
21:40:29.751886 BAT f6:4f:5a:88:4f:2c: OGM IV via neigh 66:66:b3:59:5a:a8, seq 1380860194, tq 138, ttvn 77,
21:40:29.757191 BAT f6:4f:5a:88:4f:2c: OGM IV via neigh a2:f3:c1:48:d5:52, seq 1380860194, tq 109, ttvn 77,...

Weitere Hinweise auf die erfolgreiche Umstellung auf "eth0.3" gibt die Anzeige des Befehls:

batctl o

In der ersten Zeile steht vor der MAC Adresse, die wir immer gerne und oft auszulesen gewohnt sind, der neue Interface-Name davor:

[B.A.T.M.A.N. adv 2013.0.0, MainIF/MAC: eth0.3/10:fe:ed:XX:XX:XX (bat0)]


Agenda für den TL-WDR3500

  1. Wir machen ein neues mesh Interface mit dem Namen "mesh_lan" auf
  2. Jetzt Kabel einstecken (LAN 3-4-Port) und booten
  3. Prüfen: geht was übers Kabel? Wie sehe ich das?

1. Wir machen ein neues mesh Interface mit dem Namen "mesh_lan" auf

In der network Konfiguration befindet sich dieser Block:

config interface 'mesh5ghz'
        option ifname 'adhoc1'
        option mtu '1528'
        option proto 'batadv'
        option mesh 'bat0'

Diesen kopieren wir ebenfalls komplett noch einmal dahinter und ändern ihn ab:

config interface 'mesh_lan'
# hier das WAN-Interface angeben
       option ifname 'eth0.2'
       option mtu '1500'
       option proto 'batadv'
       option mesh 'bat0'

Ändern eth0 in eth0.1 ( VLAN 1)

config interface 'freifunk'
        option ifname 'eth0 bat0 freifunk_wlan freifunk_wlan2'

in

config interface 'freifunk'
        option ifname 'eth0.1 bat0 freifunk_wlan freifunk_wlan2'


auch zu ändern sind die VLAN Einstellungen

von

config switch_vlan
       option device 'switch0'
       option vlan '1'
       option ports '0 1 2 3 4'

in

config switch_vlan
       option device 'switch0'
       option vlan '1'
       option ports '0t 3 4'
config switch_vlan
	option device 'switch0'
       option vlan '2'
       option ports '0t 1 2'



Was hat sich hier geändert? Wir haben diesem Block den sinnvollen Namen "mesh_lan" gegeben. Dann sagen wir mit "ifname eth0.2", dass wir damit VLAN 2 als LAN-MESH nutzen wollen. Wir sagen mit "proto batadv" auch, dass dieses Protokoll auf dem Port gesprochen wird. Mit "option ifname 'eth0.1 bat0 freifunk_wlan freifunk_wlan2' " bestimmen wir das VLAN 1 ; bat0 ; freifunk_wlan und freifunk_wlan2 ohne batadv nutzen wollen.

in den Blöcken "Switch vlan" erstellen wir die VLAN´s

2. Jetzt Kabel einstecken und booten

Die "network" Konfiguration nun speichern, ein Kabel in den LAN-Port 1 2 (neben blau) einstecken und in dem anderen Router den dafür reservierten LAN-Port verbinden. Nach dem "reboot" sollte alles aktiv geworden sein.

3. Prüfen: geht was übers Kabel? Wie sehe ich das?

Nach dem Boot-Vorgang also schnell wieder einwählen mit SSH oder PUTTY und dann den Befehl absetzen:

batctl if

Wir sehen dann hoffentlich:

adhoc0: activ
eth0.2  : activ

Was ab geht auf der "Brücke" kann man sich anzeigen lassen mit:

batctl td mesh_lan

Zum Anhalten CTRL-C drücken.

Bei Gluon geht das anders

Der Konfigurations-Wizard bietet auf der Gluon-Seite für Experts (rechts oben umschalten) an, den WAN-Port zum meshen zu verwenden. In diesem Modus darf man jetzt keinen DSL-Anschluss mehr anschließen. Die blaue WAN-Buchse dient dann nur noch dazu zwei Router mit einem Kabel zu verbinden, damit diese über das Kabel meshen, falls sie sich per WLAN nicht sehen sollten oder eine Richtfunkstrecke dazwischen hängt. Da nur noch das Batman-Protokoll fortan über diese Anschlüsse läuft, kann hier nichts anderes mehr angedockt werden.

Anforderung:

  • Batman-mesh soll über mehr als einen Port vertrieben werden / WAN-Port wird für DSL benötigt.
  • LAN-Ports auf dem Switch (gelbe Buchsen) nutzen.

Lösung:

  • Manuelle Konfiguration nötig.
  • Alle Ports auf dem Switch für das Batman-Mesh umstellen
  • Normale Client-Computer können nicht mehr per Kabel anschlossen werden
  • Einloggen und folgende UCI-Zeilen ausführen: -(Achtung: Rückgängig machen benötigt Fachwissen)-
 uci set network.client.ifname='bat0'
 uci set network.mesh_lan=interface
 uci set network.mesh_lan.ifname="$(cat /lib/gluon/core/sysconfig/lan_ifname)"
 uci set network.mesh_lan.mesh=bat0
 uci set network.mesh_lan.proto=batadv
 uci commit network
 /etc/init.d/network restart
  • Macht man das auf zwei Routern, können diese mit einem LAN-Kabel oder einer Richtfunkstrecke (als virtuelles langes Kabel) verbunden werden.


Anforderung:

  • Nur einige der LAN-Ports (gelbe Buchsen) für Batman-mesh verwenden
  • Ports für normale Client-Computer übrig lassen

Lösung:

  • Volle manuelle Handarbeit und Fachwissen nötig
  • Wie oben beschrieben (1.+2.): Ports in der network-Config in mehrere VLANs aufteilen um damit Interfaces z.B. eth0.1, eth0.2 usw zu erhalten
  • Dann in gleicher Datei im Block "Client" das eth-Interface durch Zusatz ".x" (z.B. eth0.1) erweitern
config interface 'client'
...
  option ifname 'eth0.2 bat0'
  • Dann noch den Block anhängen und das eth-Interface, auf dem Batman-Mesh laufen soll, angeben. Beispiel:
config interface 'mesh_lan'
       option ifname 'eth0.1'
       option mesh 'bat0'
       option proto 'batadv'
  • Hinweis:
    • Es gibt Router, da sind die Ports 1..4 in umgekehrter Reihenfolge wie die Buchsen am Gehäuse beschriftet: Beispiel: WR-741 Version 4.x
    • Das für Batman-mesh abgestellte Kabel-Interface - hier eth0.1 - ist mit dem Kommando: batctl if nur dann zu sehen, wenn ein Kabel eingesteckt ist. Dann sollte diese Zeile mit ausgegeben werden: Beispiel:
eth0.1: active