Check out these additional IPv6 Resources: |
| Our IPv6 overview course at Udemy |
| Our IPv6 Custom Profiles for Wireshark |
| Our IPv6 classes at the Online School |
We are still frequently asked, “How do I enable IPv6 on my computer?”
Years ago, that could actually involve installing the IPv6 protocol stack or explicitly enabling it. Today the answer is usually much simpler: IPv6 is probably already enabled. But let’s say you have an older system. The original post delt with that and can be found below this updated post.
Modern versions of Windows, Linux, and macOS all include IPv6 as a standard part of the operating system. So the better questions are:
- Is IPv6 enabled?
- Does the computer have an IPv6 address?
- Where did that address come from?
- Does the computer have an IPv6 default route?
- Can it actually reach the IPv6 Internet?
Those are not all the same thing.
For example, a computer can have IPv6 enabled and have an IPv6 link-local address, but still have no usable IPv6 Internet connectivity.
Let’s look at how to check this on the major operating systems.
A Quick IPv6 Address Refresher
Before getting into operating-system commands, it helps to recognize what you are looking at.
If IPv6 is operating on an interface, you will commonly see one or more of these types of addresses:
Link-local address
fe80::/10
Virtually every IPv6-enabled interface creates a link-local address. These addresses are used for communication on the local link and are extremely important to IPv6 operations, including Neighbor Discovery and communication with routers.
Seeing an fe80:: address tells you that IPv6 is running on the interface. It does not tell you that the computer has IPv6 Internet access.
Global Unicast Address
Typically found within:
2000::/3
This is the IPv6 equivalent, broadly speaking, of having a routable IPv4 address.
Unique Local Address
fc00::/7
Most commonly you will encounter addresses beginning with fd. These are used for private/internal IPv6 addressing and are not directly routed across the public Internet.
A typical computer may have several IPv6 addresses on the same interface. That is perfectly normal.
Windows 11
IPv6 is built into current Windows networking and normally should already be enabled.
One of the easiest ways to check is from a Command Prompt:
ipconfig /all
Look at the active Ethernet or Wi-Fi interface.
You may see entries similar to:
IPv6 Address. . . . . . . . . . . : 2001:db8:1234:1::25
Temporary IPv6 Address. . . . . . . : 2001:db8:1234:1:abcd:1234:5678:9abc
Link-local IPv6 Address . . . . . . : fe80::1234:5678:abcd:ef01%12
Default Gateway . . . . . . . . . . : fe80::1%12
The addresses above are examples, but notice something important: the IPv6 default gateway is a link-local address.
That is completely normal in IPv6.
Check IPv6 with PowerShell
PowerShell gives us several excellent commands for examining IPv6.
Start with:
Get-NetIPConfiguration
For IPv6 addresses specifically:
Get-NetIPAddress -AddressFamily IPv6
To examine the IPv6 routing table:
Get-NetRoute -AddressFamily IPv6
And to see the IPv6 neighbor cache:
Get-NetNeighbor -AddressFamily IPv6
If you are coming from IPv4, think of the neighbor cache as serving a role similar to the ARP cache. IPv6 does not use ARP. Neighbor Discovery performs that job.
Test the Local IPv6 Stack
You can test the IPv6 loopback address with:
ping ::1
If that works, the local IPv6 protocol stack is operating.
But again, that does not prove you have external IPv6 connectivity.
Try an IPv6 destination:
ping -6 ipv6.google.com
You can also examine the IPv6 path with:
tracert -6 ipv6.google.com
Keep in mind that ICMP may be filtered somewhere along the path, so a failed ping by itself does not always prove IPv6 is broken.
Check IPv6 Through the Windows GUI
You can also verify that IPv6 is bound to a network adapter.
Press:
Windows Key + R
Enter:
ncpa.cpl
Right-click the appropriate Ethernet or Wi-Fi adapter and select Properties.
You should see:
Internet Protocol Version 6 (TCP/IPv6)
and it will normally be checked.
If IPv6 has been unchecked, checking the box will bind IPv6 to that network interface.
Don’t Disable IPv6 Just to Troubleshoot a Problem
This deserves emphasis.
IPv6 is now an integral part of Windows networking. Disabling it as a general troubleshooting technique is usually a bad approach and can cause unexpected problems with Windows applications and services.
If your network is having an IPv6 problem, troubleshoot the IPv6 problem.
Look at:
- IPv6 addressing
- Router Advertisements
- Default routes
- DNS
- Neighbor Discovery
- Firewall policies
- ISP IPv6 support
Turning the protocol off simply hides the underlying problem.
Linux
IPv6 support has been built into the Linux kernel for many years and is normally enabled automatically by modern Linux distributions.
Ubuntu, Fedora, Debian, Rocky Linux, and many other distributions commonly use NetworkManager or another network-management service to configure IPv6.
The first command I normally use is:
ip -6 address show
Or simply:
ip -6 addr
Look for lines containing inet6.
For example:
inet6 2001:db8:1234:1::25/64 scope global
inet6 fe80::1234:56ff:fe78:9abc/64 scope link
Again, the fe80:: address tells you IPv6 is operating locally.
Check the IPv6 Routing Table
Use:
ip -6 route
A functioning IPv6 host connected to a routed IPv6 network will normally have a default route.
It may look something like:
default via fe80::1 dev enp1s0
Notice that, just as with Windows, the IPv6 router may be identified by its link-local address.
Check the IPv6 Neighbor Cache
Use:
ip -6 neigh
This is one of my favorite troubleshooting commands when teaching IPv6 because it lets you see Neighbor Discovery doing the work that many engineers previously associated with ARP.
Is IPv6 Disabled in the Linux Kernel?
You can check with:
sysctl net.ipv6.conf.all.disable_ipv6
Normally you should see:
net.ipv6.conf.all.disable_ipv6 = 0
A value of 0 means IPv6 is enabled.
A value of 1 means it has been disabled.
You can also check the default applied to interfaces:
sysctl net.ipv6.conf.default.disable_ipv6
Checking NetworkManager
On Linux systems using NetworkManager, first display the available connection profiles:
nmcli connection show
Then examine the IPv6 configuration for a particular connection:
nmcli connection show "Wired connection 1"
Look for:
ipv6.method
An IPv6 configuration method of:
auto
allows NetworkManager to automatically configure IPv6 using mechanisms such as IPv6 Router Advertisements.
If IPv6 has been disabled for that connection profile, it can be changed with:
sudo nmcli connection modify "Wired connection 1" ipv6.method auto
Then reactivate the connection:
sudo nmcli connection up "Wired connection 1"
Substitute the actual connection name on your system.
One important update from older Linux documentation: you generally should not manually edit /etc/resolv.conf just to configure an IPv6 DNS server. Modern Linux systems frequently have DNS managed by NetworkManager, systemd-resolved, or another networking service.
macOS
IPv6 is also built into macOS and is configured automatically by default.
To examine it through the GUI:
- Select Apple menu > System Settings.
- Select Network.
- Select the active Wi-Fi or Ethernet connection.
- Select Details.
- Select TCP/IP.
- Look at Configure IPv6.
For most networks this should be set to:
Automatically
macOS also provides options for manual IPv6 configuration and link-local-only operation.
Unless you have a specific requirement from your network administrator or ISP, automatic configuration is generally what you want.
Checking IPv6 from the macOS Terminal
The traditional ifconfig command remains useful for examining interfaces:
ifconfig
To narrow the output to IPv6 addresses:
ifconfig | grep inet6
To examine the IPv6 routing table:
netstat -rn -f inet6
You can also examine the IPv6 neighbor cache with:
ndp -a
The ndp command is particularly useful when troubleshooting IPv6 Neighbor Discovery.
Enabled Does Not Mean Connected
This is probably the most important update to the original version of this article.
Suppose you run ipconfig, ip -6 addr, or ifconfig and find:
fe80::xxxx:xxxx:xxxx:xxxx
Congratulations—IPv6 is enabled.
But you have only proven link-local IPv6 operation.
For usable IPv6 connectivity beyond the local network, you generally need several additional pieces to be working:
- A router providing IPv6 service.
- IPv6 Router Advertisements reaching the host.
- A usable IPv6 prefix.
- A global or appropriate routable IPv6 address.
- An IPv6 default route.
- Working IPv6 DNS where needed.
- Firewall policies permitting the necessary IPv6 traffic.
- Upstream IPv6 connectivity from the ISP or enterprise network.
This distinction is extremely useful when troubleshooting.
Instead of asking:
“Is IPv6 enabled?”
I normally break the problem into several questions:
Is the IPv6 stack running?
Check for ::1 and a link-local address.
Did I learn an IPv6 prefix?
Look for a global IPv6 address.
Did I discover an IPv6 router?
Look for an IPv6 default route.
Can I reach something by IPv6 address?
Test IPv6 connectivity without involving DNS.
Can I resolve and reach an IPv6-enabled hostname?
Now DNS and application behavior can be included in the test.
That troubleshooting sequence tells you far more than simply checking an “Enable IPv6” box.
What Changed Since the Early Days of IPv6?
The original version of this article included instructions for installing IPv6 on Windows XP, configuring Windows 7, loading IPv6 kernel modules on Linux, and using several commands that have since been replaced by better tools.
Networking has moved on.
Today, IPv6 should generally be treated as a normal part of the IP stack rather than an optional feature that needs to be installed.
That is progress.
For network engineers and broadband technicians, the challenge is no longer simply turning IPv6 on. The valuable skill is understanding what happens next:
- How the host creates a link-local address
- How Router Solicitation and Router Advertisement work
- How SLAAC operates
- Where DHCPv6 fits
- How default routers are learned
- How Neighbor Discovery replaces ARP
- How DNS affects IPv4 versus IPv6 selection
- How to troubleshoot dual-stack connectivity
And, of course, one of the best ways to understand all of this is to capture the traffic with Wireshark and watch it happen.
The Original Post for Older Systems
The following is the original post from 2013. I chose to leave it here for folks running older systems.
We are often asked, how do you enable IPv6 on a computer? With all the various versions of operating systems out there, this is no simple answer. What we have chosen to do below is provide the procedure for Windows 7, Windows XP and Ubuntu. Hopefully from there everyone can find their way.
Note: Some computers will not allow the user to actually enable or disable IPv6 operation due to company policy and/or Administrative level access to the computer. So if you receive warnings that do not allow you to perform these operations, try to find another student who does, and work with them.
There are no GUI options for IPv6 in Windows XP or Windows Server 2003. Versions of Windows systems since and including Windows VISTA also have GUI as well as the netsh methods.
Windows 7 – GUI Method
Step 1
Let’s begin by finding out if your system has IPv6 enabled.
- Right click on the network icon.
- Now“Open the Network and Sharing Center”.
- In the resulting window, select “Change adapter settings” on the left side.
- Now, in the Network Connections window that appears, select the “Local Area Connection” or “Wireless Network Connection” that is active.
- Now either select “Change settings of this connection” on the top tool bar, or right click the connection icon and select properties.
- In the connection property page, if the check the box for “Internet Protocol Version 6 (TCP/IPv6)” is checked, then IPv6 is working on your machine and you can close all the windows that opened and skip Step 2.
Step 2
To enable IPv6 on your machine, check the box “Internet Protocol Version 6 (TCP/IPv6)”. Click the OK button.
That is it!
To see what else you can do on your Computer with IPv6 simply search the site for “IPv6”.
Install Procedure for IPv6 on a Windows XP Machine
- Open Network Connections
- Right-click any local area connection, and then click Properties.
- Click Install.
- In the Select Network Component Type dialog box, click Protocol, and then click Add.
- In the Select Network Protocol dialog box, click Microsoft TCP/IP version 6, and then click OK.
- Click Close to save changes to your network connection.
That is it!
Some netsh commands you can run on a Windows Machine that is IPv6 Enabled:
Open a Start> Run> CMD window.
From the prompt, enter “netsh interface ipv6”
You can do several things from this point:
- To set an IPv6 address type “set address “. Here is an example: “set address LAN 2001:db8:1:1::1”
- To install a route type “set route “. Here is an example of setting a default route to a gateway with the link local address fe80::1: “set route ::/0 LAN fe80::1”
- To set a path and DNS server type “set dnsserver {dhcp | static }”. For example, if you wanted to set your system to using DHCP-lite, use “set dnsserver LAN dhcp” or to statically set the DNS “set dnsserver LAN static 2001:db8:1:1::1”
If you wanted to display the neighbor cache (replaces the ARP cache in IPv4 networking) enter “netsh interface ipv6 show neighbors”
If you want to display the dnsservers enter “netsh interface ipv6 show dnsservers”
Another thing you can do is change the privacy settings for Windows autoconfiguration of addresses. By default windows uses this method. To turn it on/off enter “netsh interface ipv6 set privacy [enabled|disabled]”
Install Procedure for IPv6 on a Linux (Ubuntu) Machine
The latest versions of Ubuntu come with IPv6 enabled (since the 2.2.x kernel series). You can check this by issuing the following command:
ip a | grep inet6
The file /proc/net/if_net6 contains a list of interfaces on which IPv6 is enabled.
If you want to add IPv6 to a running kernel – simply open a terminal window and enter “modprobe ipv6” and the host will autoconfigure itself.
If you are running an older version you can try installing via the following command:
lsmod | grep ip6
Other Linux commands of interest:
Again from the terminal prompt, you can try “ifconfig ipv6 add /” to add an IPv6 address to an interface.
- To remove an IPv6 address use “ifconfig ipv6 del /”
- To add a route “route -A inet6 add gw “. For example “route -A inet6 add default gw fe80::1”
- To add a DNS server you must edit the /etc/resolv.conf file and add a line “nameserver 2001:db8:1:1::1” replacing the example IPv6 address with the appropriate IPv6 address.
- To examine the neighbor cache, use “ip -f inet6 neigh” command.
For a great source of IPv6 on Ubuntu, check out this page: https://wiki.ubuntu.com/IPv6
Enabling IPv6 on MAC OS X
MAC OS X natively supports IPv6 in the newer releases. You can configure IPv6 on a MAC through the GUI or through a terminal session using CLI.
The following is a list of CLI commands for MAC OS X (for detail explanations of the commands just type “man” in front of any of these in a terminal window and you will be provided manual pages and details):
- “ip6 -a”: enables IPv6 on all interfaces
- “ip6 -x”: disables IPv6 on all interfaces
- “ifconfig”: used for manual setting up of IPv6 parameters
- ifconfig [-C] [-L] interface address_family [address [dest_address]]
- [parameters]
- ifconfig interface create
- ifconfig -a [-C] [-L] [-d] [-m] [-u] [-v] [address_family]
- ifconfig -l [-d] [-u] [address_family]
- ifconfig [-C] [-L] [-d] [-m] [-u] [-v]
- “route”: use this command for configuring the routing table. Usage: route [-dnqtv] command [[modifiers] args]
- “netstat”: use this command for displaying status, routing and interface info
netstat [-AaLlnW] [-f address_family | -p protocol]
- netstat [-gilns] [-f address_family]
- netstat -i | -I interface [-w wait] [-abdgRt]
- netstat -i | -I interface [-w wait] [-abdgRt]
- netstat -s [-s] [-f address_family | -p protocol] [-w wait]
- netstat -i | -I interface -s [-f address_family | -p protocol]
- netstat -m [-m]
- netstat -r [-Aaln] [-f address_family]
- netstat -rs [-s]
We hope this helps everyone with their various systems.
If you would like to help support the continued development of independent networking, broadband, Wi-Fi, VoIP, and packet analysis content, please consider joining our Patreon community where you will gain access to exclusive technical resources, downloadable labs and PCAPs, bonus course content, troubleshooting guides, and additional member-only material. Comments and technical discussion are always welcomed at our Patreon community or on our Discord server. You can also support our work by simply buying us a coffee — every contribution helps us continue creating practical, real-world network science education for professionals and enthusiasts alike.
