NLB – Unicast vs. Multicast, Konfiguration, Port Rules

#server edit this page

Unicast

Im Unicast Mode tauscht jeder NLB Knoten seine MAC Adresse mit der Cluster MAC Adresse aus, d.h. alle Knoten haben die gleiche “virtuelle” MAC Adresse.

Dieses Konfiguration zwingt den Switch zu “suboptimalem” Verhalten, da die selbe MAC Adresse über mehrere Switchports erreichbar ist, kann der Switch die Adresse nicht “lernen” also sie nicht in seine MAC Address Table aufnehmen und an ein Switchport binden. Alle Pakete an diese MAC Adresse werden vom Switch über alle Ports geflutet. Das führt zu überflüssiger Last am Switch und im gesamten Netzwerk.

Ein weiteres Problem ist dass die einzelnen NLB Knoten so nicht mehr miteinander kommunizieren können, dafür wird eine zusätzliche Netzwerkkarte benötigt. Aus diesem Grund wird Unicast Mode mit nur einer Netzwerkkarte nicht empfohlen.

Das Fluten von Paketen kann durch erstellen eines eigenen VLAN für die NLB Knoten vermindert werden. So werden Pakete nur innerhalb dieses VLANs geflutet und nicht über den ganzen Switch.

Multicast

Beim Multicast Mode wird jedem Konten eine Multicast MAC Adresse hinzugefügt, so dass alle Knoten mit zwei Layer2 Adressen ausgestattet sind. Das ermöglicht dem Switch das “lernen” der echten MAC Adressen und den einzelnen Knoten eine Kommunikation untereinander.

Damit ein Multicast Cluster auch erreichbar wird müssen statische ARP Einträge am Switch konfiguriert werden, denn Standardmäßig wird die Auflösung von Unicast IPs in Multicast MAC Adressen blockiert. So werden Pakete an die Multicast Adressen nur an die festgelegten Ports weitergeleitet.

Cluster im Multicast Mode können auch mit nur einer Netzwerkkarte betrieben werden, aus Performancegründen und verbessertem Management empfehle ich aber die Verwendung zweier Netzwerkkarten.

NLB Konfiguration

Wie bereits oben beschrieben muss im Unicast Mode jeder Knoten zwei Netzwerkkarten besitzen. Im Multicast Mode reicht eine Karte, allerdings ist es eine “Best Practice” zwei zu verwenden.

Als erstes muss das Feature installiert werden, ich habe hier deutsch Server, also heißt das Ding: Netzwerklastenausgleich. Das geht entweder über die GUI, oder mit “servermanagercmd –i nlb”. Auch mit PowerShell kann man Features installieren, und zwar mit dem Add-WindowsFeature cmdlet.

image

Dann werden die beiden Netzwerkkarten konfiguriert. Eine wird die Netzwerkkarte für das LAN, sie wird mit IP, Gateway und DNS Server konfiguriert. Ich habe sie in LAN umbenannt. Die zweite Netzwerkkarte wird der dedizierte Adapter für NLB. Diese wird nur mit einer IP Adresse konfiguriert.

Ich verwende im LAB 192.168.1.10 als Cluster Adresse. 192.168.1.11 und 192.168.1.12 als Adressen für die Netzwerkkarten “LAN”. Für die NLB Adapter verwende ich 192.168.1.21 und 192.168.1.22.

Wichtig ist dass man auf die Bindings achtet, d.h. der Adapter LAN muss der erste in der Auswahl sein. Die Bindings werden in den Erweiterten Netzwerkeinstellungen konfiguriert.

image

Jetzt wird mit dem NLB-Manager der Cluster erstellt. Dazu wird auf Cluster und Neu geklickt, dann wird der erste Knoten hinzugefügt:

image

Wichtig: Der dedizierte NLB Adapter wird verwendet!

Als dedizierte Adresse wird als 192.168.1.21 angezeigt, auf dieser NIC wird NLB aktiviert und die Cluster Adresse gebunden.

image

Im nächsten Fenster wird die Cluster Adresse festgelegt, ich verwende wie oben beschrieben 192.168.1.10/24.

image

Der Modus, also Unicast oder Multicast wird im nächsten Fenster konfiguriert. Außerdem wird der FQDN für den Cluster hier gesetzt. Mein Testcluster heißt nlb.ntsystems.it und läuft im Multicast Mode.

image 

Jetzt werden noch die Port Rules konfiguriert, ich akzeptiere vorläufig mal die Standardeinstellungen, dazu aber später mehr.

So, jetzt habe ich NLB mal soweit eingerichtet. Natürlich muss noch der zweite Knoten hinzugefügt werden. Dazu einfach auf den Clusternamen klicken und Host hinzufügen wählen. Wichtig auch hier wieder dass die Netzwerkkarte NLB verwendet wird, also die dedizierte Adresse 192.168.1.22.

Ist der zweite Knoten hinzugefügt und der Status im NLB Manager auf “Converged” oder “Zusammengeführt” ist der Cluster erstellt.

Allerdings ist die Konfiguration damit noch nicht fertig. Die Cluster IP ist noch nicht erreichbar. Das hat zwei Gründe, erstens muss am Switch noch der statische ARP Eintrag erstellt werden (Cisco: arp 192.168.1.10 03bf.c08a.010a). Außerdem muss IP Forwarding noch konfiguriert werden, dazu brauchen wir folgenden netsh Befehl: “netsh int ipv4 set int “NLB” forwarding=enabled”

image

NLB Port Rules

Als letzter Schritt bei der Konfiguration des Clusters werden die Port Rules konfiguriert. Standardmäßig werden einfach alle Ports (0-65535) egal ob TCP oder UDP an alle Clusterknoten weitergeleitet. Nun um die Angriffsfläche oder( “Attack Surface”) zu verringern und die Konfiguration zu optimieren sollten nur diese Ports weitergeleitet werden die auch wirklich benötigt werden. Ein weiterer Vorteil von einer eigenen Regel für jedes Protokoll ist dass man die Affinität so für jedes Port einstellen kann.

Mein NLB Cluster soll ein Webserver werden, also werde ich nur die Ports 80 und 443 weiterleiten, ich möchte die Affinität für beide Ports “Einfach” haben, es wird also die IP Adresse jedes Clients verwendet um die Affinität zu steuern.

Ich lösche also die Default Port Rule und erstelle zwei neue.

image

Die Port Rules werden entweder in den Clustereigenschaften konfiguriert, oder direkt beim erstellen des Clusters.

image

Jetzt erkennen wir einen weiteren Vorteil der Konfiguration mit zwei Netzwerkkarten: Der NLB Manager kann weiterhin mit beiden Knoten kommunizieren, obwohl ich für die Protokolle die verwendet keine Port Rules erstellt habe. Der NLB Manager verwendet für die Konfiguration die dedizierten Adressen.

Checklist

Hier die einzelnen Schritte nochmal im Überblick.

    1. Feature installieren
  1. zusätzliche Netzwerkkarte installieren
  2. Netzwerkkarten konfigurieren (IP, Bindings!)
  3. Cluster erstellen (Unicast/Multicast)
  4. Hosts hinzufügen
  5. evtl. Statische ARP Einträge
  6. IP Forwarding aktivieren (netsh int ipv4 set int “NLB” forwarding=enabled)
  7. Port Rules erstellen

 

so long!
tomt