Open Vswitch Projekt: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
= Open vSwitch (OVS) als Cisco-ähnlicher L2-Switch mit Management-IP =
+
== Open vSwitch (OVS) als Cisco-ähnlicher L2-Switch mit Management-IP ==
  
 
== Ziel ==
 
== Ziel ==
Zeile 13: Zeile 13:
  
 
== Voraussetzungen ==
 
== Voraussetzungen ==
* Debian 12 oder Ubuntu 22.04
+
* Debian 12
 
* Linux-VM mit ≥ 18 Netzwerkkarten (eth0–eth17)
 
* Linux-VM mit ≥ 18 Netzwerkkarten (eth0–eth17)
 
* Root-Zugriff
 
* Root-Zugriff
Zeile 19: Zeile 19:
  
 
== Installation ==
 
== Installation ==
* '''apt update'''
+
<pre>
* '''apt install openvswitch-switch snmpd'''
+
apt update
 +
apt install openvswitch-switch snmpd network-manager
 +
</pre>
 +
 
 +
NetworkManager als Standard-Renderer aktivieren:
 +
<pre>
 +
systemctl enable --now NetworkManager
 +
</pre>
 +
 
 +
== Interfaces per nmcli hochziehen ==
 +
 
 +
Die physischen Interfaces werden ausschließlich per '''nmcli''' aktiviert — kein Editieren von Konfigurationsdateien nötig. 
 +
OVS übernimmt danach die komplette VLAN- und Bridge-Konfiguration.
 +
 
 +
Für jedes Interface (eth0–eth16) ein Connection-Profil anlegen und aktivieren:
 +
<pre>
 +
for i in $(seq 0 16); do
 +
    nmcli con add type ethernet ifname eth$i con-name eth$i \
 +
        ipv4.method disabled \
 +
        ipv6.method ignore \
 +
        connection.autoconnect yes
 +
    nmcli con up eth$i
 +
done
 +
</pre>
 +
 
 +
Separater Uplink eth17 mit DHCP:
 +
<pre>
 +
nmcli con add type ethernet ifname eth17 con-name eth17 \
 +
    ipv4.method auto \
 +
    connection.autoconnect yes
 +
nmcli con up eth17
 +
</pre>
  
 
== OVS-Bridge anlegen ==
 
== OVS-Bridge anlegen ==
* '''ovs-vsctl add-br br0'''
+
<pre>
 +
ovs-vsctl add-br sw0
 +
</pre>
  
== Trunk-Port konfigurieren (OPNsense) ==
+
== Trunk-Port konfigurieren (z. B. Richtung OPNsense/Router) ==
* '''ovs-vsctl add-port br0 eth0 tag=1 trunks=21,22,23 vlan_mode=native-untagged'''
+
<pre>
 +
ovs-vsctl add-port sw0 eth0 tag=1 trunks=21,22,23 vlan_mode=native-untagged
 +
</pre>
  
 
== Access-Ports konfigurieren ==
 
== Access-Ports konfigurieren ==
* '''ovs-vsctl add-port br0 eth1 tag=1'''
+
<pre>
* '''ovs-vsctl add-port br0 eth2 tag=21'''
+
ovs-vsctl add-port sw0 eth1 tag=1
* '''ovs-vsctl add-port br0 eth3 tag=22'''
+
ovs-vsctl add-port sw0 eth2 tag=21
* '''ovs-vsctl add-port br0 eth4 tag=23'''
+
ovs-vsctl add-port sw0 eth3 tag=22
* '''ovs-vsctl add-port br0 eth5 tag=1'''
+
ovs-vsctl add-port sw0 eth4 tag=23
* '''ovs-vsctl add-port br0 eth6 tag=1'''
+
ovs-vsctl add-port sw0 eth5 tag=1
* '''ovs-vsctl add-port br0 eth7 tag=1'''
+
ovs-vsctl add-port sw0 eth6 tag=1
* '''ovs-vsctl add-port br0 eth8 tag=1'''
+
ovs-vsctl add-port sw0 eth7 tag=1
* '''ovs-vsctl add-port br0 eth9 tag=1'''
+
ovs-vsctl add-port sw0 eth8 tag=1
* '''ovs-vsctl add-port br0 eth10 tag=1'''
+
ovs-vsctl add-port sw0 eth9 tag=1
* '''ovs-vsctl add-port br0 eth11 tag=1'''
+
ovs-vsctl add-port sw0 eth10 tag=1
* '''ovs-vsctl add-port br0 eth12 tag=1'''
+
ovs-vsctl add-port sw0 eth11 tag=1
* '''ovs-vsctl add-port br0 eth13 tag=1'''
+
ovs-vsctl add-port sw0 eth12 tag=1
* '''ovs-vsctl add-port br0 eth14 tag=1'''
+
ovs-vsctl add-port sw0 eth13 tag=1
* '''ovs-vsctl add-port br0 eth15 tag=1'''
+
ovs-vsctl add-port sw0 eth14 tag=1
* '''ovs-vsctl add-port br0 eth16 tag=1'''
+
ovs-vsctl add-port sw0 eth15 tag=1
 +
ovs-vsctl add-port sw0 eth16 tag=1
 +
</pre>
  
 
== Management-Interface im VLAN 1 ==
 
== Management-Interface im VLAN 1 ==
* '''ovs-vsctl add-port br0 mgmt tag=1 -- set interface mgmt type=internal'''
 
  
Datei '''/etc/network/interfaces''' anpassen:
+
Internen OVS-Port für die Management-IP anlegen:
 
<pre>
 
<pre>
auto lo
+
ovs-vsctl add-port sw0 mgmt tag=1 -- set interface mgmt type=internal
iface lo inet loopback
+
</pre>
  
# physische Interfaces nur für OVS bereitstellen
+
Management-IP per nmcli setzen:
auto eth0
+
<pre>
iface eth0 inet manual
+
nmcli con add type ethernet ifname mgmt con-name mgmt \
auto eth1
+
    ipv4.method manual \
iface eth1 inet manual
+
     ipv4.addresses 172.26.56.2/26 \
auto eth2
+
     ipv4.gateway 172.26.56.1 \
iface eth2 inet manual
+
    connection.autoconnect yes
auto eth3
+
nmcli con up mgmt
iface eth3 inet manual
 
auto eth4
 
iface eth4 inet manual
 
auto eth5
 
iface eth5 inet manual
 
auto eth6
 
iface eth6 inet manual
 
auto eth7
 
iface eth7 inet manual
 
auto eth8
 
iface eth8 inet manual
 
auto eth9
 
iface eth9 inet manual
 
auto eth10
 
iface eth10 inet manual
 
auto eth11
 
iface eth11 inet manual
 
auto eth12
 
iface eth12 inet manual
 
auto eth13
 
iface eth13 inet manual
 
auto eth14
 
iface eth14 inet manual
 
auto eth15
 
iface eth15 inet manual
 
auto eth16
 
iface eth16 inet manual
 
 
 
# separater Uplink
 
auto eth17
 
iface eth17 inet dhcp
 
 
 
# Management-Port
 
auto mgmt
 
iface mgmt inet static
 
     address 172.26.56.2/26
 
     gateway 172.26.56.1
 
 
</pre>
 
</pre>
  
=== Mirror-Port konfigurieren ===
+
== Mirror-Port konfigurieren (SPAN) ==
 
<pre>
 
<pre>
 
ovs-vsctl -- --id=@m create Mirror name=mirror0 \
 
ovs-vsctl -- --id=@m create Mirror name=mirror0 \
 
     select-vlan=1,21,22,23 \
 
     select-vlan=1,21,22,23 \
 
     output-port=eth17 \
 
     output-port=eth17 \
     -- set Bridge br0 mirrors=@m
+
     -- set Bridge sw0 mirrors=@m
 
</pre>
 
</pre>
  
Zeile 120: Zeile 119:
  
 
=== Nutzung ===
 
=== Nutzung ===
* An ''eth17'' wird ein IDS oder ein Analyse-System (z. B. Wireshark/tcpdump) angeschlossen
+
* An '''eth17''' wird ein IDS oder ein Analyse-System (z. B. Wireshark/tcpdump) angeschlossen
 
* Dort ist der gesamte Traffic der VLANs 1, 21, 22 und 23 sichtbar
 
* Dort ist der gesamte Traffic der VLANs 1, 21, 22 und 23 sichtbar
  
Zeile 131: Zeile 130:
  
 
SNMP-Dienst neu starten:
 
SNMP-Dienst neu starten:
* '''systemctl restart snmpd'''
+
<pre>
 +
systemctl restart snmpd
 +
</pre>
  
 
Test der SNMPv3-Abfrage:
 
Test der SNMPv3-Abfrage:
* '''snmpwalk -v3 -u ovsuser -l authPriv -a SHA -A MeinGeheimesPasswort -x AES -X NochGeheimer localhost ifDescr'''
+
<pre>
 +
snmpwalk -v3 -u ovsuser -l authPriv -a SHA -A MeinGeheimesPasswort -x AES -X NochGeheimer localhost ifDescr
 +
</pre>
  
 
== Wichtige Befehle ==
 
== Wichtige Befehle ==
Zeigt die komplette OVS-Bridge-Konfiguration (Bridges, Ports, VLAN-Tags).
+
 
 +
=== OVS-Diagnose ===
 +
 
 +
Zeigt die komplette OVS-Bridge-Konfiguration (Bridges, Ports, VLAN-Tags).
 
* '''ovs-vsctl show'''
 
* '''ovs-vsctl show'''
  
Listet alle Ports, die an der Bridge ''br0'' hängen.
+
Listet alle Ports, die an der Bridge ''sw0'' hängen.
* '''ovs-vsctl list-ports br0'''
+
* '''ovs-vsctl list-ports sw0'''
  
Zeigt Details zum Port ''eth1'' (inklusive VLAN-Tag).
+
Zeigt Details zum Port ''eth1'' (inklusive VLAN-Tag).
 
* '''ovs-vsctl list interface eth1'''
 
* '''ovs-vsctl list interface eth1'''
  
Zeigt, welche VLANs auf dem Trunk-Port ''eth0'' erlaubt sind.
+
Zeigt, welche VLANs auf dem Trunk-Port ''eth0'' erlaubt sind.
 
* '''ovs-vsctl get port eth0 trunks'''
 
* '''ovs-vsctl get port eth0 trunks'''
  
Zeigt den Zustand der Datenebene (DPIF-Interfaces, OpenFlow).
+
Zeigt den Zustand der Datenebene (DPIF-Interfaces, OpenFlow).
 
* '''ovs-dpctl show'''
 
* '''ovs-dpctl show'''
  
Zeigt die Forwarding Database (FDB), ähnlich wie bei ''show mac address-table'' auf Cisco.
+
Zeigt die Forwarding Database (FDB), ähnlich wie ''show mac address-table'' auf Cisco.
* '''ovs-appctl fdb/show br0'''
+
* '''ovs-appctl fdb/show sw0'''
 +
 
 +
Zeigt vorhandene SPAN/Mirror-Konfigurationen.
 +
* '''ovs-appctl mirror/list sw0'''
 +
 
 +
=== nmcli-Diagnose ===
 +
 
 +
Zeigt alle aktiven Verbindungen.
 +
* '''nmcli con show --active'''
  
Zeigt vorhandene SPAN/Mirror-Konfigurationen.
+
Zeigt den Status eines bestimmten Interface.
* '''ovs-appctl mirror/list br0'''
+
* '''nmcli dev status'''
  
 
=== VLAN-Konfiguration ändern ===
 
=== VLAN-Konfiguration ändern ===
Setzt ''eth1'' als Access-Port im VLAN 10 (untagged).
+
 
 +
Setzt ''eth1'' als Access-Port im VLAN 10 (untagged).
 
* '''ovs-vsctl set port eth1 tag=10'''
 
* '''ovs-vsctl set port eth1 tag=10'''
  
Setzt ''eth2'' als Trunk-Port für VLAN 10, 20 und 30 (getagged).
+
Setzt ''eth2'' als Trunk-Port für VLAN 10, 20 und 30 (getagged).
 
* '''ovs-vsctl set port eth2 trunks=10,20,30'''
 
* '''ovs-vsctl set port eth2 trunks=10,20,30'''
  
Setzt ''eth2'' als Trunk-Port, VLAN 10 untagged (native), VLAN 20 und 30 getagged.
+
Setzt ''eth2'' als Trunk-Port, VLAN 10 untagged (native), VLAN 20 und 30 getagged.
 
* '''ovs-vsctl set port eth2 tag=10 trunks=20,30'''
 
* '''ovs-vsctl set port eth2 tag=10 trunks=20,30'''
  
Entfernt VLAN-Zuweisung von ''eth1'' bzw. VLAN 20 von ''eth2''.
+
Entfernt VLAN-Zuweisung von ''eth1'' bzw. VLAN 20 von ''eth2''.
* '''ovs-vsctl remove port eth1 tag'''
+
* '''ovs-vsctl remove port eth1 tag'''
 
* '''ovs-vsctl remove port eth2 trunks 20'''
 
* '''ovs-vsctl remove port eth2 trunks 20'''
  
 
== Ergebnis ==
 
== Ergebnis ==
 
* '''eth0''' = Trunk (VLAN 1 native untagged, VLAN 21/22/23 getaggt)
 
* '''eth0''' = Trunk (VLAN 1 native untagged, VLAN 21/22/23 getaggt)
* '''eth1–eth16''' = Access-Ports (je VLAN, untagged)
+
* '''eth1–eth16''' = Access-Ports (je VLAN, untagged) — 14 für VMs, 2 Reserve
* '''eth10''' = Mirror/SPAN-Port
+
* '''eth17''' = Mirror/SPAN-Ausgang + DHCP-Uplink
 
* '''mgmt''' = Management-Port im VLAN 1 mit IP 172.26.56.2/26
 
* '''mgmt''' = Management-Port im VLAN 1 mit IP 172.26.56.2/26
* '''eth17''' = Uplink mit DHCP
 
 
* '''SNMPv3''' = Überwachung aller Interfaces möglich
 
* '''SNMPv3''' = Überwachung aller Interfaces möglich
 +
* Kein Editieren von Konfigurationsdateien nötig
  
 
== Nächste Schritte ==
 
== Nächste Schritte ==

Version vom 2. Mai 2026, 07:30 Uhr

Open vSwitch (OVS) als Cisco-ähnlicher L2-Switch mit Management-IP

Ziel

In diesem Artikel wird beschrieben, wie man unter Linux mit Open vSwitch (OVS) eine Schulungsumgebung aufbaut, die einem Cisco Catalyst oder Nexus Switch ähnelt. Funktionen im ersten Schritt:

  • bis zu 18 Interfaces (eth0–eth17)
  • VLANs (1, 21, 22, 23)
  • 1 Trunk-Port mit VLAN 1 (native untagged) + VLANs 21/22/23 getaggt
  • mehrere Access-Ports (je ein VLAN)
  • 1 Mirror-Port (SPAN)
  • SNMPv3 zur Überwachung
  • Management-IP im VLAN 1

Voraussetzungen

  • Debian 12
  • Linux-VM mit ≥ 18 Netzwerkkarten (eth0–eth17)
  • Root-Zugriff
  • In VirtualBox/KVM: alle NICs auf Promiscuous Mode: Allow All

Installation

apt update
apt install openvswitch-switch snmpd network-manager

NetworkManager als Standard-Renderer aktivieren:

systemctl enable --now NetworkManager

Interfaces per nmcli hochziehen

Die physischen Interfaces werden ausschließlich per nmcli aktiviert — kein Editieren von Konfigurationsdateien nötig. OVS übernimmt danach die komplette VLAN- und Bridge-Konfiguration.

Für jedes Interface (eth0–eth16) ein Connection-Profil anlegen und aktivieren:

for i in $(seq 0 16); do
    nmcli con add type ethernet ifname eth$i con-name eth$i \
        ipv4.method disabled \
        ipv6.method ignore \
        connection.autoconnect yes
    nmcli con up eth$i
done

Separater Uplink eth17 mit DHCP:

nmcli con add type ethernet ifname eth17 con-name eth17 \
    ipv4.method auto \
    connection.autoconnect yes
nmcli con up eth17

OVS-Bridge anlegen

ovs-vsctl add-br sw0

Trunk-Port konfigurieren (z. B. Richtung OPNsense/Router)

ovs-vsctl add-port sw0 eth0 tag=1 trunks=21,22,23 vlan_mode=native-untagged

Access-Ports konfigurieren

ovs-vsctl add-port sw0 eth1  tag=1
ovs-vsctl add-port sw0 eth2  tag=21
ovs-vsctl add-port sw0 eth3  tag=22
ovs-vsctl add-port sw0 eth4  tag=23
ovs-vsctl add-port sw0 eth5  tag=1
ovs-vsctl add-port sw0 eth6  tag=1
ovs-vsctl add-port sw0 eth7  tag=1
ovs-vsctl add-port sw0 eth8  tag=1
ovs-vsctl add-port sw0 eth9  tag=1
ovs-vsctl add-port sw0 eth10 tag=1
ovs-vsctl add-port sw0 eth11 tag=1
ovs-vsctl add-port sw0 eth12 tag=1
ovs-vsctl add-port sw0 eth13 tag=1
ovs-vsctl add-port sw0 eth14 tag=1
ovs-vsctl add-port sw0 eth15 tag=1
ovs-vsctl add-port sw0 eth16 tag=1

Management-Interface im VLAN 1

Internen OVS-Port für die Management-IP anlegen:

ovs-vsctl add-port sw0 mgmt tag=1 -- set interface mgmt type=internal

Management-IP per nmcli setzen:

nmcli con add type ethernet ifname mgmt con-name mgmt \
    ipv4.method manual \
    ipv4.addresses 172.26.56.2/26 \
    ipv4.gateway 172.26.56.1 \
    connection.autoconnect yes
nmcli con up mgmt

Mirror-Port konfigurieren (SPAN)

ovs-vsctl -- --id=@m create Mirror name=mirror0 \
     select-vlan=1,21,22,23 \
     output-port=eth17 \
     -- set Bridge sw0 mirrors=@m

Kontrolle

ovs-vsctl list Mirror

Erwartete Ausgabe (gekürzt):

  • name: mirror0
  • select-vlan: [1,21,22,23]
  • output-port: eth17

Nutzung

  • An eth17 wird ein IDS oder ein Analyse-System (z. B. Wireshark/tcpdump) angeschlossen
  • Dort ist der gesamte Traffic der VLANs 1, 21, 22 und 23 sichtbar

SNMPv3 konfigurieren

Datei /etc/snmp/snmpd.conf anpassen:

createUser ovsuser SHA "MeinGeheimesPasswort" AES "NochGeheimer"
rouser ovsuser authPriv

SNMP-Dienst neu starten:

systemctl restart snmpd

Test der SNMPv3-Abfrage:

snmpwalk -v3 -u ovsuser -l authPriv -a SHA -A MeinGeheimesPasswort -x AES -X NochGeheimer localhost ifDescr

Wichtige Befehle

OVS-Diagnose

Zeigt die komplette OVS-Bridge-Konfiguration (Bridges, Ports, VLAN-Tags).

  • ovs-vsctl show

Listet alle Ports, die an der Bridge sw0 hängen.

  • ovs-vsctl list-ports sw0

Zeigt Details zum Port eth1 (inklusive VLAN-Tag).

  • ovs-vsctl list interface eth1

Zeigt, welche VLANs auf dem Trunk-Port eth0 erlaubt sind.

  • ovs-vsctl get port eth0 trunks

Zeigt den Zustand der Datenebene (DPIF-Interfaces, OpenFlow).

  • ovs-dpctl show

Zeigt die Forwarding Database (FDB), ähnlich wie show mac address-table auf Cisco.

  • ovs-appctl fdb/show sw0

Zeigt vorhandene SPAN/Mirror-Konfigurationen.

  • ovs-appctl mirror/list sw0

nmcli-Diagnose

Zeigt alle aktiven Verbindungen.

  • nmcli con show --active

Zeigt den Status eines bestimmten Interface.

  • nmcli dev status

VLAN-Konfiguration ändern

Setzt eth1 als Access-Port im VLAN 10 (untagged).

  • ovs-vsctl set port eth1 tag=10

Setzt eth2 als Trunk-Port für VLAN 10, 20 und 30 (getagged).

  • ovs-vsctl set port eth2 trunks=10,20,30

Setzt eth2 als Trunk-Port, VLAN 10 untagged (native), VLAN 20 und 30 getagged.

  • ovs-vsctl set port eth2 tag=10 trunks=20,30

Entfernt VLAN-Zuweisung von eth1 bzw. VLAN 20 von eth2.

  • ovs-vsctl remove port eth1 tag
  • ovs-vsctl remove port eth2 trunks 20

Ergebnis

  • eth0 = Trunk (VLAN 1 native untagged, VLAN 21/22/23 getaggt)
  • eth1–eth16 = Access-Ports (je VLAN, untagged) — 14 für VMs, 2 Reserve
  • eth17 = Mirror/SPAN-Ausgang + DHCP-Uplink
  • mgmt = Management-Port im VLAN 1 mit IP 172.26.56.2/26
  • SNMPv3 = Überwachung aller Interfaces möglich
  • Kein Editieren von Konfigurationsdateien nötig

Nächste Schritte

  • Weitere VLANs hinzufügen
  • Layer-3 Routing mit OVS oder FRRouting ergänzen
  • VXLAN/EVPN mit OVN erproben