Umgehung doppelter MAC-Adressen p_intern

Version 3.1 von superadmin am 2021/09/03 11:46

Auf den Promiscuous Mode innerhalb der vSwitch-Einstellung unter VMware ESXi kann verzichtet werden, sofern man einige Anpassungen am Netzwerk-Design für den LD2.0 Server durchführt.

Kurze Erläuterung

Erst einmal zum Verständnis vom promiscuous Mode der Netzwerkkarte bzw. des VMware Switches.
Wir brauchen das eigentlich nur, da wir auf der Schnittstelle "intern" vom ldhost 2 (bis 3) verschiedene IP-Adressen haben und der Switch in VMware kann immer nur eine MAC:Port
Zuordnung pro Port.
Die drei Modi in VMware die es gibt sind:
Feste Mac (forget transmits), EINE beliebige MAC (mac address changes), allen Traffic (promiscuous mode)

Intern sind momentan immer ldhost und logosrv mit der Schnittstelle "intern" verbunden.
Je nach Konfiguration kann es noch sein, dass Rembo ebenfalls auf dieser Schnittstelle läuft.
Gründe:
ldhost hauptsächlich fürs Management
logosrv für die eigentlichen Kommunikation
rembo nur wenn kein Routing über logosrv für Rembo eingesetzt wird!

Lösungsvorschlag:
Wenn Rembo momentan die Daten noch über logosrv sendet, sollte es funktionieren, dass man auf ldhost das interface v_intern herunterfährt und den Port in
VMware von promiscuous auf "Mac address changes" setzt. Wenn man den v_intern Port auf ldhost überhaupt benötigt, kann man hierfür ein eigenes Interface in VMware erzeugen
und im ldhost einrichten.

Damit sollten Probleme die möglicherweise durch den promiscuous mode entstehen ausgeschlossen werden können.

Falls es mit dem mode "mac address changes" Probleme gibt, kann man auch die reale MAC-Adresse vom logosrv für die Schnittstelle intern festlegen.
Genaueres dazu hier:

https://www.vmware.com/support/ws55/doc/ws_net_advanced_mac_address.html

 

Im Folgenden werden die Schritte  beschrieben, um die Netzwerk-Interfaces für den ldhost sowie den logosrv-Container entsprechend anzupassen.

Wichtig: !  Diese Anleitung funktioniert nur mit der Puppet-Version 1.1.33 oder höher !

1. Netzwerk-Interfaces für die LD2.0 VM im vSphere-Client definieren

Zunächst fügt man der LD2.0 VM eine weitere virtuelle Netzwerkschnittstelle im Netzwerkbereich „intern“ hinzu.
Insgesamt sollten es also 3 Schnittstellen für die logoDIDACT VM sein / mit Nutzung von lddeploy sind es 4 Schnittstellen:

- 1.   
p_extern: für Internetzugang auf ldhost
- 2.    
intern_ldhost: für Management-Zugriff auf den ldhost vom Schulnetz aus
- 3.    
intern: physikalisch durchgereicht an den logosrv LXC-Container (derselbe Netzbereich wie intern_ldhost)

Hinweis: Eine Schnittstellen-Bezeichnung darf maximal 13 Zeichen lang sein. Siehe hierzu auch diesen Bugreport.

2a. [Ubuntu 14.04 LTS] udev-Regel im ldhost zur Definition der Schnittstellen-Bezeichnungen anpassen

Die oben aufgeführten Interfaces müssen so wie hier beschrieben in der Datei "/etc/udev/rules.d/70-persistent-net.rules" zur entsprechenden MAC-Adresse zugeordnet werden (MACs anpassen!)

# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="XX:XX:XX:XX:XX:XX", ATTR{type}=="1", KERNEL=="eth*", NAME="p_extern"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="YY:YY:YY:YY:YY:YY", ATTR{type}=="1", KERNEL=="eth*", NAME="intern_ldhost"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="ZZ:ZZ:ZZ:ZZ:ZZ:ZZ", ATTR{type}=="1", KERNEL=="eth*", NAME="intern"

2b. [Ubuntu 16.04 LTS] systemd-Regel im ldhost für aktuelle Installationen

Ab Ubuntu 16.04 LTS ist es einfacher (auch im Hinblick auf die zukünftige  Entwicklung seitens Ubuntu), für die ganze Netzwerkkonfiguration systemd-networkd zu verwenden. Nachfolgend die jeweiligen Konfigurationsdateien, die erstellt werden müssen. Gleichzeitig sollte auch die Datei /etc/udev/rules.d/70-persistent-net.rules gelöscht werden, damit nur noch eine Stelle existiert, an der konfiguriert wird.

[Match]
MACAddress=XX:XX:XX:XX:XX:XX
[Link]
Name=intern

[Match]
MACAddress=YY:YY:YY:YY:YY:YY
[Link]
Name=intern_ldhost

[Match]
MACAddress=ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
[Link]
Name=p_extern

Nach Erstellung bzw. Bearbeitung der oben beschriebenen Dateien ist noch folgender Befehl wichtig, um die Änderungen in die Initramfs zu übernehmen (wichtig für den Bootvorgang, damit die Interfaces umbenannt werden):

update-initramfs -u -k all

3. Konfigurationsänderungen im Puppeteer mittels YAML-Dateien

Nachfolgend werden zwei Anpassungen beschrieben, um die OVS-Schnittstelle v_intern auf dem ldhost zu deaktivieren sowie die Schnittstelle intern als "physical device" (d.h. das ESXi-Interface direkt) zum logosrv-Container durchzureichen.

/var/lib/ld-puppet/hiera.d/custom.d/ldhost.yaml

profile::network:
  interface:
    intern:
      ovs_type: none

/var/lib/ld-puppet/hiera.d/custom.yaml

global::network:
  overwrites:
    ldhost:
      intern:
        name: intern_ldhost
        type: phys
    logosrv:
      intern:
        type: phys

Zusätzlich kann in der vorhandenen Konfigurationsdatei nic.conf für den ldhost die nicht länger genutzte Schnittstelle p_intern auskommentiert werden.

/etc/logodidact/hosts/ldhost/nic.conf

[NIC intern]
suffix 1

#[NIC p_intern]
#vlan_mode access
#vlan_untagged ld-intern
#Type manual
#ovs_type OVSPort

Nach Änderung in dieser Datei entweder das Kommando 'map_translate' im Puppeteer ausführen oder den Verzeichnisinhalt von /etc/logodidact/ per 'git commit' abspeichern, um die Änderung zu aktivieren.

4. Shorewall Interface-Namen anpassen

Die Bezeichnung der internen Schnittstelle auf dem ldhost hat sich von v_intern auf intern_ldhost geändert. Diese neue Bezeichnung sollte im Shorewall Firewall-Dienst eingetragen werden.
Hierzu folgende beiden Befehle im ldhost eingeben.

rpl "v_intern" "intern_ldhost" /etc/shorewall/interfaces
shorewall restart

Abschließend einen Puppet-Run auf dem ldhost ausführen, um die Schnittstellenanpassungen anzuwenden gefolgt von einem Server-Reboot.

prun
/sbin/reboot