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.
Prerequisites
- 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.
- 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.
- The IPv6 address, prefix length, default gateway, and DNS servers assigned to this VPS. Get them from the VPSLake client area or a support ticket; do not guess a gateway or use an address from another server.
- The connected network adapter name or interface index, which you will identify in Step 1.
- A VPSLake Windows RDP server if you need a Windows environment for this procedure.
Step 1: Identify the active network adapter
Windows can show virtual, disconnected, and loopback adapters, so first identify the interface that carries the server’s current traffic.
Open Windows PowerShell → Run as administrator through RDP or the VPS console. Run:
Get-NetAdapter | Where-Object Status -eq "Up" | Format-Table ifIndex,Name,InterfaceDescription,Status
Get-NetIPConfiguration -All | Format-List InterfaceAlias,InterfaceIndex,IPv4Address,IPv6Address,IPv4DefaultGateway,IPv6DefaultGateway,DNSServer
Record the Name and ifIndex for the connected Ethernet adapter. A normal result resembles this:
ifIndex Name InterfaceDescription Status
------- ---- -------------------- ------
12 Ethernet Microsoft Hyper-V Network Adapter Up
The alias may be Ethernet 2 or another provider-specific name. Use the exact value returned by your server in the next steps.
Step 2: Add the assigned IPv6 settings with PowerShell
PowerShell applies the address and default route without requiring a reboot, while leaving your existing IPv4 configuration in place.
Create variables with the values supplied for this VPS. The prefix is the number after the slash in the allocation, such as 64; do not type the slash into $PrefixLength.
$InterfaceAlias = "YOUR_INTERFACE_ALIAS"
$IPv6Address = "YOUR_IPV6_ADDRESS"
$PrefixLength = [uint8](YOUR_PREFIX_LENGTH)
$IPv6Gateway = "YOUR_IPV6_GATEWAY"
$DnsServers = @("YOUR_PRIMARY_DNS", "YOUR_SECONDARY_DNS")
$InterfaceIndex = (Get-NetAdapter -Name $InterfaceAlias).ifIndex
Replace YOUR_INTERFACE_ALIAS, YOUR_IPV6_ADDRESS, YOUR_PREFIX_LENGTH, YOUR_IPV6_GATEWAY, 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.
Apply the configuration:
Set-NetIPInterface -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -Dhcp Disabled
New-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 -IPAddress $IPv6Address -PrefixLength $PrefixLength -DefaultGateway $IPv6Gateway
Set-DnsClientServerAddress -InterfaceAlias $InterfaceAlias -ServerAddresses $DnsServers
The first command disables DHCPv6 for a manually assigned address. The second creates the address and ::/0 route, and the last sets DNS for the adapter; these are built-in cmdlets documented in Microsoft’s New-NetIPAddress reference and Set-NetIPInterface reference.
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 fe80::, copy its value exactly as supplied, including any interface scope if one is shown.
Step 3: Configure IPv6 through the Windows GUI instead
Use the GUI when you want to review each field visually; perform this step instead of Step 2, not after it.
Open Control Panel → Network and Internet → Network and Sharing Center → Change adapter settings. Right-click the connected Ethernet adapter, choose Properties, select Internet Protocol Version 6 (TCP/IPv6), and click Properties.
Choose Use the following IPv6 address and enter the assigned IPv6 address, numeric subnet prefix length, and gateway. Select Use the following DNS server addresses if VPSLake supplied DNS values, then enter the primary and alternate servers and choose OK → Close.
Do not convert the IPv6 address into an IPv4-style subnet mask: the Windows IPv6 dialog expects a number such as 64 in Subnet prefix length. Keep Internet Protocol Version 4 (TCP/IPv4) enabled so you retain a recovery path over the existing RDP address. Choose Obtain an IPv6 address automatically only when the provider explicitly uses DHCPv6 or router advertisements.
Step 4: Check the address, route, DNS, and outbound connection
An address alone does not prove IPv6 works; the server also needs a usable default route and a resolver that can return AAAA records.
Run these checks in the elevated PowerShell window:
Get-NetIPAddress -InterfaceAlias $InterfaceAlias -AddressFamily IPv6 | Format-Table IPAddress,PrefixLength,PrefixOrigin,AddressState
Get-NetRoute -InterfaceIndex $InterfaceIndex -AddressFamily IPv6 -DestinationPrefix "::/0" | Format-Table DestinationPrefix,NextHop,RouteMetric,State
Get-DnsClientServerAddress -InterfaceIndex $InterfaceIndex -AddressFamily IPv6 | Format-Table InterfaceAlias,ServerAddresses
Resolve-DnsName ipv6.google.com -Type AAAA
Test-NetConnection -ComputerName ipv6.google.com -Port 443
The public address should show PrefixOrigin as Manual and AddressState as Preferred. The route should point ::/0 to the assigned gateway, and the final test should include TcpTestSucceeded : True:
IPAddress PrefixLength PrefixOrigin AddressState
--------- ------------ ------------ ------------
YOUR_IPV6_ADDRESS 64 Manual Preferred
DestinationPrefix NextHop State
----------------- ------- -----
::/0 YOUR_IPV6_GATEWAY Alive
TcpTestSucceeded : True
To prove inbound access, test the actual service from a separate IPv6-capable network using the server’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.
Verify IPv6 is working
From another IPv6-capable system, connect to the server’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’s Windows Firewall rule work together; if you only need outbound IPv6, the Test-NetConnection result above is sufficient.
Troubleshooting
New-NetIPAddress says the address already exists
An older IPv6 entry may already be attached to the adapter. Inspect the entries before changing anything:
Get-NetIPAddress -InterfaceAlias "YOUR_INTERFACE_ALIAS" -AddressFamily IPv6 | Format-Table IPAddress,PrefixLength,PrefixOrigin,AddressState
If you have confirmed that one entry is obsolete, remove only that exact address and rerun Step 2. Do not delete the link-local fe80:: address or an address you cannot match to your provider’s allocation.
Remove-NetIPAddress -InterfaceAlias "YOUR_INTERFACE_ALIAS" -IPAddress "OLD_IPV6_ADDRESS" -Confirm:$false
Test-NetConnection fails with DestinationHostUnreachable
The prefix length or gateway is usually wrong, or the provider has not routed IPv6 to the VPS. Compare the values in Get-NetIPAddress and Get-NetRoute 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.
The address is present, but DNS lookups fail
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:
Get-DnsClientServerAddress -InterfaceAlias "YOUR_INTERFACE_ALIAS" -AddressFamily IPv6
Set-DnsClientServerAddress -InterfaceAlias "YOUR_INTERFACE_ALIAS" -ServerAddresses @("YOUR_PRIMARY_DNS", "YOUR_SECONDARY_DNS")
Clear-DnsClientCache
Resolve-DnsName ipv6.google.com -Type AAAA
If the resolver works but outbound IPv6 still fails, the problem is routing or provider-side connectivity rather than DNS.
RDP disconnects after the change
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’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.
Hardening after IPv6 is enabled
- 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.
- Keep the original IPv4 address configured until IPv6 has passed an external test and you have confirmed console access.
- Bind web, mail, database, and monitoring services to IPv6 deliberately; an IPv6 address does not mean every service should accept public traffic.
- Record the assigned address, prefix, gateway, and DNS values in your infrastructure notes so a later reinstall can be configured without guesswork.
FAQ
Does enabling IPv6 remove my Windows Server IPv4 address?
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.
What does the IPv6 prefix length mean?
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.
Why does Windows show an address beginning with fe80::?
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.
Do I need a new Windows Firewall rule for IPv6?
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.