Aus Linux-Magazin 11/2006

Virtuelle LANs unter Linux nutzen

Mit einem VLAN können Netzwerk-Administratoren ihre Subnetze jederzeit neu aufteilen, ohne Kabel umzustecken, und an ihren Linux-Router wesentlich mehr Netze anschließen, als dieser Netzwerkkarten besitzt.

Wer sein Netzwerk in mehrere IP-Subnetze aufteilt, verpasst in der Regel jedem Subnetz einen eigenen Switch, dessen Uplink zum Router führt. Das Netz ist dann sauber strukturiert, der Router kann als Firewall fungieren und die Broadcasts bleiben in ihrem eigenen Subnetz. Soll sich diese Struktur ändern, muss der Admin aber zur Patchbay marschieren, die richtigen Anschlüsse suchen und Kabel umstöpseln. Selbst wenn nur ein Port kurzzeitig in ein anderes Subnetz wandern soll, ist so viel Aufwand nötig. Ein VLAN (virtuelles LAN) spart diese Arbeit – der Netzwechsel klappt automatisch.

Fliegender Netzwechsel

Ein Netzwechsel ist in der Praxis in vielen Situationen erforderlich. Wenn beispielsweise ein Mitarbeiter in einer anderen Abteilung aushelfen soll und dabei seinen Arbeitsplatz behält, muss seine Workstation meist ins Netz der anderen Abteilung wechseln, um auf deren Server zugreifen zu dürfen.

Auch Quarantäne-Netze haben sich bewährt: Hegt ein Admin den Verdacht, dass sich ein Computer einen Wurm eingefangen hat, dann muss er diese Maschine schnell vom Produktivnetz trennen. Der verdächtige Rechner sollte aber vorerst weiterlaufen, damit ein Intrusion-Detection-System oder eine forensische Untersuchung am lebenden Objekt arbeiten können. Mit einem VLAN sperrt der Admin den Rechner auf Knopfdruck in das Quarantäne-Netz.

Weit verzweigte LANs

Die herkömmliche physikalische Strukturierung ohne VLAN stößt auch an ihre Grenzen, wenn die Anschlüsse eines Subnetzes an weit voneinander entfernten Punkten des Netzwerks liegen. Zum Beispiel legen viele Admins ein eigenes Subnetz nur für Netzwerkdrucker an. Einzig ein spezieller Spooler darf Aufträge an die Drucker weiterleiten. Damit ist ein genaues Accounting der Aufträge möglich. Die Drucker stehen aber über die Firma verstreut.

Das Ziel ist, die logische Netzinfrastruktur von der physikalischen Verkabelung zu trennen, also das LAN zu virtualisieren. Die passende Technik nennt sich Virtual Bridged Local Area Networks [1], sie trägt die IEEE-Standardisierungsnummer 802.1q. Switches, die 802.1q implementieren, müssen in der Lage sein, einzelne Ports bestimmten VLANs zuzuordnen (Abbildung 1). Soll der Switch die Pakete mehrerer VLANs über einen einzelnen Port weiterleiten (Abbildung 2), markiert er sie (Abbildung 3). Dieses Verfahren heißt VLAN-Tagging. Der Switch am anderen Ende der Leitung kann anhand der Markierungen das Paket wieder dem korrekten VLAN zuordnen.

Abbildung 1: Ein VLAN-fähiger Switch trennt das Netz in zwei unabhängige Segmente. Aus Sicht der Rechner verhält sich das Netz so, als seien VLAN 1 und VLAN 2 mit je einem eigenen Switch vernetzt.

Abbildung 1: Ein VLAN-fähiger Switch trennt das Netz in zwei unabhängige Segmente. Aus Sicht der Rechner verhält sich das Netz so, als seien VLAN 1 und VLAN 2 mit je einem eigenen Switch vernetzt.

Abbildung 2: An zwei räumlich getrennten Switches sind drei VLANs angeschlossen. Zwischen den Switches sorgt VLAN-Tagging für die korrekte Zuordnung der Frames zu ihrem virtuellen LAN. Der Hardware-Router verbindet die drei VLANs auf IP-Ebene.

Abbildung 2: An zwei räumlich getrennten Switches sind drei VLANs angeschlossen. Zwischen den Switches sorgt VLAN-Tagging für die korrekte Zuordnung der Frames zu ihrem virtuellen LAN. Der Hardware-Router verbindet die drei VLANs auf IP-Ebene.

Abbildung 3: Beim VLAN-Tagging fügt der Switch in einen gewöhnlichen Ethernet-Frame (oben) vier zusätzliche Bytes ein (Mitte): eine zusätzliche Typangabe und das TCI-Feld (Tag Control Information). Letzteres enthält die Priorität, das Format und die VLAN-ID des 802.1q-Frame (unten).

Abbildung 3: Beim VLAN-Tagging fügt der Switch in einen gewöhnlichen Ethernet-Frame (oben) vier zusätzliche Bytes ein (Mitte): eine zusätzliche Typangabe und das TCI-Feld (Tag Control Information). Letzteres enthält die Priorität, das Format und die VLAN-ID des 802.1q-Frame (unten).

Format der 802.1q-Frames: 4 Bytes zusätzlich

Der Switch erweitert den Header des Ethernet-Frame dazu um 4 Bytes (siehe Abbildung 3). Die ersten beiden Bytes tragen die Ethernet-Typ-ID für 802.1q, ihr Hex-Wert ist 0x8100. Die nächsten drei Bits dienen der Prioritätsverwaltung, das vierte Bit ist ein Format-Indikator. Wesentlicher Bestandteil sind die übrigen 12 Bits mit der VLAN-ID. Mit diesen 12 Bits lassen sich 212, also 4096 VLANs unterscheiden. Dabei sind VLAN 0 und 0xFFF (dezimal 4096) reserviert, sodass insgesamt 4094 unterschiedliche VLANs möglich sind.

In der Praxis reduziert sich diese Zahl allerdings weiter. Verschiedene Cisco-Switches unterteilen den Nummernraum in Normal Range (1 bis 1005) und Extended Range (1006 bis 4096). Kleinere Geräte von 3COM oder HP können nur wenige VLANs auf einmal verwalten, typischerweise maximal 16 bis 30.

VLAN-Tags am Router nutzen

Normalerweise ist der Einsatz eines VLAN für die angeschlossenen Arbeitsplätze und Server-Rechner transparent, da der Switch die Markierungen selbst einfügt und auch wieder entfernt. Es ist jedoch auch möglich, getaggte Frames bis zum Endgerät zu schicken. Dann muss dieses die modifizierten Pakete richtig interpretieren. Eine sinnvolle Anwendung dafür wäre ein Linux-basierter Software-Router. Soll er sehr viele Subnetze verbinden, wird\’s im Rechner aber eng – die nötige Anzahl Netzwerkkarten passt nicht ins Gerät.

In solchen Fällen ist es zweckmäßig, weniger stark belastete Subnetze per VLAN-Tagging über ein einzelnes Switch-Interface herauszuführen und diesen gemischten Paketstrom über eine einzige Karte in den Linux-Router zu leiten (siehe Abbildung 4). Es ist für die Konfiguration des Routers unerheblich, ob ein Netz direkt an einem Interface hängt oder sich mehrere VLAN-Interfaces eine Netzwerkkarte teilen. Bei den Chemnitzer Linux-Tagen [3] setzten die Admins eine solche Konfiguration ein. Mit Hilfe des Linux-Routers konnten sie zusätzlich Bandbreitenmanagement, Netflow-Analyse und zustandsbehaftete Paketfilterung betreiben.

Abbildung 4: Gehen einem Router die Netzwerkkarten aus, dann verhilft ihm die VLAN-Technik zu virtuellen Interfaces. Über das Interface »eth0« sind die VLANs 1 bis 3 angeschlossen; Router-intern erscheinen sie an den virtuellen Interfaces »vlan1« bis »vlan3«.

Abbildung 4: Gehen einem Router die Netzwerkkarten aus, dann verhilft ihm die VLAN-Technik zu virtuellen Interfaces. Über das Interface »eth0« sind die VLANs 1 bis 3 angeschlossen; Router-intern erscheinen sie an den virtuellen Interfaces »vlan1« bis »vlan3«.

Bei der Konfiguration des Rechners zeigte sich ein nicht ganz unerwartetes Problem: Manche Netzwerkkarten können mit den 4 Bytes größeren Ethernet-Frames nicht umgehen. Die Folge sind hohe Paketverlustraten. Lösen lässt sich das mit einer kleineren MTU (Maximum Transfer Unit, maximale Framegröße), einzustellen per »ip«-Kommando.

Listing 1: VLAN-Konfiguration
(entsprechend Abbildung 4)

01 # eth0 aktivieren
02 ip link set eth0 up
03 
04 # Namensschema einstellen (vlanX)
05 vconfig set_name_type VLAN_PLUS_VID_NO_PAD
06 
07 # VLAN-Interfaces anlegen
08 vconfig add eth0 1
09 vconfig add eth0 2
10 vconfig add eth0 3
11 
12 # VLAN-Interfaces konfigurieren und aktivieren
13 ip addr add 10.1.0.254/16 broadcast 10.1.255.255 dev vlan1
14 ip link set vlan1 up
15 ip addr add 10.2.0.254/16 broadcast 10.2.255.255 dev vlan2
16 ip link set vlan2 up
17 ip addr add 10.3.0.254/16 broadcast 10.3.255.255 dev vlan3
18 ip link set vlan3 up
19 
20 # Interface eth1 konfigurieren und aktivieren
21 ip addr eth1 10.4.0.254/16 broadcast 10.4.255.255 dev eth1
22 ip link set eth1 up

Linux-Router mit VLAN-Support

Der Linux-Kernel unterstützt seit Version 2.4.15 auch VLANs. Das zugehörige Modul trägt den Namen »8021q« und stammt von Ben Greear [2]. In den Distributionskernels (siehe Kasten “VLAN in den Distributionen”) ist das Modul meist schon vorkompiliert. Falls nicht: Es versteckt sich in der Kernelkonfiguration unter »Networking-Options | 802.1Q VLAN Support«.

VLAN in den
Distributionen

Debian enthält das Paket »vlan«. Ist es installiert, kann man in der Konfigurationsdatei »/etc/network/interfaces« Interfacenamen nach jedem der vier Namensschemata verwenden. Das Vlan-Skript »/etc/network/if-pre-up.d/vlan« nimmt die notwendigen Einstellungen vor. Details stehen in der Manpage »vlan-interfaces«.

Fedora: Die VLAN-Interfaces sind in je einer Datei »/etc/sysconfig/network-scripts/ifcfg-Interfacename« einzutragen. Der Name des jeweiligen Geräts muss zusätzlich unter der Kennung »DEVICE=Interfacename« in der Datei erscheinen. Außerdem muss der Admin dort »VLAN=yes« einsetzen. Fedora benutzt ausschließlich das Namensschema »DEV_PLUS_VID_NO_PAD«.

Suse: Die Konfigurationen liegen hier im Verzeichnis »/etc/sysconfig/network«. Die Dateien tragen auch bei dieser Distribution den Namen »ifcfg-Interfacename«. Im Gegensatz zu Fedora erwartet Suse die VLAN-Interfacenamen jedoch nach dem Schema »VLAN_PLUS_VID_NO_PAD«. Weitere Kennzeichnungen sind nicht notwendig.

Nach dem Laden des Moduls legt das »vconfig«-Tool neue VLANs an, löscht sie wieder und stellt einige Parameter ein. Wichtig ist die Wahl des Namensschemas per »vconfig set_name_type Konvention« (Tabelle 1). Die Konvention entscheidet, wie der Kernel das zu einer VLAN-ID gehörende Interface nennt.

Tabelle 1:
Namenskonvention

 

Konvention

VLAN-ID 5 über Device »eth0«

DEV_PLUS_VID

eth0.0005

DEV_PLUS_VID_NO_PAD

eth0.5

VLAN_PLUS_VID

vlan0005

VLAN_PLUS_VID_NO_PAD

vlan5

Virtuelle Netzwerk-Interfaces anlegen

Das Kommando »vconfig add Interface VLAN-ID« legt ein neues Interface an. Achtung: Vorher muss das zugehörige physische Interface mit »ip link set Interface up« hochgefahren werden. Bei der Namenskonvention »DEV_PLUS_VID_NO_PAD« erzeugt der Aufruf »vconfig add eth0 5« ein neues virtuelles Interface »eth0.5« (siehe Tabelle 1), das die Pakete dem VLAN 5 zuordnet und sie über »eth0« sendet und empfängt.

Das VLAN-Interface erscheint als gewöhnliches Netzwerk-Interface im Proc-Filesystem unter »/proc/net/dev«. Es lässt sich wie jedes andere IP-Interface behandeln. Zusätzlich gibt es das Verzeichnis »/proc/net/vlan«, das in mehreren Dateien über die VLAN-Konfiguration informiert.

Die Option »vconfig set_flag REORDER _HDR 1« legt fest, dass der Kernel die VLAN-Tags entfernen soll, bevor er das Paket an eine Anwendung übergibt. Einige Programme (beispielsweise der DHCP-Daemon) lesen direkt die Ethernet-Pakete und würden über die vier zusätzlichen Markierungsbytes im Paket stolpern. Jetzt kann der Linux-Router zusätzlich beliebige Serverdienste übernehmen und sie einzelnen VLANs oder dem ganzen Netz anbieten. (fjl)

Infos

[1] VLAN-Standard: [http://standards.ieee.org/getieee802/download/802.1Q-2003.pdf]

[2] VLAN-Kernelmodul: [http://www.candelatech.com/~greear/vlan.html]

[3] Daniel Molkentin, “Wieder Zuwachs im Osten – Chemnitzer Linux-Tage 2004”: Linux-Magazin 05/04, S. 83

Der Autor

Chris Hübsch ist wissenschaftlicher Mitarbeiter an der Professur für verteilte und selbstorganisierende Rechnersysteme an der TU Chemnitz. Erfahrungen mit VLANs sammelte er als Netz-Admin am Dr.-Wilhelm-André-Gymnasium Chemnitz und bei den Chemnitzer Linux-Tagen.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben