Freifunk EdgeRouter X Portkonfiguration

Freifunk EdgeRouter X Portkonfiguration
Photo by Muhammad Raufan Yusup / Unsplash

Beim Einrichten des EdgeRouter X für Freifunk Nordhessen habe ich einen etwas anderen Usecase benötigt.
"Ab Werk" kann die Freifunk Firmware in zwei Modi mit den Schnittstellen im EdgeRouter X umgehen:

1. Option: Mesh-on-LAN ausgeschaltet
eth0: WAN
eth1: LAN (Freifunk IP Client)
eth2: LAN (Freifunk IP Client)
eth3: LAN (Freifunk IP Client)
eth4: LAN (Freifunk IP Client)

2. Option: Mesh-on-LAN eingeschaltet
eth0: WAN
eth1: Mesh-on-LAN (Batman-Adv Interface)
eth2: Mesh-on-LAN (Batman-Adv Interface)
eth3: Mesh-on-LAN (Batman-Adv Interface)
eth4: Mesh-on-LAN (Batman-Adv Interface)

Ich bin nicht der erste mit diesem Usecase, hierfür Danke ich den Mellnau'ern für die technische Dokumentation, die ich meinen Bedürfnissen angepasst habe: klick

Mein Ziel wäre es die Ports nach folgendem Schema einzurichten:
eth0: WAN
eth1: LAN (Freifunk IP Client)
eth2: LAN (Freifunk IP Client)
eth3: Mesh-on-LAN (Batman-Adv Interface)
eth4: Mesh-on-LAN (Batman-Adv Interface)

So kann ich mein UniFi System mit dem Freifunk versorgen und parallel ein VLAN im Haus verteilen, an dem sich per Kabel gemeshte Router anschließen lassen können um z.B. mit meinen Nachbarn zu meshen.

Und so geht's:

Zuerst sollte man sich den SSH-Zugang zum Router bereits eingerichtet haben.
Dann öffnet man die Datei '/etc/config/network' und löscht nun folgende Zeilen raus (Ja, die müssen wirklich komplett gelöscht werden. Keine Sorge, wir werden  die zwei Konfigurationen ersetzen):

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

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

Anschließend kann man folgende Zeilen entweder an der eben gelöschten Stelle oder ganz unten in der Datei ergänzen:

# lan - eth1, eth2
config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '1 2 6t'

# wan - eth0
config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0 6t'

# mesh - eth3
config switch_vlan
	option device 'switch0'
	option vlan '4'
	option ports '3 6t'

# mesh - eth4
config switch_vlan
	option device 'switch0'
	option vlan '5'
	option ports '4 6t'

Die Konfiguration sagt nun folgendes aus:
LAN - VLAN 1 auf Port eth1 und eth2
WAN - VLAN 2 auf Port eth0
Mesh - VLAN 4 auf Port eth3
Mesh - VLAN 5 auf Port eth4

Da könnte die Frage aufkommen: "Warum sind die LAN Ports auf einem VLAN, die Mesh Ports aber zwei eigene VLANs?"

Die Antwort hierzu ist relativ simpel: Die beiden Ports sollen nicht wie ein Switch agieren sondern dediziert am Batman-Adv Routing Protokoll hängen. Somit sind die "Nachbarn" auf der Karte nicht miteinander verbunden.

Abschließend muss man die neu angelegten VLANs noch in der Gluon Konfiguration bekannt machen:

# Mesh auf Ports eth1, eth2 deaktivieren
uci set network.mesh_lan=interface
uci set network.mesh_lan.igmp_snooping='0'
uci set network.mesh_lan.ifname='eth0.1'
uci set network.mesh_lan.index='4'
uci set network.mesh_lan.proto='gluon_wired'
uci set network.mesh_lan.transitive='1'
uci set network.mesh_lan.macaddr=$(echo 1$(uci show network.bat0.macaddr)|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
uci set network.mesh_lan.disabled='1'

# Mesh auf eth3 aktivieren
uci set network.mesh_lan3=interface
uci set network.mesh_lan3.igmp_snooping='0'
uci set network.mesh_lan3.ifname='eth0.4'
uci set network.mesh_lan3.index='4'
uci set network.mesh_lan3.proto='gluon_wired'
uci set network.mesh_lan3.transitive='1'
uci set network.mesh_lan3.macaddr=$(echo 1$(uci show network.bat0.macaddr)|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
uci set network.mesh_lan3.disabled='0'

# Mesh auf eth4 aktivieren
uci set network.mesh_lan4=interface
uci set network.mesh_lan4.igmp_snooping='0'
uci set network.mesh_lan4.ifname='eth0.5'
uci set network.mesh_lan4.index='4'
uci set network.mesh_lan4.proto='gluon_wired'
uci set network.mesh_lan4.transitive='1'
uci set network.mesh_lan4.macaddr=$(echo 1$(uci show network.bat0.macaddr)|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/')
uci set network.mesh_lan4.disabled='0'

# Einstellungen Neustartfest "commiten"
uci commit network

Danach kann man den Router mit dem Befehl reboot neustarten, die Konfiguration wird nun angewandt.