Routing Tabellen mit der PowerShell

Im letzten Blogeintrag haben wir uns angesehen, man den ipconfig Befehl aus der CMD Shell mit der PowerShell ablösen kann.

In diesem Blogeintrag schauen wir uns an, wie man den route Befehl aus der CMD Shell mit der PowerShell ablösen kann.

In der Routing Tabelle werden Regeln hinterlegt, mit denen ein Datenpaket den besten Weg zum nächsten Ziel findet. Jede Zeile in der Routing Tabelle beinhaltet folgende Informationen:

  • Die Netzadresse und Subnetzmaske (Die Definition des Netzwerkbereichs, für den die Route gilt)
  • Das Gateway (next hop - die Adresse an, die das Paket weitergeleitet wird)
  • Die Schnittstelle (das Netzwerkinterface, welches die Daten transportiert)
  • Die Metrik (Die Gewichtung der Route. Wenn mehrere Routen zum Ziel führen, wird die mit der kleinsten Metrik genutzt)

Um sich in der CMD Shell die aktuellen Routen anzeigen zu lassen, nutzt man den Befehl

route print

Um nur die IPv4 Routen zu sehen, hängt man ein -4 an

route print -4

C:\>route print -4
===========================================================================
Interface List
  5...00 15 5d be 11 1e ......Microsoft Hyper-V Network Adapter
  1...........................Software Loopback Interface 1
  3...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0  192.168.222.254   192.168.222.15    271
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
    192.168.222.0    255.255.255.0         On-link    192.168.222.15    271
   192.168.222.15  255.255.255.255         On-link    192.168.222.15    271
  192.168.222.255  255.255.255.255         On-link    192.168.222.15    271
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link    192.168.222.15    271
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link    192.168.222.15    271
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0  192.168.222.254  Default
===========================================================================

Die PowerShell hat ab der Version 4.0 einen eigenen Befehl für die Routen:

Get-NetRoute

Get-NetRoute | ft -a

ifIndex DestinationPrefix             NextHop         RouteMetric PolicyStore
------- -----------------             -------         ----------- -----------
5       255.255.255.255/32            0.0.0.0                 256 ActiveStore
1       255.255.255.255/32            0.0.0.0                 256 ActiveStore
5       224.0.0.0/4                   0.0.0.0                 256 ActiveStore
1       224.0.0.0/4                   0.0.0.0                 256 ActiveStore
5       192.168.222.255/32            0.0.0.0                 256 ActiveStore
5       192.168.222.15/32             0.0.0.0                 256 ActiveStore
5       192.168.222.0/24              0.0.0.0                 256 ActiveStore
1       127.255.255.255/32            0.0.0.0                 256 ActiveStore
1       127.0.0.1/32                  0.0.0.0                 256 ActiveStore
1       127.0.0.0/8                   0.0.0.0                 256 ActiveStore
5       0.0.0.0/0                     192.168.222.254         256 ActiveStore
5       ff00::/8                      ::                      256 ActiveStore
1       ff00::/8                      ::                      256 ActiveStore
5       fe80::f9fa:3e61:3d6d:c625/128 ::                      256 ActiveStore
3       fe80::5efe:192.168.222.15/128 ::                      256 ActiveStore
5       fe80::/64                     ::                      256 ActiveStore
1       ::1/128                       ::                      256 ActiveStore

Um dieses Ergebnis genauer anschauen zu können, leiten wir es in eine Variable um und sehen uns ein Element im Detail an

$route = Get-NetRoute
$route[0] | select *

$route = Get-NetRoute
$route[0] | select *

Publish               : No
Protocol              : Local
Store                 : ActiveStore
AddressFamily         : IPv4
ifIndex               : 5
Caption               :
Description           :
ElementName           :
InstanceID            : <??8<??8<??8<??9=<55?55:8:8:8:55;
AdminDistance         :
DestinationAddress    :
IsStatic              :
RouteMetric           : 256
TypeOfRoute           : 3
CompartmentId         : 1
DestinationPrefix     : 255.255.255.255/32
InterfaceAlias        : Ethernet
InterfaceIndex        : 5
NextHop               : 0.0.0.0
PreferredLifetime     : 10675199.02:48:05.4775807
ValidLifetime         : 10675199.02:48:05.4775807
PSComputerName        :
CimClass              : ROOT/StandardCimv2:MSFT_NetRoute
CimInstanceProperties : {Caption, Description, ElementName, InstanceID...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

In der PowerShell ist es dadurch sehr leicht möglich, nur einzelne routen zu finden. Als Beispiel möchte ich die routen von meinem lokal eingerichteten NAT Interface ausgeben lassen (mit diesem Interface können meine virtuellen Hyper-V VMs das Internet erreichen)

Suche mein NAT Interface:

Get-NetAdapter | where {$_.name -like "*nat*"} | ft -a

Get-NetAdapter | where {$_.name -like "*nat*"} | ft -a                                                                                                                                                     

Name               InterfaceDescription                ifIndex Status MacAddress        LinkSpeed
----               --------------------                ------- ------ ----------        ---------
vEthernet (NetNat) Hyper-V Virtual Ethernet Adapter #2      67 Up     00-15-5D-AA-FA-00   10 Gbps

Ok, das Interface mit "NAT" im Namen hat den Index 67

Zeige mir alle IPv4 Routen von diesem Interface mit den relevanten Informationen an:

Get-NetRoute |  Where-Object {($_.ifIndex -eq 67) -and ($_.Addressfamily -eq "IPv4")} | FT InterfaceAlias,`
AddressFamily,DestinationPrefix,NextHop,Routemetric -a

Get-NetRoute |  Where-Object {($_.ifIndex -eq 67) -and ($_.Addressfamily -eq "IPv4")} | FT InterfaceAlias,`
AddressFamily,DestinationPrefix,NextHop,Routemetric -a                                                                                                                                                          

InterfaceAlias     AddressFamily DestinationPrefix  NextHop Routemetric
--------------     ------------- -----------------  ------- -----------
vEthernet (NetNat)          IPv4 255.255.255.255/32 0.0.0.0         256
vEthernet (NetNat)          IPv4 224.0.0.0/4        0.0.0.0         256
vEthernet (NetNat)          IPv4 192.168.222.255/32 0.0.0.0         256
vEthernet (NetNat)          IPv4 192.168.222.254/32 0.0.0.0         256
vEthernet (NetNat)          IPv4 192.168.222.0/24   0.0.0.0         256

Füge für die einzelne IP 192.168.222.111 dauerhaft eine andere Route mit einer kleineren Metrik (=bevorzugt) hinzu:

New-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -NextHop 192.168.0.1 -RouteMetric 10

New-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -NextHop 192.168.0.1 -RouteMetric 10 |ft -a                                                                                         

ifIndex DestinationPrefix  NextHop     RouteMetric ifMetric PolicyStore
------- -----------------  -------     ----------- -------- -----------
67      192.168.222.111/32 192.168.0.1          10 15       ActiveStore
67      192.168.222.111/32 192.168.0.1          10          PersistentStore

Mit diesem Befehl wurde die Route beiden Stores hinzugefügt

  • ActiveStore = Aktiv bis zum nächsten Neustart
  • Persistantstore = Dauerhaft aktiv - die PersistanStore Regeln werden nach einem Neustart in den ActiveStore kopiert

Um eine temporäre Route zu setzten, die nicht bei einem Neustart weiter existiert, muss der Parameter -PolicyStore ActiveStore angefügt werden:

New-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -NextHop 192.168.0.1 -RouteMetric 10 -PolicyStore ActiveStore | ft -a

New-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -NextHop 192.168.0.1 -RouteMetric 10 -PolicyStore ActiveStore | ft -a                                                               

ifIndex DestinationPrefix  NextHop     RouteMetric ifMetric PolicyStore
------- -----------------  -------     ----------- -------- -----------
67      192.168.222.111/32 192.168.0.1          10 15       ActiveStore

Löschen der neuen Routen geht genauso einfach:

Remove-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -Confirm:$false

 Remove-NetRoute -DestinationPrefix "192.168.222.111/32"-InterfaceIndex 67 -Confirm:$false

Im nächsten Blogeintrag beschäftigen wir uns damit, wie man mit der PowerShell unter Windows 10 ein NAT Interface einrichtet.

Was denken Sie?