MikroTik Switch VLAN Konfiguration

Da ich mir für mein Proxmox Cluster einen 10 GBit/s MikroTik Switch zugelegt habe, gehts nun um die Konfiguration der VLANs.
Der neue Switch wird als Trunk (Uplink) mit dem bisherigen Zyxel GS1910 Core Switch verbunden.

Inhalt

Ausgangslage

Zur Ausgangslage gibt es den Zyxel GS1910 Core Switch (nachfolgend „switch1“ genannt) und den neuen Mikrotik Switch CRS312-4C+8XG („switch2“).

Einen Teil der Portbelegung auf switch1 ist:

24681012141618202224
Admin Workstation
1357911131517192123
pfSense Gateway MGMTpfSense Gateway LANserver1Trunk switch2 auf Port T4 (combo4)
switch1 mit relevanter Port Belegung


 Auf switch1 sind folgende VLANs konfiguriert:

  • Port 1: VLANs 1 (MGMT) + 300 (SERVER) – PVID 1, Untag_pvid 
  • Port 13: VLAN 100 (LAN) – PVID 100, Untag_pvid 
  • Port 15: VLAN 300 (SERVER) – PVID 300, Untag_pvid 
  • Port 19: VLANs 1 (MGMT) + VLAN 100 (LAN) + VLAN 300 (SERVER) – PVID 100, Untag_pvid 
  • Port 22: VLAN 100 (LAN) – PVID 100, Untag_pvid

Die VLANs haben die folgenden Netze:

  • VLAN 1, MGMT, 192.168.0.0/24 
  • VLAN 100, LAN, 192.168.1.0/24 
  • VLAN 300, SERVER,192.168.3.0/24

Die folgenden Geräte hängen an den Ports:

  • Port 1: pfSense Gateway MGMT-Port, 192.168.0.1/24 (+VLAN 300, 192.168.10.1) 
  • Port 13: pfSense Gateway LAN-Port, 192.168.1.1/24 
  • Port 15: Server server1 SERVER-Port, 192.168.3.10/24 
  • Port 19: Trunk zu switch2 auf Port T4 (combo4) 
  • Port 22: Meine Admin Workstation, 192.168.1.40/24

Auf dem GS1910 Switch (switch1) funktioniert alles:

  • Der Server server1 kann sein Gateway auf 192.168.3.1 pingen 
  • Ich kann von meiner Admin Workstation den 192.168.3.40 pingen

Das Ziel ist nun den Mikrotik Switch so zu konfigurieren, dass die VLANs ebenfalls genutzt werden können.

Dazu wird der Server „server1“ umgesteckt von Port 15 auf switch1 zum Port 5 (ether5) auf switch2.

Konfiguration des Mikrotik Switches

Tipp: In der Mikrotik CLI kann man durch drücken von CTRL+X den „SAFE mode“ aktivieren.
Alles was man dann macht kann zum Schluss durch drücken von CTRL+D wieder rückgängig gemacht werden. Oder, sollte man ganz die Verbindung zum Switch verlieren, wird alles nach ca. 10 Sekunden automatisch wieder rückgängig gemacht.

Management-IP für den Switch

Der Mikrotik Switch hat einen speziellen „MGMT/Console“ Port, welcher intern auf einem Interface (nachfolgend auf „ether9“) liegt.

Damit wir den Switch später im MGMT-Netz (VLAN 1) auschliesslich auf dem speziellen „MGMT/Console“ Port und unter einer eigenen IP erreichen, erstellen wir ein virtuelles Interface auf der Bridge.

Herausfinden welcher Port der Console/MGMT Port ist:

Mit /interface ethernet print sieht man an welchem internen switch ein Port hängt:

 > /interface ethernet print
Flags: R - RUNNING; S - SLAVE
Columns: NAME, MTU, MAC-ADDRESS, ARP, SWITCH
 #    NAME     MTU  MAC-ADDRESS        ARP      SWITCH
 0 RS combo1  1500  04:F4:00:00:00:00  enabled  switch1
 1  S combo2  1500  04:F4:00:00:00:00  enabled  switch1
 2  S combo3  1500  04:F4:00:00:00:00  enabled  switch1
 3 RS combo4  1500  04:F4:00:00:00:00  enabled  switch1
 4  S ether1  1500  04:F4:00:00:00:00  enabled  switch1
 5  S ether2  1500  04:F4:00:00:00:00  enabled  switch1
 6  S ether3  1500  04:F4:00:00:00:00  enabled  switch1
 7  S ether4  1500  04:F4:00:00:00:00  enabled  switch1
 8 RS ether5  1500  04:F4:00:00:00:00  enabled  switch1
 9 RS ether6  1500  04:F4:00:00:00:00  enabled  switch1
10 RS ether7  1500  04:F4:00:00:00:00  enabled  switch1
11 RS ether8  1500  04:F4:00:00:00:00  enabled  switch1
12 R  ether9  1500  04:F4:00:00:00:00  enabled  switch2

Hier sehen wir, dass ether9 der einzige Port ist, welcher an switch2 hängt. Alle anderen hängen an switch1. Das its folglich der Console/MGMT Port.

Der Befehl /interface ethernet print detail zeigt zudem die unterstützten Geschwindikgeiten der Ports an. Der Port ether9 hat hier als einziger nur 100 MBit (advertise=10M-baseT-half,10M-baseT-full,100M-baseT-half,100M-baseT-full) – Ein sicheres Indiz dafür, dass dies der Management Port sein muss:

 > /interface ethernet print detail
Flags: X - disabled, R - running; S - slave
 0 RS name="combo1" default-name="combo1" mtu=1500 l2mtu=1584 mac-address=04:F4:00:00:00:00 orig-mac-address=04:F4:00:00:00:00 arp=enabled arp-timeout=auto loop-protect=default loop-protect-status=off loop-protect-send-interval=5s loop-protect-disable-time=5m auto-negotiation=yes
      advertise=10M-baseT-half,10M-baseT-full,100M-baseT-half,100M-baseT-full,1G-baseT-full,1G-baseX,2.5G-baseT,2.5G-baseX,5G-baseT,10G-baseT,10G-baseSR-LR,10G-baseCR tx-flow-control=off rx-flow-control=off bandwidth=unlimited/unlimited switch=switch1 sfp-rate-select=high sfp-ignore-rx-los=no combo-mode=auto sfp-shutdown-temperature=95C
[...]
1  S name="ether1" default-name="ether1" mtu=1500 l2mtu=1584 mac-address=04:F4:00:00:00:00 orig-mac-address=04:F4:00:00:00:00 arp=enabled arp-timeout=auto loop-protect=default loop-protect-status=off loop-protect-send-interval=5s loop-protect-disable-time=5m auto-negotiation=yes
      advertise=10M-baseT-half,10M-baseT-full,100M-baseT-half,100M-baseT-full,1G-baseT-full,2.5G-baseT,5G-baseT,10G-baseT tx-flow-control=off rx-flow-control=off bandwidth=unlimited/unlimited switch=switch1

[...]

12 R  name="ether9" default-name="ether9" mtu=1500 l2mtu=1598 mac-address=04:F4:00:00:00:00 orig-mac-address=04:F4:00:00:00:00 arp=enabled arp-timeout=auto loop-protect=default loop-protect-status=off loop-protect-send-interval=5s loop-protect-disable-time=5m auto-negotiation=yes advertise=10M-baseT-half,10M-baseT-full,100M-baseT-half,100M-baseT-full
      tx-flow-control=off rx-flow-control=off bandwidth=unlimited/unlimited switch=switch2

Mit diesen Angaben können wir nun den Management Port (ether9) dediziert zum Management des Switches konfigurieren:

# Interface erstellen
/interface list add name=OOB-MGMT comment="Local-Console Port - ether9 only"

# Den MGMT Port (ether9) zum OOB-MGMT Interface hinzufügen
/interface list member add interface=ether9 list=OOB-MGMT

# Discovery nur noch auf dem MGMT-Port erreichbar machen
/ip neighbor discovery-settings set discover-interface-list=OOB-MGMT

# Nur auf Ports in der Liste 'OOB-MGMT' darf WinBox genutzt werden
/tool mac-server set allowed-interface-list=OOB-MGMT
/tool mac-server mac-winbox set allowed-interface-list=OOB-MGMT

# Dem Management Interface eine IP zuweisen
/ip address add address=192.168.0.6/24 comment="Dedicated MGMT ether9" interface=ether9 network=192.168.0.0

# DHCP Client auf dem Switch deaktivieren
/ip dhcp-client add disabled=yes interface=bridge

# Die default zuweisung löschen
# ACHTUNG: Ab hier muss auch tatsächlich ein Kabel am MGMT-Port hängen!
/ip address remove [find comment="defconf"]


# Namen vergeben
/system identity set name=switch2

# Uhr einstellen
/system clock set time-zone-name=Europe/Zurich

/ sollte jetzt nur noch eine IP auf ether9 anzigen:

/ip address print
Columns: ADDRESS, NETWORK, INTERFACE
# ADDRESS      NETWORK   INTERFACE
;;; Dedicated MGMT ether9
0 192.168.0.6/24  192.168.0.0  ether9

Zum Schluss sollte in der CLI noch geprüft werden, ob ether9 wirklich NICHT in der Bridge ist (denn nur dann bleibt er vom Filtering unberührt):

/interface bridge port print where interface=ether9

Wenn hier kein Ergebnis kommt: Perfekt! ether9 ist eigenständig und sicher.

Interface Listen

Als logische Gruppierung für die Sicherheit macht es Sinn einzelne Portgruppen in Listen zu verwalten.
Diese Listen sind Container. Sie enthalten keine Daten, sondern dienen als „Tags“ für die Ports.

MikroTik hat eine eingebaute Liste namens *static. Dort landet automatisch alles, was kein dynamisches Interface (wie ein VPN-Tunnel oder ein dynamisches VLAN) ist. In der Praxis sind aber die selbst erstellten Listen (LAN, TRUNK, OOB-MGMT) viel wichtiger.

Default Listen löschen

Standardmässig kommt der Switch mit den vorkonfigurierten Listen „LAN“ und „WAN“, wobei „WAN“ den ersten Port belegt und „LAN“ die restlichen:

> /interface list member  print
Columns: LIST, INTERFACE
 # LIST  INTERFACE
 0 WAN   ether1
 1 LAN   ether2
 2 LAN   ether3
 3 LAN   ether4
 4 LAN   ether5
 [...]

Das mag für einen „Wohnzimmer-Switch“ passend sein. Aber im professionellen Einsatz ist es oft besser diese Liste zu löschen und eigene zu definieren (z.B. pro VLAN):

/interface list member remove [find list=WAN]
/interface list member remove [find list=LAN]

/interface list remove [find name=WAN]
/interface list remove [find name=LAN]

# Oder alternativ alle Listen auf einmal löschen:
/interface list member remove [find]
/interface list remove [find]

Empfohlene Strategie für den Switch:

ListeInhalt (Member)Zweck
LANAlle Access-Ports (ether1-5)Standard-Traffic, Erreichbarkeit für Clients.
TRUNKDer Trunk/Uplink (combo4)Identifikation, wo das „Internet“ herkommt.
OOB-MGMTNur Management-KonsoleExtrem wichtig: Nur hier ist WinBox/SSH Zugriff erlaubt.

Die Port-Grundlagen (PVIDs)

Wir definieren zuerst, welches VLAN an welchem Port „ungetaggt“ ankommt. Das ist die Eingangslogik.

  • Trunk (combo4): PVID 100 (da der Zyxel das LAN untagged schickt).
  • Server (ether5): PVID 300 (für den SERVER-Traffic).
/interface bridge port
set [find interface=combo4] pvid=100
set [find interface=ether5] pvid=300

Die VLAN-Tabelle (Egress-Logik)

Jetzt legen wir fest, wie die Pakete den Switch wieder verlassen. Hier verknüpfen wir die „Tagged“ und „Untagged“ Ports.

/interface bridge vlan
# VLAN 100: Untagged am Trunk
add bridge=bridge untagged=combo4 vlan-ids=100

# VLAN 300: Tagged am Trunk, Untagged zum Server
add bridge=bridge tagged=combo4 untagged=ether5 vlan-ids=300

Zusätzliche Sicherheitseinstellungen

Mittels frame-types kann für jeden Port definiert werden welche Art von Traffic (getaggt oder ungetaggt) überhaupt in die Bridge eintreten darf:

WertBedeutung
admit-all (Default)Der Port akzeptiert alles. Pakete ohne Tag (untagged) landen im VLAN der pvid. Pakete mit einem Tag (z.B. VLAN 100) werden verarbeitet, wenn das VLAN auf dem Port erlaubt ist.
admit-only-untaggedDer Port akzeptiert nur Pakete ohne VLAN-Tag. Wenn ein Gerät versucht, selbst getaggte Pakete zu senden, werden diese sofort verworfen.
admit-only-vlan-taggedDer Port akzeptiert nur Pakete, die bereits einen VLAN-Tag haben. Typisch für Uplinks/Trunks zu anderen Switchen.

Für Access-Ports (Endgeräte) macht es Sinn das VLAN tagging vom Client zu verbieten.

Es ist eine Best Practice für die Netzwerksicherheit:

  • Schutz vor VLAN-Hopping: Ein Angreifer könnte versuchen, eigene VLAN-Tags zu senden, um in andere Netze zu gelangen. Mit admit-only-untagged werden solche Versuche einfach ignoriert.
  • Sauberkeit: Es stellt sicher, dass ein Port genau das tut, wofür er gedacht ist. Ein IPMI-Port oder ein Büro-LAN-Port sollte niemals getaggten Traffic von einem Endgerät erhalten.

Achtung: Für deinen Trunk-Port (z.B. combo4), über den mehrere VLANs getaggt reinkommen, darf man das nicht setzen. Dort muss entweder admit-all oder admit-only-vlan-tagged stehen.

Auf der Konsole findet sich diese Einstellung unter /interface bridge port:

Beispiel für ether5 (Server Port):

/interface bridge port set [find interface=ether5] frame-types=admit-only-untagged

Beispiel für combo4 (Trunk Port):

# Default, muss nicht gesetzt werden wenn zuvor nicht verändert
/interface bridge port set [find interface=combo4] frame-types=admit-all

Das „Scharfschalten“ (VLAN Filtering)

Bis hierhin hat der Switch die Regeln zwar gespeichert, wendet sie aber noch nicht an. Sobald wir diesen Befehl absetzen, wird die VLAN-Logik in den Switch-Chip geschrieben.

Tipp: Nutze hierfür am besten weiterhin den Safe Mode (CTRL+X), falls du noch über einen betroffenen Port verbunden bist.

/interface bridge set bridge vlan-filtering=yes

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert