Netzwerkadapter und Serverdienste mit der PowerShell verwalten
Auf Kommando verbunden
von Thomas Joos
Veröffentlicht in Ausgabe 01/2021 - SCHWERPUNKT
Netzwerkadapter und IP-Einstellungen sowie alle dazugehörigen Aktionen können mittlerweile problemlos und umfassend mit der PowerShell konfiguriert werden. Die Vorteile dabei liegen auf der Hand: Anstatt in der grafischen Oberfläche zu jonglieren, lassen sich viele Einstellungen scripten, zum Beispiel bei der Bereitstellung von Windows.
Die Netzwerkeinstellungen in Windows lassen sich wie viele andere Settings mit der PowerShell einrichten. Das gilt für Core-Server ebenso wie für Windows-Server mit grafischer Oberfläche und Arbeitsstationen mit Windows 10. Dank Skripten automatisieren Sie zudem zahlreiche Einstellungen bei Bedarf und sparen sich so einigen Konfigurationsaufwand.
Mit dem kostenlosen PowerShell-Skript "ipcalc" [1] etwa erhalten Sie Informationen zu einem Subnetz. Das Skript zeigt die Netzwerk-ID, die erste Host-Adresse, die letzte Host-Adresse, die Broadcast-Adresse und weitere Informationen an.
Informationen zu Netzwerkadaptern
Die Einstellungen von Netzwerkadaptern erhalten Sie mit Get-NetAdapter. Zur Verwaltung der Netzwerkeinstellungen nützliche Informationen bekommen Sie zudem mit dem Cmdlet Get-NetIPInterface. Einstellungen, die Netzwerkadapter betreffen, steuern Sie entsprechend mit Set-NetIPInterface. So deaktivieren Sie zum Beispiel DHCP für einen Adapter:
Die Netzwerkeinstellungen in Windows lassen sich wie viele andere Settings mit der PowerShell einrichten. Das gilt für Core-Server ebenso wie für Windows-Server mit grafischer Oberfläche und Arbeitsstationen mit Windows 10. Dank Skripten automatisieren Sie zudem zahlreiche Einstellungen bei Bedarf und sparen sich so einigen Konfigurationsaufwand.
Mit dem kostenlosen PowerShell-Skript "ipcalc" [1] etwa erhalten Sie Informationen zu einem Subnetz. Das Skript zeigt die Netzwerk-ID, die erste Host-Adresse, die letzte Host-Adresse, die Broadcast-Adresse und weitere Informationen an.
Informationen zu Netzwerkadaptern
Die Einstellungen von Netzwerkadaptern erhalten Sie mit Get-NetAdapter. Zur Verwaltung der Netzwerkeinstellungen nützliche Informationen bekommen Sie zudem mit dem Cmdlet Get-NetIPInterface. Einstellungen, die Netzwerkadapter betreffen, steuern Sie entsprechend mit Set-NetIPInterface. So deaktivieren Sie zum Beispiel DHCP für einen Adapter:
Noch ausführlichere Informationen erhalten Sie mit Get-NetAdapterAdvancedProperty. Den ARP-Zwischenspeicher zeigt die PowerShell mit Get-NetNeighbor an. Hier sehen Sie die MAC-Adresse, aber auch die IP-Adressen. Um alle IP-Adressen eines Computers anzuzeigen, verwenden Sie den folgenden Befehl:
Die Cmdlets New-NetIPAddress und Get-NetIPConfiguration gehören zu den wichtigsten für die Netzwerkeinstellungen. Ein Beispiel für die Einrichtung von IP-Adressen samt Gateway lautet:
Um alle IP-Informationen anzuzeigen, verwenden Sie Get-NetIPConfiguration -All und Get-NetIPConfiguration -Verbose. Die aktuellen Netzwerkverbindungen und verwendeten Ports erhalten Sie mit Get-NetTCPConnection, die aktiven Verbindungen sehen Sie mit dem Cmdlet Get-NetTCPConnection -State Established. Auf diesem Weg lesen Sie auch die TCP-Verbindungen zum Internet aus: Get-NetTCPConnection -AppliedSetting Internet. Sie können IP-Adressen natürlich auch wieder aus der Konfiguration entfernen, zum Beispiel mit:
Die zugewiesenen IP-Adressen zeigen Sie auch mit dem Cmdlet Get-NetIPAddress an. Natürlich lässt sich die Ausgabe der ganzen Get-Cmdlets auch formatieren, indem Sie die Daten per Pipe an das Cmdlet Format-Table übergeben: Get-NetIPAddress | Format-Table oder abgekürzt mit Get-Net-IPAddress | ft. Um nur die IP-Adresse eines einzelnen Adapters anzuzeigen, müssen Sie dessen Interfaceindex angeben. Dazu nutzen Sie Get-NetIPAddress -InterfaceIndex 12. Den hierfür nötigen Wert erhalten Sie wiederum mit Get-NetAdapter.
Eine erfolgreiche Verbindung ins Internet funktioniert nur mit eingetragenen DNS-Servern. Die zugehörigen Einstellungen nehmen Sie mit folgenden Befehlen vor. So tragen Sie DNS-Server mit
Das Cmdlet Set-DnsClientServerAddress -InterfaceIndex 12 -ResetServer wechselt zu DHCP. Achten Sie darauf, jeweils die korrekte Indexnummer für den Netzwerkadapter zu verwenden. Diese erhalten Sie mit Get-NetIPConfiguration. Auch die Routen spielen in diesem Zusammenhang eine wichtige Rolle. Diese sehen Sie in der PowerShell mit Get-NetRoute. Auch hier gestalten Sie die Anzeige mit Get-NetRoute | Format-List -Property * übersichtlicher. Natürlich können Sie Routen auch konfigurieren, zum Beispiel mit Set-NetRoute:
Mit der PowerShell können Sie auch Verbindungen zwischen Computern überprüfen. Hier bietet die PowerShell mehr Möglichkeiten als der häufig verwendete Ping-Befehl. Mit Test-NetConnection prüfen Sie Netzwerkverbindungen, wobei das Cmdlet auch offene Ports testet. Ein Beispiel für den Befehl lautet:
Test-NetConnection dc01 -port 135
Hier überprüfen Sie, ob auf dem Server dc01 der Port 135 geöffnet ist. Mit dem Cmdlet Test-Connection -DiagnoseRouting testen Sie auf einem Server das Routing. Dabei lassen sich mit Test-Connection auch mehrere Rechner auf einmal und von den Quellrechnern aus mehrere Zielrechner testen.
In der PowerShell überprüfen Sie auch Netzwerkverbindungen und -daten.
Dadurch stellen Sie relativ schnell fest, wo im Netzwerk Verbindungsprobleme vorhanden sind. So können Sie mit Test-Connection eine Liste von Computern angeben, die Sie überprüfen möchten, und hier auch gleich die Ziele definieren:
Sie können aber auch nur einen Rechner lokal testen, indem Sie Test-Connection <Name oder IP-Adresse> verwenden. Der noch mächtigere Nachfolger des Cmdlets heißt übrigens Test-NetConnection.
Rechner remote steuern
Es gibt zahlreiche Cmdlets, die Sie lokal starten, die aber Befehle auf Remote-Computern ausführen können. Sie sehen die Cmdlets, indem Sie überprüfen, ob die Option "-ComputerName" für das Cmdlet verfügbar ist. Mit Get-Help * -Parameter ComputerName zeigen Sie diese Befehle an. Möchten Sie von einer lokalen PowerShell-Sitzung über das Netzwerk Programme auf einem Remotecomputer starten, verwenden Sie zum Beispiel
Zur Überprüfung von Netzwerkkonfigurationen gehört auch der Test der Namensauflösung. Meistens kommt hier nslookup zum Einsatz. Die PowerShell bietet natürlich ebenfalls Möglichkeiten dazu. Möchten Sie eine Namensauflösung für einen Computer mit allen Host-Einträgen, TTL und IP-Adressen durchführen, geben Sie Resolve-DnsName <Name des Computers> ein. Resolve-DnsName -type all <DNS-Zone> zeigt Informationen zur DNS-Zone an.
Um den Namen eines Computers auf Basis seiner IP-Adresse aufzulösen, verwenden Sie Resolve-DnsName <IP-Adresse>. Sie können mit dem Cmdlet auch DNS-Namen über das Internet auflösen, zum Beispiel mit Resolve-DnsName www.google.de. Um nur die IPv4-Adressen anzuzeigen, nutzen Sie (Resolve-DnsName www.google.de).ip4address.
In der PowerShell können Sie auch die externe IP-Adresse Ihres Netzwerks im Internet abfragen und in einer Variablen speichern. Das hilft beim Erstellen von Skripten natürlich deutlich. Der Befehl dazu sieht zum Beispiel folgendermaßen aus: Mit $ip = Invoke-RestMethod http:// ipinfo.io/json | Select -exp ip speichern Sie die externe IP-Adresse des Netzwerks in der Variablen "$ip". Die Eingabe von "$ip" gibt die Adresse aus.
In der PowerShell zeigen Sie mit Get-DnsClientCache den DNS-Cache an und löschen diesen wiederum mit Clear-DnsClientCache. Um auf einem Windows-Computer den verwendeten DNS-Server anzuzeigen, verwenden Sie das Cmdlet Get-DNSClientServerAddress.
DNS absichern
Mit der PowerShell können Sie DNS vor Angriffen absichern und stabiler betreiben. Die PowerShell ermöglicht das Erstellen von Richtlinien in DNS, mit denen Sie genauer steuern, wie Clients Anfragen an DNS stellen und welche Antworten die DNS-Server liefern. Richtlinien für DNS können mit Windows Server 2016 und 2019 genutzt werden.
Auf den Seiten "Neues in DNS-Server unter Windows Server" [2] und "DNS-Richtlinien (Übersicht)" [3] beschreibt Microsoft die Richtlinien und deren Möglichkeiten. Windows Server 2016 und 2019 können zudem Schutz vor Denial-of-Service-Attacken bieten. Dazu kommt das Response Rate Limiting (RRL) zum Einsatz. Ohne Richtlinien beantworten DNS-Server ansonsten alle Anfragen, die den DNS-Server durch die Firewall von außen erreichen oder die Clients im Netzwerk an den Server stellen.
Die aktuellen Serverversionen ermöglichen das Erstellen von Filtern, zum Beispiel auf Basis des Subnetzes der Clients. Auch viele andere Filtermöglichkeiten lassen sich erstellen, etwa auf Basis der IPv4- und IPv6-Anfragen, Netzwerkadapter, Uhrzeit, um einige Beispiele zu nennen. Mit Richtlinien können die Zonen in DNS unterschiedlich geschützt werden. So lässt sich unter anderem verhindern, dass Clients alle Daten einer Zone abfragen. Hier unterscheiden die Richtlinien zwischen internen und externen Clients.
Die gewünschten Richtlinien erstellen Sie mit der PowerShell mit dem Cmdlet Add-DnsServerQueryResolutionPolicy:
Eine Blockieren von Anfragen erreichen Sie mit dem Parameter "-Action IGNORE". Richtlinien zum Genehmigen von Anfragen erstellen Sie mit dem Parameter "-Action ALLOW". Weitere Cmdlets in diesem Bereich sind
- Get-DnsServerQueryResolutionPolicy
- Remove-DnsServerQueryResolutionPolicy
- Set-DnsServerQueryResolutionPolicy
- Add-DnsServerClientSubnet
- Get-DnsServerClientSubnet
- Add-DnsServerZoneScope
- Add-DnsServerResourceRecord
- Set-DnsServerRecursionScope
- Add-DnsServerZoneTransferPolicy
Das Cmdlet Get-DnsServerQueryResolutionPolicy zeigt die erstellten Richtlinien auf einem Server an. Löschen lassen sich Richtlinien mit Remove-DnsServerQueryResolutionPolicy. Richtlinien können natürlich nachträglich angepasst werden. Dazu dient das Cmdlet Set-DnsServerQueryResolutionPolicy. Das Filtern von Abfragen ist auch auf Basis von Subnetzen möglich. Diese erstellen Sie mit Add-DnsServerClientSubnet:
Die erstellten Subnetze lassen Sie sich mit Get-DnsServerClientSubnet anzeigen.
Response Rate Limiting: Schutz vor Denial of Service
DNS-Server können Sie wie erwähnt vor Denial-of-Service-(DoS)-Attacken schützen. Dazu nutzen Sie in Windows Server die Funktion Response Rate Limiting (RRL). Sie legen auf Basis dieser Technik fest, wie viele Anfragen ein Server pro Sekunde beantwortet. Mit RRL steuern Sie auch, wie viele Fehler pro Sekunde erlaubt sind oder wie viel Zeit zwischen den Abfragen vergehen muss, bevor ein Client erneut eine Abfrage senden kann. Zusätzlich lassen sich auch Limits für Clients definieren.
Das Cmdlet Get-DnsServerRRL zeigt Ihnen die Einstellungen für RRL auf einem DNS-Server an. Einstellungen passen Sie mit dem Cmdlet Set-DnsServerRRL an. Sie sehen über "Mode", ob der Dienst gestartet (Enable) oder inaktiav ist (Disable).
Nach dem Einrichten von DNS ist RRL auf einem DNS-Server noch nicht aktiviert. Standardmäßig ist RRL in Windows Server 2016 und 2019 inaktiv.
Mit RRL lässt sich auch nur eine Protokollierung aktivieren. Das hilft zunächst dabei, die richtigen Einstellungen für RRL zu finden. Bei aktivierter Protokollierung werden die RRL-Filter zwar angewendet, aber nur protokolliert:
Set-DNSServerRRL -Mode LogOnly
Um mit RRL auch gefilterte Anfragen aktiv zu filtern, verwenden Sie:
Set-DNSServerRRL -Mode Enable
DHCP mit der PowerShell steuern
Mit der PowerShell können Sie konfigurieren, dass IP-Clients ihre IP-Adresse von einem DHCP-Server erhalten. Auf der anderen Seite dieses Vorgangs lassen sich mit der PowerShell auch DHCP-Server steuern. Das Cmdlet Set-DnsClientServerAddress -InterfaceIndex 12 -ResetServer legt fest, dass ein Client seinen verwendeten DNS-Server über DHCP bekommt. Um DHCP-Server in Active Directory zu autorisieren, verwenden Sie den folgenden Befehl:
Informationen zu einem DHCP-Server können Sie mit dem Cmdlet Get-DhcpServerSetting -ComputerName <DHCP-Server> anzeigen lassen. Auch Daten zur DHCP-Datenbank fragen Sie über die PowerShell ab: Get-DhcpServerDatabase -ComputerName <DHCP-Server>. Das gilt ebenso für Statistiken im laufenden Betrieb mit Get-DhcpServerv4Statistics -ComputerName <DHCP-Server> und für Statistiken für bestimmte Adressbereiche: Get-DhcpServerv4ScopeStatistics.
Für Administratoren von DHCP-Servern spielt es natürlich auch eine große Rolle, ob ein DHCP-Server noch über freie IP-Adressen in seinen Bereichen verfügt. Die Abfrage dazu führen Sie mit dem Cmdlet Get-DhcpServerv4FreeIPAddress durch. Möchten Sie in der PowerShell für einen Bereich die vergebenen IP-Adressen anzeigen, verwenden Sie:
Auch die DHCP-Filter und Reservierungen zeigt die PowerShell an. Dazu stehen die Cmdlets Get-DhcpServerv4Reservation und Get-DhcpServerv4Filter zur Verfügung. Alle autorisierten DHCP-Server erhalten Sie mit dem Cmdlet Get-DhcpServerInDC. Mit der PowerShell lassen sich auch Einstellungen für DNS-Zonen und Clients konfigurieren, wie die dynamische Registrierung von DNS-Clients. Möchten Sie festlegen, dass ein DHCP-Server dynamische DNS-Updates für Clients durchführt, verwenden Sie:
Diese Einstellung wird auf Serverebene festgelegt und gilt daher für alle Zonen. Für das Eintragen von Daten auf einem DNS-Server benötigt der DHCP-Server auch entsprechende Rechte:
Zur Verwaltung eines DHCP-Servers gehört es über kurz oder lang auch, Analysen durchzuführen, um festzustellen, ob der Server noch funktioniert. Neben der PowerShell stehen hier auch Befehlszeilen-Tools zur Verfügung, die natürlich ebenfalls in PowerShell-Skripte eingebunden werden können. Das kostenlose Microsoft-Tool DHCPLOC Utility [4] kann ohne Installation über die Befehlszeile schnell und einfach den Datenverkehr zu DHCP-Servern überprüfen. Mit dhcploc.exe stellen Sie innerhalb weniger Sekunden fest, welche DHCP-Server es im Netzwerk gibt und ob autorisierte DHCP-Server falsche IP-Adressen im Netzwerk verteilen. Ein weiteres Tool in diesem Bereich ist "dhcptest.exe" [5].
Hyper-V-Netzwerkeinstellungen
Mit der PowerShell können Sie auch Netzwerkeinstellungen von Hyper-V steuern, um beispielsweise das Switch Embedded Teaming zu aktivieren. Mit dem folgenden Befehl erstellen Sie einen virtuellen Switch auf Basis eines Netzwerkteams mit der Bezeichnung SETSwitch aus drei Netzwerkadaptern:
Informationen zum virtuellen Netzwerk-switch zeigt die PowerShell mit dem Cmdlet Get-VMSwitch an, ausführlichere Informationen zum Team mit dem Cmdlet
Get-VMSwitchTeam <Name>. Löschen lassen sich solche Switches mit Remove-VMSwitch. Geht es um die Einrichtung von virtuellen Netzwerken, bietet sich in Hyper-V mit Windows 10 und Windows Server 2016/2019 auch NAT an.
Mit internen Switches konfigurieren Sie unter Windows 10 und Windows Server 2016/2019 NAT-Umgebungen mit der PowerShell. Um einen NAT-Switch zu erstellen, eignet sich die PowerShell besonders, da Sie hier alle notwendigen Aufgaben vornehmen können. Im ersten Schritt erstellen Sie einen internen Switch, der später für die NAT-Konfiguration verwendet wird:
Die IP-Adresse des NAT-Gateway ist frei wählbar. In diesem Beispiel lautet die IP-Adresse 192.168.0.1. Als Subnetzprefix verwenden wir 24 (255.255.255.0). Den Wert für den "InterfaceIndex" erhalten Sie mit Get-NetAdapter. Anschließend erstellen Sie das NAT-Netzwerk mit dem Cmdlet New-NetNAT:
Informationen zu den Einstellungen erhalten Sie mit Get-NetNat. Um die Konfiguration wieder zu löschen, verwenden Sie Remove-NetNat. Haben Sie in Hyper-V einen NAT-Switch erstellt, können Sie dem Switch VMs zuweisen. Hier bietet es sich zudem an, mit NAT-Forwarding zu arbeiten, indem Sie das Cmdlet Add-NetNatStaticMapping verwenden:
Informationen zu virtuellen Switches gibt die PowerShell mit Get-VMSwitch aus. Sie können sich die Einstellungen der virtuellen Netzwerkkarten mit dem folgenden Befehl anzeigen lassen:
Get-VMNetworkAdapter -VMName <Name des virtuellen Servers> |fl
Mit diesem Cmdlet erhalten Sie zudem die MAC-Adressen und IP-Adressen der virtuellen Server auf dem Hyper-V-Host. In der PowerShell besteht daneben die Möglichkeit, das Ergebnis einer Get-Abfrage an ein anderes Cmdlet zu übergeben. Zum Auslesen der IP-Adressen und Netzwerkdaten können Sie das Cmdlet Get-VMNetworkAdapter verwenden. Möchten Sie zum Beispiel aus allen virtuellen Servern die IP-Adressen auslesen, rufen Sie wieder mit Get-VM die virtuellen Server eines Hosts ab und übergeben das Ergebnis an Get-VMNetworkAdapter.
Anschließend lässst sich das Ergebnis noch filtern und nur die IP-Adressen der virtuellen Server anzeigen. Dazu verwenden Sie den Befehl Get-VM | foreach{(Get-VMNetworkAdapter $_).IPAddresses}. Mit dem Zusatz "foreach" liest der Befehl nacheinander die gewünschten Daten aller VMs aus und zeigt diese an. Mit dem Befehl lesen Sie aber nicht nur die IP-Adressen der virtuellen Server auf einem lokalen Hyper-V-Host aus, sondern können auch Hosts im Netzwerk abfragen. Dazu nutzen Sie den Befehl
Get-VM -computername <Name des Hyper-V-Hosts> | foreach{(Get-VMNetworkAdapter $_).IPAddresses}.
Informationen zu Hyper-V auslesen
Geben Sie in der PowerShell Get-Command -Module Hyper-V ein, erhalten Sie eine Liste der verfügbaren Cmdlets zu Hyper-V. Besonders wichtig in diesem Zusammenhang ist das Cmdlet Get-VM. Eine Liste aller erstellten virtuellen Server eines Hyper-V-Hosts rufen Sie mit Get-VM ab. Mit der Option "|fl" erhalten Sie weiterführende Informationen. Alternativ verwenden Sie "|ft". Sie erhalten so auch Echtzeitdaten, also auch den zugewiesenen Arbeitsspeicher, wenn Sie Dynamic Memory einsetzen.Sie können in der PowerShell aber nicht nur Daten von virtuellen Servern auslesen, sondern mit Get-Vmhost auch Informationen zu den Hyper-V-Hosts im Netzwerk. Ausführliche Informationen erhalten Sie auch mit diesem Cmdlet über die beiden Optionen "|fl" und "|ft". Wo die virtuellen Festplatten eines virtuellen Servers gespeichert sind, sehen Sie im Hyper-V-Manager in dessen Einstellungen im Bereich IDE-Controller oder SCSI-Controller. Sie können die virtuellen Festplatten mit den Cmdlets Get-VMIdeController, Get-VMScsiController, Get-VMFibreChannelHba und Get-VMHardDiskDrive auch in der PowerShell abfragen.
Fazit
Es gibt zahlreiche Cmdlets und PowerShell-Skripte, mit denen Sie Windows-Computer im Bereich Netzwerk konfigurieren können. Die Client-Einstellungen für Windows-Rechner lassen sich umfassend mit der PowerShell steuern. Auch Serverdienste lassen sich mit der PowerShell konfigurieren. Der Einstieg ist einfach, da bereits die Cmdlets zum Abrufen von Informationen wertvolle Hilfe bieten und deren Syntax in den meisten Fällen überschaubar ist.