{"id":873,"date":"2026-10-19T09:00:00","date_gmt":"2026-10-19T09:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=873"},"modified":"2026-10-19T09:00:00","modified_gmt":"2026-10-19T09:00:00","slug":"add-ip-addresses-windows-server","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/10\/19\/add-ip-addresses-windows-server\/","title":{"rendered":"How to Add IP Addresses to Windows Server"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To add IP addresses to Windows Server, assign each provider-provisioned address to the correct network adapter with its existing prefix and keep the default gateway on the primary address. The PowerShell method takes about five minutes, survives a reboot, and gives you checks for duplicate addresses and missing provider-side routing.<\/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 Windows Server 2016, 2019, 2022, or 2025 VPS with administrator privileges. The commands also work from an elevated PowerShell window on a supported Windows installation.<\/li>\n\n\n<li>RDP access or an out-of-band VNC\/console session from the <a href=\"https:\/\/my.vpslake.com\" target=\"_blank\" rel=\"noopener\">VPSLake client area<\/a>. Keep the console available while changing network settings so you can recover from a wrong gateway or interface selection.<\/li>\n\n\n<li>The additional IPv4 address, its prefix length or subnet mask, and the primary address details supplied for your VPS. The extra address must already be assigned to the server by VPSLake; adding an unallocated address in Windows will not make it routable.<\/li>\n\n\n<li>A Windows computer with PowerShell for the configuration. No additional RAM, disk space, Windows role, or domain is required.<\/li>\n\n\n<li>If you need a Windows VPS with administrator access, see <a href=\"https:\/\/vpslake.com\/buy-windows-rdp\">VPSLake Windows RDP hosting<\/a>.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Confirm that the additional address is provisioned<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows can accept a secondary address only after the hosting provider has routed it to your VPS, so confirm the network details before editing the adapter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sign in to the <a href=\"https:\/\/my.vpslake.com\" target=\"_blank\" rel=\"noopener\">VPSLake client area<\/a>, open the VPS service, and use the link to launch the <strong>VPS control panel (Virtualizor)<\/strong>. Check the service&#8217;s IP information and note the additional address, prefix or subnet mask, and whether the address is intended for the same interface as the primary address. If the address is not listed, open a ticket before adding anything in Windows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open the VPS control panel&#8217;s <strong>VNC\/Console<\/strong> option as a recovery path. You can perform the change through RDP, but do not close the console until the new address passes the checks in the Verify section.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Identify the adapter and current IPv4 prefix<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The interface alias and prefix length must match the existing Windows network configuration; guessing either value can leave the address unusable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open <strong>Windows PowerShell \u2192 Run as administrator<\/strong>. List active adapters, then inspect the adapter carrying the primary address:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetAdapter | Where-Object Status -eq 'Up' | Select-Object Name,ifIndex,Status\n$InterfaceAlias = \"Ethernet\"\nGet-NetIPConfiguration -InterfaceAlias $InterfaceAlias | Format-List InterfaceAlias,IPv4Address,IPv4DefaultGateway,DNSServer\nGet-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv4 | Format-Table IPAddress,PrefixLength,PrefixOrigin,SuffixOrigin,SkipAsSource<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>Ethernet<\/code> with the adapter name returned by the first command. A typical result shows the primary address and a prefix such as <code>24<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress      PrefixLength PrefixOrigin SuffixOrigin SkipAsSource\n---------      ------------ ------------ ------------ ------------\n203.0.113.10             24 Manual       Manual       False<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The prefix length is the numeric form of the subnet mask: <code>\/24<\/code> equals <code>255.255.255.0<\/code>, while <code>\/27<\/code> equals <code>255.255.255.224<\/code>. Use the exact value supplied for your VPS; do not assume that every server uses <code>\/24<\/code>. Leave the existing default gateway unchanged.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Add the secondary address with PowerShell<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>New-NetIPAddress<\/code> creates a persistent address on the selected adapter without replacing the primary route. Omitting <code>-DefaultGateway<\/code> is intentional: a normal Windows server should have one default gateway, not one gateway for every address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Set the two placeholders and run the command in the elevated PowerShell window:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$AdditionalIP = \"ADDITIONAL_IP\"\n$PrefixLength = PREFIX_LENGTH\nNew-NetIPAddress -InterfaceAlias $InterfaceAlias -IPAddress $AdditionalIP -PrefixLength $PrefixLength -AddressFamily IPv4 -SkipAsSource $true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>ADDITIONAL_IP<\/code> with the address assigned to your VPS and <code>PREFIX_LENGTH<\/code> with the numeric prefix from Step 2, such as <code>24<\/code>. The <code>-SkipAsSource $true<\/code> setting keeps Windows from selecting this secondary address for unrelated outbound connections or registering it in DNS; applications can still bind to it directly. If this address must be the source of outbound traffic for a particular application, use <code>-SkipAsSource $false<\/code> instead and configure that application explicitly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microsoft documents the parameters and their behavior in the <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/module\/nettcpip\/new-netipaddress?view=windowsserver2025-ps\" target=\"_blank\" rel=\"noopener\"><code>New-NetIPAddress<\/code> reference<\/a>. A successful command returns an object similar to this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress      : ADDITIONAL_IP\nInterfaceAlias : Ethernet\nPrefixLength   : 24\nAddressState   : Preferred\nSkipAsSource   : True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add one address at a time. Do not change the primary address to a new static configuration just to add a secondary address, especially when the VPS currently receives its primary settings through DHCP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Use netsh or the Windows interface when needed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The built-in <code>netsh<\/code> command is useful in a Command Prompt workflow, while the graphical path helps you review the existing gateway and mask before saving.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From an elevated Command Prompt, replace the interface name, address, and mask, then run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>netsh interface ipv4 add address name=\"Ethernet\" address=ADDITIONAL_IP mask=SUBNET_MASK store=persistent skipassource=true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example, if your provider supplied a <code>\/24<\/code> prefix, <code>SUBNET_MASK<\/code> is <code>255.255.255.0<\/code>. Do not add a <code>gateway=<\/code> argument for a secondary address. The <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-server\/administration\/windows-commands\/netsh-interface\" target=\"_blank\" rel=\"noopener\">Microsoft <code>netsh interface<\/code> documentation<\/a> lists the persistent-store and <code>skipassource<\/code> options.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the GUI method, open <strong>Control Panel \u2192 Network and Internet \u2192 Network and Sharing Center \u2192 Change adapter settings<\/strong>. Right-click the active <strong>Ethernet<\/strong> adapter, choose <strong>Properties<\/strong>, select <strong>Internet Protocol Version 4 (TCP\/IPv4)<\/strong>, choose <strong>Properties \u2192 Advanced<\/strong>, and select <strong>Add<\/strong> in the IP addresses section. Enter the additional address and its subnet mask, select <strong>Add<\/strong>, then select <strong>OK<\/strong> through each window. Keep the original default gateway in the adapter&#8217;s existing configuration and do not add a second gateway for the new address.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the adapter is using DHCP, do not switch to a manually configured primary address unless VPSLake supplied every required value, including gateway and DNS servers. PowerShell is safer for adding a single secondary address without disturbing the primary configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Bind services to the new address<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Adding an address at the operating-system level does not automatically make a web server, database, mail service, or RDP listener use it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open the relevant application&#8217;s network settings and select <code>ADDITIONAL_IP<\/code>, or use <code>0.0.0.0<\/code> when the service should listen on every IPv4 address. If the application should be reachable from the internet, create only its required inbound Windows Defender Firewall rule and restrict the remote scope when possible. Assigning an IP by itself opens no TCP or UDP port.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a hostname, create an <code>A<\/code> record at your DNS provider that points <code>YOUR_DOMAIN<\/code> to the additional address. DNS changes and service binding are separate from the Windows adapter configuration, so complete both when the address is for a website or API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify the additional address<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">First confirm that Windows has the address in the <code>Preferred<\/code> state and that the original default route is still present:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$AdditionalIP = \"ADDITIONAL_IP\"\nGet-NetIPAddress -IPAddress $AdditionalIP -AddressFamily IPv4 | Format-List IPAddress,InterfaceAlias,PrefixLength,AddressState,SkipAsSource\nGet-NetRoute -AddressFamily IPv4 -DestinationPrefix \"0.0.0.0\/0\" | Format-Table NextHop,InterfaceAlias,RouteMetric,PolicyStore<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected output includes the new address and one normal default route, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress      : ADDITIONAL_IP\nInterfaceAlias : Ethernet\nPrefixLength   : 24\nAddressState   : Preferred\nSkipAsSource   : True\n\nNextHop       InterfaceAlias RouteMetric PolicyStore\n-------       -------------- ----------- -----------\n203.0.113.1   Ethernet                 25 ActiveStore<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you configured a service to listen on the address, test that service from another computer rather than from the VPS itself:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Test-NetConnection -ComputerName ADDITIONAL_IP -Port SERVICE_PORT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>SERVICE_PORT<\/code> with the port used by the application. A working TCP listener returns <code>TcpTestSucceeded : True<\/code>. A failed ping alone is not conclusive because Windows Defender Firewall or an upstream filter may block ICMP even when the address and application are working.<\/p>\n\n\n\n<aside class=\"vl-element vl-cta-banner\" aria-label=\"Need a Windows VPS?\">\n\t<div class=\"vl-cta-banner__content\">\n\t\t<p class=\"vl-cta-banner__eyebrow\">Windows networking<\/p>\n\t\t<h3 class=\"vl-cta-banner__title\">Need a Windows VPS?<\/h3>\n\t\t<p class=\"vl-cta-banner__text\">Get administrator access, console recovery, and flexible networking for Windows Server workloads.<\/p>\n\t<\/div>\n\t<a class=\"vl-cta-banner__button\" href=\"\/buy-windows-rdp\" aria-label=\"View Windows VPS\">View Windows VPS<\/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 object already exists<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The address may already be configured, or another address object with the same value may be present. Run <code>Get-NetIPAddress -IPAddress ADDITIONAL_IP -AddressFamily IPv4<\/code>; if it appears with <code>AddressState : Preferred<\/code>, do not add it again. If it is assigned to another host, remove the duplicate from the provider side before continuing.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The command reports an invalid parameter or the address stays unusable<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The adapter alias, prefix length, or address format may be wrong. Repeat Step 2, use the exact interface name returned by <code>Get-NetAdapter<\/code>, and use the provider&#8217;s numeric prefix rather than converting a mask from memory. Do not enter the gateway in the secondary-address command.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Windows shows the address, but it cannot be reached externally<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This usually means the address is not routed to the VPS, the prefix is wrong, the application is listening only on the primary address, or a provider-level firewall is filtering the traffic. Confirm the address in Virtualizor and the VPSLake client area, check the application&#8217;s bind setting, and test the exact service port from another network.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RDP disconnected after using the GUI<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The primary address, gateway, or adapter may have been changed instead of adding a secondary address. Use the VPS control panel&#8217;s <strong>VNC\/Console<\/strong> session, restore the original primary settings and single gateway, then add the extra address using Step 3. Keep the console open until RDP reconnects.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardening<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Keep Windows Defender Firewall enabled and permit only the application ports that must use the new address.<\/li>\n\n\n<li>Use <code>-SkipAsSource $true<\/code> for service-only addresses so ordinary outbound traffic continues to use the primary address.<\/li>\n\n\n<li>Restrict application firewall rules to known source ranges when a service does not need public access.<\/li>\n\n\n<li>Record the address, prefix, service binding, DNS record, and provider allocation so a later Windows rebuild can be repeated accurately.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can several IP addresses use one Windows Server network adapter?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Windows supports multiple IPv4 address objects on one adapter, which is the normal arrangement for a VPS with additional addresses. Each address still needs to be provisioned and routed by the hosting provider.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Should I add a default gateway for every IP address?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Keep one default gateway on the primary interface configuration unless your provider specifically designed a different routing table. A second gateway can create asymmetric routes and intermittent connectivity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Will the additional IP remain after a reboot?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, <code>New-NetIPAddress<\/code> creates a persistent configuration by default, and the <code>netsh<\/code> example explicitly uses <code>store=persistent<\/code>. Confirm it after a reboot with <code>Get-NetIPAddress<\/code> before putting production traffic on the address.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I use the new address for a website or email server immediately?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The address is only one part of that setup. Bind the service to the address, create the required DNS record, allow its specific firewall port, and configure reverse DNS when the service requires it through the VPS control panel or client-area support.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Can several IP addresses use one Windows Server network adapter?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes. Windows supports multiple IPv4 address objects on one adapter, which is the normal arrangement for a VPS with additional addresses. Each address still needs to be provisioned and routed by the hosting provider.\"}}, {\"@type\": \"Question\", \"name\": \"Should I add a default gateway for every IP address?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Keep one default gateway on the primary interface configuration unless your provider specifically designed a different routing table. A second gateway can create asymmetric routes and intermittent connectivity.\"}}, {\"@type\": \"Question\", \"name\": \"Will the additional IP remain after a reboot?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Yes, `New-NetIPAddress` creates a persistent configuration by default, and the `netsh` example explicitly uses `store=persistent`. Confirm it after a reboot with `Get-NetIPAddress` before putting production traffic on the address.\"}}, {\"@type\": \"Question\", \"name\": \"Can I use the new address for a website or email server immediately?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"The address is only one part of that setup. Bind the service to the address, create the required DNS record, allow its specific firewall port, and configure reverse DNS when the service requires it through the VPS control panel or client-area support.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Learn how to add IP addresses to Windows Server with PowerShell, verify the prefix and route, and fix duplicate or unreachable secondary IPs.","protected":false},"author":1,"featured_media":874,"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":[88,49,38,42],"class_list":["post-873","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-windows-server","tag-ip-addresses","tag-networking","tag-powershell","tag-windows-server","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/873","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=873"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/873\/revisions"}],"predecessor-version":[{"id":3641,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/873\/revisions\/3641"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/874"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}