Linux Bridges, VLANs und ein Trunk?
31. Mai 2011 | Von Ralf Spenneberg | Kategorie: Admin | VirtualisierungFür eine Virtualisierungsumgebung benötigten wir virtuelle Switches mit VLANs und der Möglichkeit, diese über einen Trunk zu verbinden. Dabei sollte das ganze auf Debian Squeeze mit so wenig Anpassungen erfolgen. Leider ist Openvswitch noch nicht Bestandteil der Distribution, sonst wäre dies die erste Wahl gewesen. Da Openvswitch aber sogar den Kernel modifiziert (zusätzliches Modul) schied es zunächst aus. Das ganze sollte mit Hausmitteln erfolgen.
Bridges
Eine Bridge unter Linux aufzubauen, ist einfach. Hierzu gibt es den Befehl brctl. Damit können einfach Bridges gebaut werden. Debian unterstützt den Bau von Bridges sogar über die Datei /etc/network/interfaces:
auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
Damit die Switches später über KVM einfach erkannt und eingebunden werden konnten, sollten diese aber anders benannt werden. Auch dies ist einfach mit der Datei möglich. Die Switches können jeden Namen erhalten:
auto extern0 iface extern0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 0 bridge_fd 0
VLANs
Nun sollte jedoch auch VLANs unterstützt werden. Dies bietet Linux mit dem Bridge-Code nicht. Openvswitch könnte das. Unter Linux müssen hierfür einfach mehrere Bridges gebaut werden. Dabei können die Bridges auch den Namen des VLANs erhalten. Werden also zwei VLANs (mailsrv und filesrv) benötigt, so werden zwei Bridges erzeugt. Diese Bridges sind nun nicht mit der Außenwelt verbunden. Ihnen fehlt ein physikalischer Bridge-Port (bridge_ports).
auto mailsrv iface mailsrv inet dhcp bridge_stp off bridge_maxwait 0 bridge_fd 0 auto filesrv iface filesrv inet dhcp bridge_stp off bridge_maxwait 0 bridge_fd 0
Trunk
Um nun die Bridges auf mehreren physikalischen Systemen über einen VLAN-Trunk zu verbinden, muss das physikalische System den Trunk zerlegen und die VLANs auf verschiedene virtuelle Netzwerkkarten aufteilen. Diese können dann den Bridges zugeordnet werden. In unserem Fall hatten wir ein VLAN 101 welches für die Mailserver gedacht war. Im einfachsten Fall verwendet man unter Debian:
auto eth0.101 iface eth0.101 inet manual vlan_raw_device eth0
Dies erzeugt ein VLAN Interface für das VLAN 101. Dies kann nun als Bridge-Port einer Bridge zugeordnet werden. Sollen die Namen sprechender sein, kann man auch folgende Konfiguration verwenden:
auto mailvlan iface mailvlan inet manual up ip link add link eth0 name mailvlan type vlan id 101 up ip link set dev mailvlan up down ip link del dev mailvlan
Dass die virtuelle Karte das richtige VLAN und die richtige physikalische Netzwerkkarte als Backend verwendet kann unter /proc/net/vlan/mailvlan kontrolliert werden.
Werden für jedes VLAN nun entsprechende virtuelle Netzwerkkarten eingerichtet und diese den Bridges zugeordnet, so entsteht im Grunde ein in VLANs aufgteilter und über einen Trunk verbundener virtueller Switch. Natürlich muss der physikalische Switch, der die beiden physikalischen Rechner mit den Bridges verbindet auch die entsprechenden Ports im Trunk-Modus aktiviert haben und die entsprechenden VLANs erlauben.