Add a static route using a PowerShell cmdlet

One of the seldom-known facts about a Windows machine is that it can be configured to perform the functions of a primary router.

The Windows operating system has a built-in routing table that enables it to make routing decisions. Suppose you have a small office with a meager IT budget, or you need a primary router for a temporary network that does not require high security. In that case, you can save money by adding routing functions to an existing Windows PC or server rather than purchasing a hardware router. Then, you only need to take care of basic security and ensure that the server you’re using isn’t running short on system resources, such as disk space, memory, or CPU time.

The term routing is used to describe taking a packet from one device and sending it through the network to another device on a different network. First, the logical network address of the destination host is used to get packets through a routed network. Then the host’s hardware address (MAC address) is used to deliver the packet to the correct destination host.

The routing device learns about remote networks from adjoining routing devices or the network administrator. The routing device then builds a routing table (a map of the internetwork) that describes finding the remote networks. If a network is directly connected, the router or routing device already knows how to get to it. If a network isn’t directly related to the router, the router must use one of two ways to learn how to get to the remote network:

  • Dynamic routing: Routing information is dynamically or automatically configured or entered
  • Static routing: Routing information is manually configured or entered

This article will show you how to add static routes and implement static routing on a Windows machine using PowerShell cmdlets.

Why add Static Routes?

Most routers—including the one built into your Windows PC—use some form of dynamic routing. However, there are occasions where static routing may be used; in that case, the network administrator is responsible for manually updating all changes and adding static routes to the routing device. Here are a few occasions where you may need to implement static routes:

  • Due to security considerations, specific routes can’t be added to the default gateway device, and you require another routing device to perform certain functions. In that case, a local Windows computer can be configured to perform the required routing functions.
  • You have set up multiple subnets or VLANs on your network and need to direct traffic to a particular subnet. Static routes can be particularly useful in testing these types of environments.
  • You have two internet routers (primary and secondary) on the network, and you want to use the secondary router for sending social media and audio/video streaming services traffic (Facebook, Instagram, Twitter, YouTube, Netflix, Spotify, etc.), and the primary router for sending all other traffic.
  • You’re currently using a Windows PC as a router for your network, and you want to have better control of the routing table and the flow of traffic.in and out of your network.

What is a Routing Table?

Whenever a network device needs to send data to another device on a network, it must first know where to send it. If the network device cannot directly connect to the destination device, it has to send it via other devices along a route to the destination device. Each device needs to keep track of which way to deliver various packets of data, and for this, it uses what we call a routing table.

A routing table is analogous to a distribution map in package delivery. It is a database that keeps track of paths, like a map, and uses these to determine which way to forward traffic or when the traffic leaves a routing device—whether it’s a physical router or a PC. Therefore, it’s essential to look at your existing routing table before making changes to it. Follow the steps below to view the routing table on your Windows machine:

  1. Type “cmd” or “powershell” in the Windows search bar to locate the app.
  2. Right-click on the app and click “Run as administrator”.
  3. Once the PowerShell or Command Prompt opens, type the following command to view the routing table: route print.
output of the route print command
Figure 1.0 | Screenshot showing the output of the route print command

As you can see from the screenshot above, the IPv4 routing table consists of the following fields:

  • Network Destination: This field lists all of the network segments that the router is attached to.
  • Netmask: The Netmask column provides the subnet mask not of the network interface attached to the segment but of the segment itself. This allows the router to determine the address class for the destination network.
  • Gateway: Once the router has determined which destination network it needs to send the packet to, it looks at the gateway listing, which tells the router which IP address the packet should be forwarded through to reach the destination network.
  • Interface: The Interface column tells the router which NIC is connected to the appropriate destination network.
  • Metric: The routing metric of the path through which the packet is to be sent. The route will go in the direction of the gateway with the lowest metric.
  • Persistent Routes: Persistent routes helps to preserve the routes from being removed from the Windows operating system once it is rebooted. This contrasts to non-persistent (active) routes, which are temporary and will be erased after the system is rebooted.
Network DestinationNetmaskGatewayInterfaceMetric
0.0.0.00.0.0.0192.168.44.37192.168.43.5710
127.0.0.0255.0.0.0127.0.0.1127.0.0.11
192.168.0.0255.255.255.0192.168.0.100192.168.0.10025
192.168.0.100255.255.255.255127.0.0.1127.0.0.125

How do you add a Static Route to the Windows Routing Table?

The syntax for adding static route to a routing table in a Windows-based routing device using a PowerShell cmdlet is a follows:

New-NetRoute -DestinationPrefix <destination_network> -InterfaceIndex <interface_index> -NextHop <next_hop_ip>

The main parameters and optional parameters for the add static route syntax are described as follows:

  • DestinationPrefix: This parameter specifies the network address or IP address range of the destination network for which you want to create the static route. It can be specified in CIDR notation (e.g., 192.168.0.0/24) or as a single IP address (e.g., 10.0.0.1).
  • InterfaceIndex: This parameter specifies the index number of the network interface through which you want to route traffic for the specified destination network. You can obtain the interface index by using the Get-NetAdapter cmdlet or the Get-NetIPInterface cmdlet.
  • NextHop: This parameter specifies the IP address of the next hop or gateway for the destination network. It defines the next network hop that should be used to reach the destination network. The next hop can be a router or another device responsible for forwarding the traffic.
  • RouteMetric: This optional parameter specifies the metric value for the route. The metric is used to determine the priority of the route when multiple routes are available. Routes with lower metric values are preferred. If not specified, the metric is automatically determined based on the interface metric and other factors.
  • Publish: This optional switch parameter indicates whether the route should be published in the routing table. By default, if you do not specify this parameter, the route is automatically published. If you want to create a hidden route that is not published in the routing table, you can use -Publish:$false.
  • PolicyStore: This optional parameter specifies the network location profile in which to store the route. Valid values are ActiveStore (active network profile), PersistentStore (persistent network profile), or BootStore (boot network profile). By default, the route is added to the active network profile.

Now, to show a practical example using the above Powershell syntax, follow the steps below to create a static route to the destination 10.51.0.0 with the subnet mask of 255.255.0.0 (/16) and the interface index number 12 and a hop address of 10.23.0.1:

  1. Type ‘powershell’ in the Windows search bar to locate the PowerShell app.
  2. Right-click on the app and click Run as administrator.
  3. Once the PowerShell command prompt opens, type the following command to add the static route.
New-NetRoute -DestinationPrefix 10.51.0.0/16 -InterfaceIndex 12 -NextHop 10.23.0.1

Static route with persistent: As stated earlier, this route will only stay in the routing table until Windows is rebooted. Once that happens, the contents of the routing table will be erased. Therefore, if you want the entry to persist, you need to append -PolicyStore PersistentStore to the above Powershell command. For example, to add a persistent route to the destination 10.51.0.0 with the subnet mask of 255.255.0.0 and the next hop address of 10.23.0.1, type the following command:

New-NetRoute -DestinationPrefix 10.51.0.0/16 -InterfaceIndex 12 -NextHop 10.23.0.1 -PolicyStore PersistentStore

Static route with metric: If you want to include a  metric value for the route, you need to append --RouteMetric <metric_value> to the above Powershell command. Replace <metric_value> with the desired metric value for the route. Lower metric values indicate a higher priority for the route. For example, to add a route to the destination 10.51.0.0 with the subnet mask of 255.255.0.0, the next hop address of 10.23.0.1, and the cost metric of 10, type the following command:

New-NetRoute -DestinationPrefix 10.51.0.0/16 -InterfaceIndex 12 -NextHop 10.23.0.1 -RouteMetric 10

Static route with an interface: To add a static route using a PowerShell cmdlet with a specific network interface, you can use the -InterfaceAlias <interface_alias> parameter of the New-NetRoute cmdlet. Replace <interface_alias> with the alias or name of the network interface through which you want to route traffic. For example, if the interface you want to use has an alias of “Ethernet1”, the command would be:

New-NetRoute -DestinationPrefix 10.51.0.0/16 -InterfaceAlias "Ethernet1" -NextHop 10.23.0.1
Route Table1
Figure 2.0 | Screenshot showing existing static route entries before new addition
Route Table2
Figure 3.0 | Screenshot showing the newly added static route entries

Conclusion

This article explained how to add a static route and other vital parameters to a routing table using Powershell. If you want to see the contents of your entries, use the Get-NetRoute command to view the routing table, and you’ll see all your static route entries.

We hope this simple tutorial helps you better understand the concept of the static route and how to implement it in Windows operating systems. Once again, remember to run PowerShell as administrator when executing these commands. If you need more help, refer to the PowerShell documentation or run Get-Help New-NetRoute -Detailed in PowerShell for more detailed information and additional parameters that may be available based on your PowerShell version.