Open Vswitch Projekt: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Open vSwitch (OVS) als Cisco-ähnlicher L2-Switch =
+
= Open vSwitch (OVS) als Cisco-ähnlicher L2-Switch mit Management-IP =
  
 
== Ziel ==
 
== 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.   
 
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:
 
Funktionen im ersten Schritt:
* 8 Interfaces (eth1–eth8)
+
* bis zu 18 Interfaces (eth0–eth17)
* VLANs
+
* VLANs (1, 21, 22, 23)
* 1 Trunk-Port mit vier VLANs (10, 20, 30, 40)
+
* 1 Trunk-Port mit VLAN 1 (native untagged) + VLANs 21/22/23 getaggt
* 4 Access-Ports (je ein VLAN)
+
* mehrere Access-Ports (je ein VLAN)
 
* 1 Mirror-Port (SPAN)
 
* 1 Mirror-Port (SPAN)
 
* SNMPv3 zur Überwachung
 
* SNMPv3 zur Überwachung
 +
* Management-IP im VLAN 1
  
 
== Voraussetzungen ==
 
== Voraussetzungen ==
 
* Debian 12 oder Ubuntu 22.04
 
* Debian 12 oder Ubuntu 22.04
* Linux-VM mit 8 Netzwerkkarten (eth1–eth8)
+
* Linux-VM mit ≥ 18 Netzwerkkarten (eth0–eth17)
 
* Root-Zugriff
 
* Root-Zugriff
 +
* In VirtualBox/KVM: alle NICs auf '''Promiscuous Mode: Allow All'''
  
 
== Installation ==
 
== Installation ==
Zeile 23: Zeile 25:
 
* '''ovs-vsctl add-br br0'''
 
* '''ovs-vsctl add-br br0'''
  
== Trunk-Port konfigurieren ==
+
== Trunk-Port konfigurieren (OPNsense) ==
* '''ovs-vsctl add-port br0 eth0 trunks=21,22,23 tag=1'''
+
* '''ovs-vsctl add-port br0 eth0 tag=1 trunks=21,22,23 vlan_mode=native-untagged'''
  
 
== Access-Ports konfigurieren ==
 
== Access-Ports konfigurieren ==
* '''ovs-vsctl add-port br0 eth2 tag=1'''
+
* '''ovs-vsctl add-port br0 eth1 tag=1'''
* '''ovs-vsctl add-port br0 eth3 tag=21'''
+
* '''ovs-vsctl add-port br0 eth2 tag=21'''
* '''ovs-vsctl add-port br0 eth4 tag=22'''
+
* '''ovs-vsctl add-port br0 eth3 tag=22'''
* '''ovs-vsctl add-port br0 eth5 tag=23'''
+
* '''ovs-vsctl add-port br0 eth4 tag=23'''
 +
* '''ovs-vsctl add-port br0 eth5 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth6 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth7 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth8 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth9 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth10 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth11 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth12 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth13 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth14 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth15 tag=1'''
 +
* '''ovs-vsctl add-port br0 eth16 tag=1'''
  
== Mirror-Port (SPAN) ==
+
== Management-Interface im VLAN 1 ==
 +
* '''ovs-vsctl add-port br0 mgmt tag=1 -- set interface mgmt type=internal'''
 +
 
 +
Datei '''/etc/network/interfaces''' anpassen:
 +
<pre>
 +
auto lo
 +
iface lo inet loopback
 +
 
 +
# physische Interfaces nur für OVS bereitstellen
 +
auto eth0
 +
iface eth0 inet manual
 +
auto eth1
 +
iface eth1 inet manual
 +
auto eth2
 +
iface eth2 inet manual
 +
auto eth3
 +
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>
 +
 
 +
=== Mirror-Port konfigurieren ===
 +
<pre>
 +
ovs-vsctl -- --id=@m create Mirror name=mirror0 \
 +
    select-vlan=1,21,22,23 \
 +
    output-port=eth17 \
 +
    -- set Bridge br0 mirrors=@m
 +
</pre>
 +
 
 +
=== Kontrolle ===
 
<pre>
 
<pre>
ovs-vsctl -- --id=@eth2 get Port eth2 \
+
ovs-vsctl list Mirror
            --id=@eth3 get Port eth3 \
 
            --id=@eth4 get Port eth4 \
 
            --id=@eth5 get Port eth5 \
 
            --id=@mirror0 create Mirror name=mirror0 \
 
                select-dst-port=@eth2,@eth3,@eth4,@eth5 \
 
                select-src-port=@eth2,@eth3,@eth4,@eth5 \
 
                output-port=eth6 \
 
            -- set Bridge br0 mirrors=@mirror0
 
 
</pre>
 
</pre>
 +
 +
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 ==
 
== SNMPv3 konfigurieren ==
Zeile 57: Zeile 135:
 
Test der SNMPv3-Abfrage:
 
Test der SNMPv3-Abfrage:
 
* '''snmpwalk -v3 -u ovsuser -l authPriv -a SHA -A MeinGeheimesPasswort -x AES -X NochGeheimer localhost ifDescr'''
 
* '''snmpwalk -v3 -u ovsuser -l authPriv -a SHA -A MeinGeheimesPasswort -x AES -X NochGeheimer localhost ifDescr'''
 +
 +
== Wichtige Befehle ==
 +
Zeigt die komplette OVS-Bridge-Konfiguration (Bridges, Ports, VLAN-Tags). 
 +
* '''ovs-vsctl show'''
 +
 +
Listet alle Ports, die an der Bridge ''br0'' hängen. 
 +
* '''ovs-vsctl list-ports br0'''
 +
 +
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 bei ''show mac address-table'' auf Cisco. 
 +
* '''ovs-appctl fdb/show br0'''
 +
 +
Zeigt vorhandene SPAN/Mirror-Konfigurationen. 
 +
* '''ovs-appctl mirror/list br0'''
 +
 +
=== 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 ==
 
== Ergebnis ==
* '''eth1''' = Trunk (VLANs 10, 20, 30, 40 getaggt)
+
* '''eth0''' = Trunk (VLAN 1 native untagged, VLAN 21/22/23 getaggt)
* '''eth2–eth5''' = Access-Ports (untagged, je VLAN)
+
* '''eth1–eth16''' = Access-Ports (je VLAN, untagged)
* '''eth6''' = Mirror/SPAN-Port
+
* '''eth10''' = Mirror/SPAN-Port
 +
* '''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
  

Aktuelle Version vom 6. Oktober 2025, 20:02 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 oder Ubuntu 22.04
  • 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

OVS-Bridge anlegen

  • ovs-vsctl add-br br0

Trunk-Port konfigurieren (OPNsense)

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

Access-Ports konfigurieren

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

Management-Interface im VLAN 1

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

Datei /etc/network/interfaces anpassen:

auto lo
iface lo inet loopback

# physische Interfaces nur für OVS bereitstellen
auto eth0
iface eth0 inet manual
auto eth1
iface eth1 inet manual
auto eth2
iface eth2 inet manual
auto eth3
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

Mirror-Port konfigurieren

ovs-vsctl -- --id=@m create Mirror name=mirror0 \
     select-vlan=1,21,22,23 \
     output-port=eth17 \
     -- set Bridge br0 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

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

  • ovs-vsctl show

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

  • ovs-vsctl list-ports br0

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 bei show mac address-table auf Cisco.

  • ovs-appctl fdb/show br0

Zeigt vorhandene SPAN/Mirror-Konfigurationen.

  • ovs-appctl mirror/list br0

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)
  • eth10 = Mirror/SPAN-Port
  • mgmt = Management-Port im VLAN 1 mit IP 172.26.56.2/26
  • eth17 = Uplink mit DHCP
  • SNMPv3 = Überwachung aller Interfaces möglich

Nächste Schritte

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