{"id":821,"date":"2026-10-12T18:00:00","date_gmt":"2026-10-12T18:00:00","guid":{"rendered":"https:\/\/vpslake.com\/blog\/?p=821"},"modified":"2026-10-12T18:00:00","modified_gmt":"2026-10-12T18:00:00","slug":"enable-ipv6-windows-server","status":"publish","type":"post","link":"https:\/\/vpslake.com\/blog\/2026\/10\/12\/enable-ipv6-windows-server\/","title":{"rendered":"How to Enable IPv6 on Windows Server"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To enable IPv6 on Windows Server, add the address, prefix, gateway, and DNS values assigned to your VPS, then test the route from PowerShell. The process usually takes about 10 minutes and keeps IPv4 available while you validate the new connection.<\/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 VPS running Windows Server 2016, 2019, 2022, or 2025. The PowerShell method works on Server Core; the GUI method needs Desktop Experience.<\/li>\n\n\n<li>An active RDP session with a local or domain administrator account, plus access to the VPS console in the VPS control panel (Virtualizor) in case a network change interrupts RDP.<\/li>\n\n\n<li>The IPv6 address, prefix length, default gateway, and DNS servers assigned to this VPS. Get them from the <a href=\"https:\/\/my.vpslake.com\" target=\"_blank\" rel=\"noopener\">VPSLake client area<\/a> or a support ticket; do not guess a gateway or use an address from another server.<\/li>\n\n\n<li>The connected network adapter name or interface index, which you will identify in Step 1.<\/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 network adapter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Windows can show virtual, disconnected, and loopback adapters, so first identify the interface that carries the server&#8217;s current traffic.<\/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-NetIPConfiguration -All | Format-List InterfaceAlias,InterfaceIndex,IPv4Address,IPv6Address,IPv4DefaultGateway,IPv6DefaultGateway,DNSServer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Record the <code>Name<\/code> and <code>ifIndex<\/code> for the connected Ethernet adapter. A normal result resembles 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\">The alias may be <code>Ethernet 2<\/code> or another provider-specific name. Use the exact value returned by your server in the next steps.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Add the assigned IPv6 settings with PowerShell<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">PowerShell applies the address and default route without requiring a reboot, while leaving your existing IPv4 configuration in place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create variables with the values supplied for this VPS. The prefix is the number after the slash in the allocation, such as <code>64<\/code>; do not type the slash into <code>$PrefixLength<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$InterfaceAlias = \"YOUR_INTERFACE_ALIAS\"\n$IPv6Address = \"YOUR_IPV6_ADDRESS\"\n$PrefixLength = [uint8](YOUR_PREFIX_LENGTH)\n$IPv6Gateway = \"YOUR_IPV6_GATEWAY\"\n$DnsServers = @(\"YOUR_PRIMARY_DNS\", \"YOUR_SECONDARY_DNS\")\n$InterfaceIndex = (Get-NetAdapter -Name $InterfaceAlias).ifIndex<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_INTERFACE_ALIAS<\/code>, <code>YOUR_IPV6_ADDRESS<\/code>, <code>YOUR_PREFIX_LENGTH<\/code>, <code>YOUR_IPV6_GATEWAY<\/code>, and the DNS placeholders with the allocation for this server. If your provider supplied only IPv6 DNS resolvers, use those; otherwise, the DNS servers already used by the server can remain in place.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Apply the configuration:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -Dhcp Disabled\nNew-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -IPAddress $IPv6Address -PrefixLength $PrefixLength -DefaultGateway $IPv6Gateway\nSet-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses $DnsServers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first command disables DHCPv6 for a manually assigned address. The second creates the address and <code>::\/0<\/code> route, and the last sets DNS for the adapter; these are built-in cmdlets documented in Microsoft&#8217;s <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/module\/nettcpip\/new-netipaddress?view=windowsserver2025-ps\" target=\"_blank\" rel=\"noopener\">New-NetIPAddress reference<\/a> and <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/module\/nettcpip\/set-netipinterface?view=windowsserver2025-ps\" target=\"_blank\" rel=\"noopener\">Set-NetIPInterface reference<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Successful commands normally return to the prompt without an error. Keep the console or RDP window open until Step 4 passes. If the provider uses a link-local gateway beginning with <code>fe80::<\/code>, copy its value exactly as supplied, including any interface scope if one is shown.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Configure IPv6 through the Windows GUI instead<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use the GUI when you want to review each field visually; perform this step instead of Step 2, not after it.<\/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, choose <strong>Properties<\/strong>, select <strong>Internet Protocol Version 6 (TCP\/IPv6)<\/strong>, and click <strong>Properties<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Choose <strong>Use the following IPv6 address<\/strong> and enter the assigned IPv6 address, numeric subnet prefix length, and gateway. Select <strong>Use the following DNS server addresses<\/strong> if VPSLake supplied DNS values, then enter the primary and alternate servers and choose <strong>OK \u2192 Close<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not convert the IPv6 address into an IPv4-style subnet mask: the Windows IPv6 dialog expects a number such as <code>64<\/code> in <strong>Subnet prefix length<\/strong>. Keep <strong>Internet Protocol Version 4 (TCP\/IPv4)<\/strong> enabled so you retain a recovery path over the existing RDP address. Choose <strong>Obtain an IPv6 address automatically<\/strong> only when the provider explicitly uses DHCPv6 or router advertisements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Check the address, route, DNS, and outbound connection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An address alone does not prove IPv6 works; the server also needs a usable default route and a resolver that can return AAAA records.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run these checks in the elevated PowerShell window:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 | Format-Table IPAddress,PrefixLength,PrefixOrigin,AddressState\nGet-NetRoute -InterfaceIndex $InterfaceIndex -AddressFamily IPv6 -DestinationPrefix \"::\/0\" | Format-Table DestinationPrefix,NextHop,RouteMetric,State\nGet-DnsClientServerAddress -InterfaceIndex $InterfaceIndex -AddressFamily IPv6 | Format-Table InterfaceAlias,ServerAddresses\nResolve-DnsName ipv6.google.com -Type AAAA\nTest-NetConnection -ComputerName ipv6.google.com -Port 443<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The public address should show <code>PrefixOrigin<\/code> as <code>Manual<\/code> and <code>AddressState<\/code> as <code>Preferred<\/code>. The route should point <code>::\/0<\/code> to the assigned gateway, and the final test should include <code>TcpTestSucceeded : True<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IPAddress             PrefixLength PrefixOrigin AddressState\n---------             ------------ ------------ ------------\nYOUR_IPV6_ADDRESS    64           Manual       Preferred\n\nDestinationPrefix NextHop             State\n----------------- -------             -----\n::\/0              YOUR_IPV6_GATEWAY   Alive\n\nTcpTestSucceeded : True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To prove inbound access, test the actual service from a separate IPv6-capable network using the server&#8217;s IPv6 address. IPv6 uses the same Windows Defender Firewall policy, so an application must be listening on IPv6 and have an inbound rule for its port; enabling IPv6 does not require opening additional ports by itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verify IPv6 is working<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From another IPv6-capable system, connect to the server&#8217;s public IPv6 address or the service you intend to expose. A successful connection confirms that the address, route, provider-side routing, and the service&#8217;s Windows Firewall rule work together; if you only need outbound IPv6, the <code>Test-NetConnection<\/code> result above is sufficient.<\/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 server access<\/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 a Windows RDP server with administrator access for network configuration and testing.<\/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\">An older IPv6 entry may already be attached to the adapter. Inspect the entries before changing anything:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-NetIPAddress -InterfaceAlias \"YOUR_INTERFACE_ALIAS\" -AddressFamily IPv6 | Format-Table IPAddress,PrefixLength,PrefixOrigin,AddressState<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you have confirmed that one entry is obsolete, remove only that exact address and rerun Step 2. Do not delete the link-local <code>fe80::<\/code> address or an address you cannot match to your provider&#8217;s allocation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Remove-NetIPAddress -InterfaceAlias \"YOUR_INTERFACE_ALIAS\" -IPAddress \"OLD_IPV6_ADDRESS\" -Confirm:$false<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><code>Test-NetConnection<\/code> fails with <code>DestinationHostUnreachable<\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The prefix length or gateway is usually wrong, or the provider has not routed IPv6 to the VPS. Compare the values in <code>Get-NetIPAddress<\/code> and <code>Get-NetRoute<\/code> with the VPSLake allocation. If the route is missing, do not invent a gateway; ask support to confirm the IPv6 route and whether the gateway must be link-local.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The address is present, but DNS lookups fail<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This separates name resolution from routing. Check the configured resolver and test a known IPv6 address or service directly; then reapply the DNS values supplied for the VPS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-DnsClientServerAddress -InterfaceAlias \"YOUR_INTERFACE_ALIAS\" -AddressFamily IPv6\nSet-DnsClientServerAddress -InterfaceAlias \"YOUR_INTERFACE_ALIAS\" -ServerAddresses @(\"YOUR_PRIMARY_DNS\", \"YOUR_SECONDARY_DNS\")\nClear-DnsClientCache\nResolve-DnsName ipv6.google.com -Type AAAA<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If the resolver works but outbound IPv6 still fails, the problem is routing or provider-side connectivity rather than DNS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RDP disconnects after the change<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A wrong prefix or gateway can affect the adapter, especially if the existing IPv4 settings were changed accidentally in the GUI. Open the VPS control panel&#8217;s VNC or console session, compare the IPv6 values with your service details, and restore IPv4 if necessary. Keep the console available until both IPv4 and IPv6 checks pass.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardening after IPv6 is enabled<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Leave Windows Defender Firewall enabled for every profile and allow only the application ports you actually use. Existing RDP rules may expose both address families, so restrict their remote source addresses when practical.<\/li>\n\n\n<li>Keep the original IPv4 address configured until IPv6 has passed an external test and you have confirmed console access.<\/li>\n\n\n<li>Bind web, mail, database, and monitoring services to IPv6 deliberately; an IPv6 address does not mean every service should accept public traffic.<\/li>\n\n\n<li>Record the assigned address, prefix, gateway, and DNS values in your infrastructure notes so a later reinstall can be configured without guesswork.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Does enabling IPv6 remove my Windows Server IPv4 address?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. Windows supports both address families on the same adapter. The procedure adds a static IPv6 address while preserving IPv4, which gives you a recovery path if the IPv6 gateway is wrong.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What does the IPv6 prefix length mean?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It identifies the network portion of the address and is written as a number after a slash, such as <code>\/64<\/code>. Use the exact prefix assigned to your VPS; a common value is not a substitute for the provider&#8217;s value.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why does Windows show an address beginning with <code>fe80::<\/code>?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">That is a link-local address used for communication on the local network segment. It is normal for Windows to show one, but it is not the public IPv6 address you use for internet services unless your provider specifically gives it as a gateway.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need a new Windows Firewall rule for IPv6?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not merely to enable IPv6. Windows Defender Firewall rules can apply to both IPv4 and IPv6, but the service must listen on IPv6 and its inbound port must be allowed by the active firewall profile.<\/p>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\": \"https:\/\/schema.org\", \"@type\": \"FAQPage\", \"mainEntity\": [{\"@type\": \"Question\", \"name\": \"Does enabling IPv6 remove my Windows Server IPv4 address?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"No. Windows supports both address families on the same adapter. The procedure adds a static IPv6 address while preserving IPv4, which gives you a recovery path if the IPv6 gateway is wrong.\"}}, {\"@type\": \"Question\", \"name\": \"What does the IPv6 prefix length mean?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"It identifies the network portion of the address and is written as a number after a slash, such as `\/64`. Use the exact prefix assigned to your VPS; a common value is not a substitute for the provider's value.\"}}, {\"@type\": \"Question\", \"name\": \"Why does Windows show an address beginning with `fe80::`?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"That is a link-local address used for communication on the local network segment. It is normal for Windows to show one, but it is not the public IPv6 address you use for internet services unless your provider specifically gives it as a gateway.\"}}, {\"@type\": \"Question\", \"name\": \"Do I need a new Windows Firewall rule for IPv6?\", \"acceptedAnswer\": {\"@type\": \"Answer\", \"text\": \"Not merely to enable IPv6. Windows Defender Firewall rules can apply to both IPv4 and IPv6, but the service must listen on IPv6 and its inbound port must be allowed by the active firewall profile.\"}}]}<\/script>\n\n","protected":false},"excerpt":{"rendered":"Enable IPv6 on Windows Server with PowerShell or the GUI, apply your assigned address safely, and verify routing, DNS, and connectivity results.","protected":false},"author":1,"featured_media":822,"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":[53,49,38,42],"class_list":["post-821","post","type-post","status-publish","format-standard","has-post-thumbnail","category-guides","category-windows-server","tag-ipv6","tag-networking","tag-powershell","tag-windows-server","cs-entry"],"_links":{"self":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/821","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=821"}],"version-history":[{"count":1,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/821\/revisions"}],"predecessor-version":[{"id":3046,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/posts\/821\/revisions\/3046"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media\/822"}],"wp:attachment":[{"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/media?parent=821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/categories?post=821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vpslake.com\/blog\/wp-json\/wp\/v2\/tags?post=821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}