Hyper-V, Umstellung und Konfiguration von Switch Embedded Teaming (SET)

Seit Windows Server 2016 bietet Hyper-V die Möglichkeit des Switch Embedded Teaming (SET). Dieser Blog beschreibt die Umstellung eines Hyper-V Hosts (Windows Server 2019) von normalen Teaming auf SET.

  1. https://redmondmag.com/articles/2020/03/17/hyperv-switch-embedded-teaming-1.aspx
  2. https://redmondmag.com/articles/2020/03/19/hyperv-switch-embedded-teaming-2.aspx

Da in der Regel auf Hyper-V Hosts VMs aktiv sind, sollten hier einige Vorsichtsmaßnahmen ergriffen werden.

  1. Shutdown aller VMs
  2. Für den Fall, dass eine VM automatisch startet muss diese Aktion ebenfalls deaktiviert werden
  3. Anlegen oder aktivieren eines lokalen Admins, der auch funktioniert Winking smile

Im ersten Schritt werden alle mit dem zu lösenden Team verbundenen Virtual Switches auf Internal oder Private Network umgestellt, nur dann lässt sich ein bestehendes Team löschen.

image

Die Umstellung ist temporär und damit verlieren die darauf laufenden VMs ihre Verbindung ins Netzwerk und werden darum wie in Punkt 1 oben geschrieben am besten heruntergefahren.

Der PowerShell Befehlt Get-NetLbfoTeam, zeigt die vorhandenen Teams an.

image

Beide Teams (also Team Ethernet 1 und Team Ethernet 2) werden nun gelöscht und zu einem SET verbunden.

# Löschen eines Teams
Remove-NetLbfoTeam -Name "Team Ethernet 1"
Remove-NetLbfoTeam -Name "Team Ethernet 2"
# Löschen aller Teams
Get-NetLbfoTeam | Remove-NetLbfoTeam

Hier sollte klar sein, dass damit auch die Netzwerkverbindung zum Hyper-V Host verloren geht. Ist ein DHCP-Server vorhanden, werden die Adapter von diesem neue Adressen bekommen, ansonsten kann nun nur noch der Zugriff über die Konsole oder ein ILO-Board erfolgen. Siehe hier Punkt 3 oben, wir brauchen dann einen funktionierenden lokalen Administrator.

Das SET wird nun über diesen Befehl eingerichtet.

# Konfiguration eines SET Switch embedded teams
New-VMSwitch -Name "_ Network 172.16.16.0" -NetAdapterName "Ethernet","Ethernet 2","Ethernet 3","Ethernet 4" -EnableEmbeddedTeaming $true -AllowManagementOS $true

Was nicht wirklich gut aus der Microsoft Dokumentation von New-VMSwitch hervorgeht, ist die Beschreibung von –EnableEmbeddedteaming.

Bei mehr als einem Adapter, wird automatisch –EnableEmbeddedTeaming $true verwendet, bei nur einem Adapter –EnableEmbeddedTeaming $false. Soll also ein SET gebaut werden, der zu Beginn nur einen Adapter besitzt und irgendwann erweitert wird, dann muss unbedingt –EnableEmbeddedTeaming $true verwendet werden.

-AllowManagementOS $true ist notwendig, damit auch der Hyper-V Host den Adapter verwenden kann, wir also mit einem konvergierten Adapter arbeiten. Nur dann kann eine IP-Adresse darauf gebunden werden.

Danach kann mit sconfig wieder die korrekte / alte IP des Adapters gesetzt werden und im Hyper-V Manager steht dieser dann wie folgt zur Verfügung.

image

Damit sind wir fertig, leider nein … es können nämlich eine Reihe von Dingen schief gehen!

Bei einigen, nicht bei allen Umstellungen habe ich die folgende Meldung erhalten.

External Ethernet adapter ‚Intel(R) 82574L Gigabit Network Connection‘ is already bound to the Microsoft Virtual Switch protocol.

Dadurch lässt sich der Adapter nicht in das SET aufnehmen und bedarf einer zusätzlichen Behandlung. Wahrscheinlich auch mit PowerShell möglich, habe ich aber ncspbind den Vorzug gegeben.

Das Tool ist in dem folgenden KB-Artikel beschrieben:

Creating V-switches within the hyper-V environment fails

Der folgende Befehl löst dieses Problem:

nvspbind /u “AdapterName” 

Wenn ich mir nicht sicher bin, ob meine Adapter noch sauber funktionieren, gibt es die Möglichkeit diese komplett zurück zu setzen. Mit komplett meine ich komplett!!!!

netcfg –d

Danach hilft nur noch die Anmeldung über das ILO-Board und ein durchgeführter Neustart des Servers, nun kann ebenfalls der SET konfiguriert werden.

Mit einem Scanner, wie zum Beispiel dem Advanced IP-Scanner lassen sich IPs in einfach auffinden. Das Tool, habe ich bei solchen Umstellungen immer parat.

Enjoy it, b!

IPv6 Configuration OpenSuse Leap

Verwendet man eine FRITZ!Box in seinem LAN dann kann einem die schwer kontrollierbare Vergabe von IPv6-Adressen durchaus Probleme machen. Das Deaktivieren von IPv6 auf allen Windows Systemen halte ich hier für keine saubere Lösung, vielmehr habe ich mich dazu entschlossen die IPv6-Adressen selbst zu vergeben. Darüber will ich in diesem Blog aber gar nicht schreiben, sondern wie einem openSUSE Server eine funktionierende IPv6 Konfiguration eingestellt werden kann.

Eckdaten

  • IPv6 Adresse für den OpenSuse Server: fd8e:5644:167b:100a::18
  • IPv6 Adresse für den Router / Gateway: fd8e:5644:167b:100a::1
  • Interface für die Konfiguration: eth0

Konfiguration

Im Gegensatz zu Windows, ist es bei Linux möglich IP-Adressen nur zur Laufzeit zu konfigurieren oder aber statisch, damit die Konfiguration einen Neustart überlebt.

Die Konfiguration zur Laufzeit ist dabei recht einfach, benötigt aber die Rechte des SU.

# ip -6 address add fd8e:5644:167b:100a::18/64 dev eth0

# ip -6 route add default via fd8e:5644:167b:100a::1 dev eth0

Statisch erfolgt die Konfiguration wie folgt:

# cd /etc/sysconfig/network

# vi ifcfg-eth0

# hinzufügen der folgenden Zeilen ans Ende der Datei (ifcfg-eth0)
LABEL_0='0'
IPADDR_0='fd8e:5644:167b:100a::18'
PREFIXLEN_0='64'

# echo 'default fd8e:5644:167b:100a::1 - -' >> /etc/sysconfig/network/routes

Damit die Konfiguration aktiv wird, entweder den Server neu starten oder den folgenden Befehl ausführen.

# service network restart

Enjoy it, b!

Routing auf einem Hyper-V Server 2016

Mit ein paar Handgriffen kann ein Hyper-V Server zum Routen von IP bewegt werden.

Ausgangslage

  • Server mit 2 Netzwerkkarten (172.16.16.253 und 192.168.120.1)
  • Fritz!BOX für den Internet-Zugang
  • Netzwerk an der Fritz!Box ist 172.16.19.0/24, das Gateway ist immer die 1 (also die Fritz!BOX selbst)

Der Server soll IP-Pakete vom Subnetz 192.168.120.0/24 ins 172er Netzwerk übertragen, und umgekehrt sollen Datenpakete aus dem 172er Netzwerk in das 192er Netzwerk geroutet werden. Alle Hosts im 172er Netzwerk haben die Fritz!BOX selbst als Gateway eingetragen. Daher muss dieser gesagt werden, wohin Pakete mit 192.168.120.0 geroutet werden sollen, nämlich auf die IP-Adresse 172.16.16.253 welches den ersten Adapter des Servers darstellt.

Konfiguration Fritz!BOX

Dazu wird folgende Route in der Fritz!BOX eingetragen:image

Die Konfiguration erfolgt über innerhalb der Fritz!BOX:

Heimnetz / Heimnetzübersicht / Netzwerkeinstellungen / Statische Routingtabelle

Konfiguration des Hyper-V Servers mit PowerShell

Auf dem Hyper-V Server sind die beiden Netzwerk-Adapter wie folgt konfiguriert:

Ethernet 2 172.16.16.253/24 Gateway 172.16.16.1
Ethernet 4 192.168.120.1/24 Gateway 192.168.120.1

Mit PowerShell ist die Konfiguration einfach.

Im ersten Schritt schauen wir uns an, ob und welche IP-Adressen schon vergeben sind.

PS C:\Temp> Get-NetIPAddress |ft

ifIndex IPAddress                                       PrefixLength PrefixOrigin SuffixOrigin AddressState PolicyStore
------- ---------                                       ------------ ------------ ------------ ------------ -----------
6       192.168.110.1                                             24 Manual       Manual       Preferred    ActiveStore
3       172.16.16.253                                             24 Manual       Manual       Preferred    ActiveStore
4       169.254.19.2                                              16 WellKnown    Link         Preferred    ActiveStore
1       127.0.0.1                                                  8 WellKnown    WellKnown    Preferred    ActiveStore

Wir sehen, der Adapter mit dem Interface-Index 3 (ifIndex) hat eine Adresse aus dem 172er Netzwerk. Der Adapter mit dem ifIndex 4 hat noch eine APIPA-Adresse aus dem 169er Netzwerk und soll nun die IP aus dem 192er Netzwerk bekommen.

Der Name des Adapters lässt sich übrigens mit Get-NetAdapter ermitteln

PS C:\Temp> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
Ethernet 2                Microsoft Hyper-V Network Adapter #2          3 Up           00-15-5D-10-DB-00         2 Gbps
Ethernet 3                Microsoft Hyper-V Network Adapter #3          6 Up           00-15-5D-10-DB-01        10 Gbps
Ethernet                  Microsoft Hyper-V Network Adapter             4 Up           00-15-5D-10-DB-02        10 Gbps

Nun konfigurieren wir mit PowerShell die IP-Adresse aus dem 192.168.120.0 Netzwerk.

PS C:\Temp> New-NetIPAddress -InterfaceIndex 4 -IPAddress 192.168.120.1 -PrefixLength 24 -DefaultGateway 192.168.120.1


IPAddress         : 192.168.120.1
InterfaceIndex    : 4
InterfaceAlias    : Ethernet
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.120.1
InterfaceIndex    : 4
InterfaceAlias    : Ethernet
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Invalid
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : PersistentStore

Abschließend müssen wir noch die Weiterleitung von IP-Paketen aktivieren (IP-Forwarding).

PS C:\Temp> Set-NetIPInterface -InterfaceIndex 4 -Forwarding Enabled

Ich habe das auf einem relativ neuem Microsoft Hyper-V Server 2016 durchgeführt, sollte aber auch auf dem Hyper-V Server 2012 R2 und jedem anderen Windows Server funktionieren, welcher die PowerShell-Befehle unterstützt. Ansonsten ist Netsh.exe unser Freund.

Enjoy it, b!