{"id":857,"date":"2026-10-17T09:00:00","date_gmt":"2026-10-17T09:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=857"},"modified":"2026-10-17T09:00:00","modified_gmt":"2026-10-17T09:00:00","slug":"add-additional-ipv4-windows-server-2019","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/10\/17\/add-additional-ipv4-windows-server-2019\/","title":{"rendered":"How to Add an Additional IPv4 on Windows Server 2019"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To add additional IPv4 address on Windows Server 2019, attach the provider-assigned address to the existing network adapter without disturbing the server&#8217;s primary route. The PowerShell method takes about five minutes, and the graphical method is included for Desktop Experience installations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>A VPS running Windows Server 2019 with Desktop Experience for the GUI method, or Server Core for the PowerShell method.<\/li>\n\n\n<li>RDP access with a local or domain administrator account, plus console access through the VPS control panel in case a network change interrupts RDP.<\/li>\n\n\n<li>The additional IPv4 address and its prefix length or subnet mask, supplied for this specific server. Do not invent an address or copy a gateway from another VPS.<\/li>\n\n\n<li>The existing adapter name, which you will identify in Step 1. Most installations call it <code>Ethernet<\/code>, but virtual adapters can have another name.<\/li>\n\n\n<li>A service that will use the new address, if you need to test an application binding. Adding an address alone does not open a port in Windows Defender Firewall.<\/li>\n\n\n<li>A <a href=\"https:\/\/vpslake.com\/buy-windows-rdp\">VPSLake Windows RDP server<\/a> if you need a Windows environment for this procedure.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Identify the active adapter and current addresses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finding the correct interface first prevents you from adding the address to a disconnected virtual adapter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <strong>Windows PowerShell \u2192 Run as administrator<\/strong> through RDP or the VPS console. Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetAdapter | Where-Object Status -eq \"Up\" | Format-Table ifIndex,Name,InterfaceDescription,Status\nGet-NetIPAddress -AddressFamily IPv4 | Format-Table InterfaceAlias,IPAddress,PrefixLength,PrefixOrigin,AddressState\nGet-NetRoute -AddressFamily IPv4 -DestinationPrefix \"0.0.0.0\/0\" | Format-Table InterfaceAlias,NextHop,RouteMetric,State<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Record the <code>Name<\/code> of the connected adapter and confirm which address is primary. The default route output also gives you a baseline for the existing gateway; adding a secondary address should not create another default route.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical adapter output looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ifIndex Name     InterfaceDescription                 Status\n------- ----     --------------------                 ------\n12      Ethernet Microsoft Hyper-V Network Adapter   Up<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use the values returned by your server rather than assuming the adapter is named <code>Ethernet<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Confirm the allocation details<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows needs the address boundary, not just the dotted IPv4 address, to place the new address on the correct interface.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Get the additional IP and prefix length from the VPSLake service details or support team. If the information is a subnet mask, convert it to a prefix length: for example, <code>255.255.255.0<\/code> is <code>\/24<\/code>, so the PowerShell value is <code>24<\/code>. Some routed addresses are assigned as <code>\/32<\/code>; use <code>\/32<\/code> only when that is the allocation you received.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set these variables in the elevated PowerShell window, replacing every uppercase placeholder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$InterfaceAlias = \"YOUR_INTERFACE_ALIAS\"\n$SecondaryIP = \"SECONDARY_IP\"\n$PrefixLength = [uint8](\"PREFIX_LENGTH\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>YOUR_INTERFACE_ALIAS<\/code> is the adapter name from Step 1, <code>SECONDARY_IP<\/code> is the extra address assigned to this VPS, and <code>PREFIX_LENGTH<\/code> is a number such as <code>24<\/code> or <code>32<\/code>. Do not append <code>\/24<\/code> to the address itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For an address in the same subnet as the primary IP, leave the gateway field alone. A second default gateway can cause asymmetric routing and intermittent connectivity. A separately routed subnet may need a provider-specific route; follow the route details supplied with that allocation instead of adding a gateway by guesswork.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Add the IPv4 address with PowerShell<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>New-NetIPAddress<\/code> adds a persistent unicast address to the chosen adapter while leaving the existing primary address and default route in place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run this command in the same elevated PowerShell window:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>New-NetIPAddress -InterfaceAlias $InterfaceAlias -IPAddress $SecondaryIP -PrefixLength $PrefixLength -AddressFamily IPv4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Windows returns the new address and its interface when the operation succeeds. A shortened example is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress      : SECONDARY_IP\nInterfaceAlias : Ethernet\nPrefixLength   : PREFIX_LENGTH\nPrefixOrigin   : Manual\nAddressState   : Preferred<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The command normally does not require a restart. Because this is an additional address, the current RDP session should remain connected; keep the VPS console available until verification is complete. Microsoft documents the supported parameters in the <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/module\/nettcpip\/new-netipaddress\" target=\"_blank\" rel=\"noopener\">New-NetIPAddress reference<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the command says the address already exists, stop and inspect the current entries before removing anything. Do not run the command repeatedly with a different prefix until you know which allocation is correct.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Add the address through the Windows GUI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The GUI exposes the same adapter settings and is useful when you want to review the subnet mask before saving.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <strong>Control Panel \u2192 Network and Internet \u2192 Network and Sharing Center \u2192 Change adapter settings<\/strong>. Right-click the connected <strong>Ethernet<\/strong> adapter, select <strong>Properties<\/strong>, choose <strong>Internet Protocol Version 4 (TCP\/IPv4)<\/strong>, and select <strong>Properties<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Leave the primary IPv4 address and DNS settings unchanged. Select <strong>Advanced<\/strong>, then under <strong>IP addresses<\/strong> select <strong>Add<\/strong>. Enter the additional IPv4 address and its assigned subnet mask, then select <strong>Add \u2192 OK \u2192 OK \u2192 Close<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not add a second entry under <strong>Default gateways<\/strong> for a normal additional address on the existing subnet. Keep the gateway already used by the primary configuration. If the provider supplied a routed network with explicit next-hop instructions, use those instructions rather than this standard same-subnet path.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the additional address and routing<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Verification should show the new address as preferred and the original default route still present.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In elevated PowerShell, run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 | Format-Table IPAddress,PrefixLength,PrefixOrigin,AddressState\nGet-NetRoute -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 -DestinationPrefix \"0.0.0.0\/0\" | Format-Table DestinationPrefix,NextHop,RouteMetric,State\nipconfig<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected output includes both IPv4 addresses, <code>Manual<\/code> as the new address&#8217;s <code>PrefixOrigin<\/code>, and one intended default route:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress       PrefixLength PrefixOrigin AddressState\n---------       ------------ ------------ ------------\nPRIMARY_IP      PREFIX       Dhcp        Preferred\nSECONDARY_IP    PREFIX       Manual      Preferred\n\nDestinationPrefix NextHop       RouteMetric State\n----------------- -------       ----------- -----\n0.0.0.0\/0         DEFAULT_GATEWAY 25        Active<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To prove that an application is reachable through the new address, test from another computer, not only from the server itself. Replace <code>SECONDARY_IP<\/code> and <code>SERVICE_PORT<\/code> with the address and TCP port used by your service:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-NetConnection -ComputerName SECONDARY_IP -Port SERVICE_PORT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Successful output contains:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RemoteAddress      : SECONDARY_IP\nRemotePort         : SERVICE_PORT\nTcpTestSucceeded   : True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The application must be listening on the secondary address or on all local addresses, and its inbound Windows Defender Firewall rule must allow the port. An ICMP ping failure alone does not prove the IP configuration is wrong because many servers block echo requests.<\/p>\n\n\n\n<aside class=\"vl-element vl-cta-banner\" aria-label=\"Need another Windows VPS?\">\n\t<div class=\"vl-cta-banner__content\">\n\t\t<p class=\"vl-cta-banner__eyebrow\">Windows server networking<\/p>\n\t\t<h3 class=\"vl-cta-banner__title\">Need another Windows VPS?<\/h3>\n\t\t<p class=\"vl-cta-banner__text\">Get a Windows server with administrator access for network services and additional IP addresses.<\/p>\n\t<\/div>\n\t<a class=\"vl-cta-banner__button\" href=\"\/buy-windows-rdp\" aria-label=\"View Windows RDP\">View Windows RDP<\/a>\n<\/aside>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>New-NetIPAddress<\/code> says the address already exists<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The address is already attached to this adapter, or a stale entry remains from an earlier attempt. Inspect the exact entries first:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetIPAddress -AddressFamily IPv4 | Format-Table InterfaceAlias,IPAddress,PrefixLength,PrefixOrigin,AddressState<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the address is present and shows <code>Preferred<\/code>, no second add operation is needed. If a wrong entry is confirmed and you have console access, remove only that exact address, then run Step 3 again:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Remove-NetIPAddress -InterfaceAlias \"YOUR_INTERFACE_ALIAS\" -IPAddress \"OLD_SECONDARY_IP\" -Confirm:$false<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">RDP or internet access stopped after the change<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The usual causes are an incorrect prefix length, an address not assigned to this VPS, or an extra default gateway. Open the VPS console, compare the values with the allocation, and inspect the routes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetRoute -AddressFamily IPv4 | Sort-Object DestinationPrefix | Format-Table InterfaceAlias,DestinationPrefix,NextHop,RouteMetric,State<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For a normal secondary address, remove only the incorrect secondary IP and restore the original route if you deliberately added a wrong gateway. Do not remove the primary address while connected remotely.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The new IP shows <code>Preferred<\/code>, but it is not reachable externally<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows has accepted the address, but the provider may not have routed or assigned it yet, or the service port may be blocked upstream. Confirm the address appears in the VPS service details, check any Virtualizor network or firewall settings, and test a port on which an application is actually listening.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The service works on the primary IP but not the secondary IP<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The application may be bound only to the primary address. Check its listen bindings, then configure the application to use <code>SECONDARY_IP<\/code> or all local addresses, and allow its port in Windows Defender Firewall. This is an application binding issue, not a reason to add another gateway.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetTCPConnection -State Listen | Format-Table LocalAddress,LocalPort,OwningProcess<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Hardening after the change<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Record the address, prefix, allocation purpose, and service using it so a later administrator does not remove the wrong entry.<\/li>\n\n\n<li>Keep Windows Defender Firewall enabled and permit only the application ports that need to accept traffic on the new address.<\/li>\n\n\n<li>Restrict administrative services such as RDP to trusted source addresses or a VPN where practical.<\/li>\n\n\n<li>Keep a VPS console session available before making future network changes.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need a separate gateway for an additional IPv4 address?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Usually not. When the extra address belongs to the existing interface subnet, it uses the adapter&#8217;s current default gateway, and adding another gateway can create routing problems. Use a separate route only when the provider explicitly assigns a routed subnet and gives you the required next hop.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use the additional IPv4 address for RDP?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, if the address is assigned and routed to the server and the RDP listener and firewall allow it. Test the actual RDP port from another computer after adding the address; adding the IP does not change the RDP port or bypass Windows Defender Firewall.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does <code>ping<\/code> fail even though the address is configured?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Windows may block inbound ICMP, and an upstream firewall may also ignore echo requests. Check <code>Get-NetIPAddress<\/code> and test a TCP port for the service instead of treating ping as the only verification method.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How many additional IPv4 addresses can I add?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The practical limit depends on the addresses allocated by the provider, the Windows interface, and the application using them. Add only addresses assigned to this VPS, and give each one the prefix length supplied with its allocation.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Do I need a separate gateway for an additional IPv4 address?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Usually not. When the extra address belongs to the existing interface subnet, it uses the adapter's current default gateway, and adding another gateway can create routing problems. Use a separate route only when the provider explicitly assigns a routed subnet and gives you the required next hop.\"}}, {\"@type\": \"Question\", \"name\": \"Can I use the additional IPv4 address for RDP?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes, if the address is assigned and routed to the server and the RDP listener and firewall allow it. Test the actual RDP port from another computer after adding the address; adding the IP does not change the RDP port or bypass Windows Defender Firewall.\"}}, {\"@type\": \"Question\", \"name\": \"Why does `ping` fail even though the address is configured?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Windows may block inbound ICMP, and an upstream firewall may also ignore echo requests. Check `Get-NetIPAddress` and test a TCP port for the service instead of treating ping as the only verification method.\"}}, {\"@type\": \"Question\", \"name\": \"How many additional IPv4 addresses can I add?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The practical limit depends on the addresses allocated by the provider, the Windows interface, and the application using them. Add only addresses assigned to this VPS, and give each one the prefix length supplied with its allocation.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Learn to add additional IPv4 address on Windows Server 2019 with PowerShell or the GUI, verify routing, and fix common reachability issues safely.","protected":false},"author":1,"featured_media":858,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[5,11],"tags":[81,49,38,40],"class_list":["post-857","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-windows-server","tag-ipv4","tag-networking","tag-powershell","tag-windows-server-2019","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/comments?post=857"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/857\/revisions"}],"predecessor-version":[{"id":3466,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/857\/revisions\/3466"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/858"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}