Kennt sich jemand mit Open vSwitch aus?

Moin,

für eine größere Installation möchte ich auf einem Server ein Debian mit KVM laufen lassen und unter anderem darin dann ein virtualisiertes Gluon haben.

Das physikalische Interface (eth0) bekommt dabei von einem Switch mehrere VLANs, die an unterschiedliche virtuelle Netzwerkkarten z. B. im Gluon weitergereicht werden sollen.

Nach ein bisschen googlen, bin ich recht schnell auf Open vSwitch gestoßen. Fast alle Anleitungen beziehen sich aber darauf, wie man VLANs innerhalb des Hosts aufsetzt. Ich will aber VLANs verarbeiten, die über das physikalische Interface reinkommen. Hat das schon mal jemand gemacht? Oder kann Open vSwitch das nicht?

Beispiel:

An eth0 kommt von einem VLAN-fähigen Switch folgendes an:
VLAN2 - Batman Meschnetz
VLAN3 - Clientnetz
VLAN4 - Uplink

VLAN4 müsste jetzt also an br-wan des Gluons geroutet werden, VLAN2 an den LAN-Port und VLAN3 nochmal an eine zusätzliche Schnittstelle.

Wie kann ich mit ovs-vsctl die VLANs des physikalischen Interfaces erfassen? Oder muss ich da doch für jedes eingehende VLAN erstmal auf Linux-Netzwerkebene ein eth0.X erstellen? Ich hatte gehofft, mir genau die Arbeit ersparen zu können.

Grüße
Matthias

also prinzipiell geht das so wie du dir das denkst :wink:

du musst den (openv)switch auf dem Host einfach nur als managable Switch betrachten - wobei dein eth0 in einem der Ports dieses Switches steckt. Da dort mehrere VLAN-Tags drauf liegen ist das erstmal nur ein »untagged Port«.

Das was du befürchtest, dass man daraus auf dem Host erstmal mehrere eth0.X machen muss, gilt erstmal nur, wenn du die direkt am Host als „Eingang“ haben willst. aber das willst du prinzipiell nicht… :wink: (lies: die virtuellen Interfaces eth0.X setzen eben bei Benutzung das passende VLAN-Tag auf dem Paket, dass es der Uplink-Switch auch wieder einem „virtuellen Kabel“ zuordnen kann).

Im Usecase hier mit openvswitch lässt du den Tag vom jeweiligen anderen (openvswitch)Port anhängen - du hast dann also hier auch einen „partitionierten“ Switch:

# ovs-vsctl add-br ovs-hostbr
# ovs-vsctl add-port ovs-hostbr eth0

wenn du auf dem Host selbst jetzt einen Port sagen wir mal in VLAN2 haben willst, dann baust du ein »Patchkabel« vom Switch in den Host:

# ovs-vsctl add-port ovs-hostbr vlan2 -- set interface vlan2 type=internal -- set port vlan2 tag=2

und schwupps gibt’s ein Interface im Host namens vlan2, welches du benutzt wie du vorher eth0.2 benutzt hättest.

Für deine dortigen libvirt-KVM-Gäste würdest du dann einfach diesen Port taggen - das kann libvirt direkt… allerdings gibt’s m.W. leider noch keine GUI Unterstützung dafür… im passenden XML File zu der virt. Maschine kannst du das aber folgendermassen konfigurieren:

wo vorher stand:

<interface type='bridge'>
  <mac address='...'/>
  <source bridge='br0'/>
</interface>

machst du daraus:

<interface type='bridge'>
  <mac address='...'/>
  <source bridge='ovs-hostbr'/>
  <vlan>
    <tag id='2'/>
  </vlan>
  <virtualport type='openvswitch' />
</interface>

und damit ist die virt. Netzwerkkarte der VM in VLAN2 …

reicht dir das soweit erstmal?

Grüsse
Shiva

P.S. ein etwas älterer Artikel beschreibt auch, wie man direkt „Portgroups“ in libvirt definiert und man dann die virt. Netzwerkkarten einfach dort reinhängt und die Tags dann zentral in libvirt-net konfiguriert…

1 Like

ggf. könnte man die VLans direkt an die VM mittels Promiscuous Mode auf der Netzwerkkarte durchreichen.

1 Like