FF-Router einsperren im VLAN

Aus Freifunk Köln, Bonn und Umgebung
Wechseln zu: Navigation, Suche

Freifunk-Router am heimischen WLAN-Router in einem VLAN einsperren

Das folgend beschrieben Vorgehen funktioniert bei WLAN-Routern unter OpenWrt mit konfigurierbarem Switch, hier am Beispiel eines TP-Link Archer C5 als Internet-Gateway, bei der der Freifunk-Router in einem der gelben LAN-Ports steckt, in direkter Nachbarschaft zu Desktoprechnern und ähnlichem.

Achtung: die Switch-Belegung beim Archer C5 ist etwas eigen, bitte nicht unbedacht für andere Modelle kopieren.

Die Idee hier ist, dem physikalischen Steckplatz im Switch ein VLAN zuzuweisen, in dem der Freifunk-Router alleine ist, und dann alles weitere so einzustellen, dass er Verbindungen ins WAN herstellen kann.

Hierbei gibt es drei logische Einheiten innerhalb des "WLAN-Router"-Kastens zu bedenken:

  • Switch
  • Router
  • Firewall

Wenn im Folgenden das Wort "Router" verwendet wird, ist damit die logische Einheit innerhalb des Kastens gemeint, und nicht der ganze Kasten. Das Wort "Freifunk-Router" meint hingegen den anderen Kasten, der via Kabel angeschlossen werden soll, als Ganzes.


Switch konfigurieren

Sicherheitshalber sollte man ein Gerät zur Hand haben, mit dem man via WLAN auf den Router zugreifen kann, entweder via ssh oder die Webschnittstelle. Falls man sich bei der Switchkonfiguration vertut, bleibt der Router nämlich über WLAN erreichbar.

Switch und Router werden unter OpenWrt in der gleichen Datei konfiguriert, nämlich /etc/config/network der Switch in unserem Beispielgerät hat 7 ports wie folgt:

0 	eth1
1 	WAN
2 	LAN1
3 	LAN2
4 	LAN3
5 	LAN4
6 	eth0

Quelle: http://wiki.openwrt.org/toh/tp-link/tl-wdr7500#port_map

Dabei sind 0 und 6 Router-Interfaces, die in festen internen Ports im Switch stecken, und 1-5 sind die blauen (1) und gelben (2-5) Buchsen auf der Rückseite des Geräts.

Per Voreinstellung finden sich in /etc/config/network folgende Einträge zum Switch:

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

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

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option vid '2'
        option ports '1 6'

Hier werden also die gelben physischen LAN-Ports (2-5) mit dem Router-Interface eth1 zusammen in VLAN 1 gesteckt, und der blaue "WAN"-Port (1) zusammen mit eth0 in VLAN 2. Hierbei handelt es sich um untagged VLANs, was nur so lange funktioniert, wie jeder Port in nur einem VLAN steckt. In unserem Fall wollen wir aber einen der gelben Ports in ein eigenes VLAN stecken, und damit er mit dem Router reden kann, muss auch das Router-Interface eth1 in diesem VLAN liegen (eth1 ist das "LAN"-Interface des Routers). An dieser Stelle kommen tagged VLANs ins Spiel, und die Regeln sind in etwa wie folgt:

  • ein Port darf in einem untagged und in mehreren tagged VLANS sein
  • innerhalb des gleichen VLANS dürfen tagged und untagged Ports gemischt sein
  • die Nummer des VLANs wird als Tag verwendet, mit dem Pakete in bestimmten Fällen markiert werden
  • wenn Pakete mit Tag von aussen über einen untagged Port beim Switch ankommen, werden sie ignoriert
  • wenn Pakete ohne Tag von aussen über einen tagged Port beim Switch ankommen, werden sie ignoriert
  • wenn Pakete ohne Tag über einen untagged Port am Switch in ein VLAN kommen, liefert der Switch sie mit passendem Tag an tagged Ports im gleichen VLAN aus
  • wenn Pakete mit Tag über einen tagged Port am Switch in ein VLAN kommen, entfernt der Switch das Tag, bevor er die Pakete an untagged Ports im gleichen VLAN ausliefert
  • wer oder was auch immer aussen an einem tagged Port des Switches hängt, muss das wissen und in der Lage sein, getaggte Pakete zu senden und zu empfangen

Was wir jetzt machen müssen ist folgendes: Im Switch ein weiters VLAN einrichten, und da einen der gelben Ports reintun. Dieser gelbe Port muss entsprechend aus dem VLAN, in dem er gerade drin ist (VLAN 1) herausgenommen werden, damit er nur in einem VLAN ist (wir wollen den Freifunk-Router ja isolieren). Wie schon erwähnt, muss eth1 (Switchport 0) auch in dieses VLAN, aber es muss auch im VLAN 1 bleiben, weil wir sonst ja die anderen 3 gelben Ports effektiv abklemmen. Deswegen nehmen wir eth1 als tagged Port in unser neues VLAN und lassen es als untagged Port im alten. Beispielconfig:

config switch_vlan
        option device 'switch0'
        option vlan '3'
        option vid '3'
        option ports '0t 5'

Hier ist die gelbe Buchse mit der Nummer 4 auf der Rückseite des Routerkastens (LAN4 in der Liste oben, Switchport 5) als Anschluss für den Freifunk-Router gewählt, das neue VLAN heisst "3", und es beinhaltet Port 0 als tagged Port (das kleine "t" regelt das) und Port 5 als untagged. Nicht vergessen: Port 5 aus VLAN 1 entfernen!

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option vid '1'
        option ports '0 2 3 4' #keine 5 mehr in dieser Liste

Damit ist der Switch konfiguriert, aber die Datenpakete des Freifunk-Routers kommen jetzt mit dem Tag "3" bei der Routerkomponente an, die sie geflissentlich ignorieren wird.

Router konfigurieren

Die voreingestellte Routerkonfiguration beinhaltet drei Interfaces: loopback, lan, wan. loopback interessiert uns nicht:

config interface 'lan'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option ipaddr '?.?.?.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option _orig_ifname 'eth1 wlan0 wlan1'
        option _orig_bridge 'true'
        option ifname 'eth1 wlan0 wlan1'

config interface 'wan'
        option ifname 'eth0'
        option _orig_ifname 'eth0'
        option _orig_bridge 'false'
        option proto 'static' 
        option ipaddr '?.?.?.?'
        option netmask '?.?.?.?'
        option gateway '?.?.?.?'

Wir fügen jetzt ein weiters Interface hinzu, welches das VLAN 3 auf dem physikalischen interface eth1 entgegennehmen soll:

config interface 'KBU'
        option proto 'static'
        option ifname 'eth1.3'
        option ipaddr '192.168.200.1' #beispielwert
        option netmask '255.255.255.0'
        option ip6assign '64'

die wichtige Stelle ist das "ifname 'eth1.3'". hiermit wird dem Router gesagt, dass er Daten, die an seinem Interface eth1 als VLAN 3 getaggt ankommen, auf dem neuen Interface "KBU" annehmen soll.

Wenn man sich bisher über die LUCI-Weboberfläche durchgeklickt hat, wird einem VLAN 3 nur als "eth0.3" angeboten, was aber zumindest logisch der falsche Port ist (eth0 = WAN, eth1 = LAN). Ich habe nicht ausprobiert, ob man sich das VLAN auch mit "5 6t" klicken kann und dann den Rest via LUCI regeln kann. Ich gehe im Weiteren davon aus, dass das VLAN 3 aus "0t 5" besteht und "KBU" auf "eth1.3" lauscht. Falls jemand Erfolg mit "5 6t" und "eth0.3" hat, bitte diesen Artikel entsprechend anpassen.

Eine Sache bleibt noch: auf dem automatisch definierten Interface "lan" hängen im Moment die physischen interfaces 'eth1, wlan0, wlan1' gemeinsam. Nach meinem Verständnis ist das VLAN 1 das "default VLAN", weswegen "eth1" gleichbedeutend mit "eth1.1" sein dürfte, aber zumindest bei meiner Installation hat es nicht geschadet, das explizit zu ändern:

config interface 'lan'
        option force_link '1'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.1'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option _orig_ifname 'eth1 wlan0 wlan1'
        option _orig_bridge 'true'
        option ifname 'eth1.1 wlan0 wlan1'

Firewall

Jetzt wo unsere Datem vom Freifunk-Router über den Switch beim Router an einem Interface ankommen, müssen wir sie noch ins Internet rausreichen, und das machen wir über eine Firewall-Zone, die wir in /etc/config/firewall anlegen (oder sehr bequem in LUCI klicken können). Hier kopieren wir im Grunde einfach die Einstellungen der LAN-Zone:

config zone
        option name 'KBU'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option network 'KBU'
        option forward 'ACCEPT'

config forwarding
        option dest 'wan'
        option src 'KBU'

solange die Default-Einstellungen der Firewall beibehalten wurden und für nicht definiertes Forwarding gilt, dass es verboten ist, sind jetzt 'lan' und 'KBU' von einander getrennt, können aber beide jeweils dank Forwarding mit der WAN-Seite (dem Internet) reden.

config defaults
        option syn_flood '1'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'REJECT' # <- das ist entscheidend
        option drop_invalid '1'

Danksagung

nomaster vom Freifunk Rheinland e.V. hat sich auf dem 1C2 sehr viel Zeit genommen, um mir den Unterschied zwischen Router und Switch zu vermitteln. Ohne seine Geduld wäre dieser Artikel nicht möglich gewesen.