Home Linux Networking Disable IPv6 in Linux: A Step-by-Step Guide (For All Distros)

Disable IPv6 in Linux: A Step-by-Step Guide (For All Distros)

Thinking about turning off IPv6 on your Linux system? Here's how.

By sk
1K views

IPv6 is the latest version of the internet protocol (IP), the foundation of online communication. While it offers many advantages over IPv4, some users might prefer to disable it. In this detailed guide, we'll explore different methods to disable IPv6 across various Linux distributions.

Additionally, we'll discuss why disabling IPv6 is not recommended and provide instructions on how to re-enable IPv6.

Before getting into the topic, let me provide a brief introduction to IPv6, its key features, and the key differences between IPv4 and IPv6.

What is IPv6?

IPv6 (Internet Protocol version 6) is the most recent version of the Internet Protocol (IP). It is designed to replace IPv4, which is running out of available IP addresses.

IPv6 uses a 128-bit address format, providing an essentially unlimited number of addresses.

IPv6 Representation

IPv6 addresses are represented as eight groups of four hexadecimal digits.

Here's an example of an IPv6 address:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

In this example:

  • Each segment is represented by a group of four hexadecimal digits.
  • Groups are separated by colons (:).
  • Leading zeros within each group can be omitted.
  • Consecutive groups of zeros can be shortened to "::" (double colon) once in an address to simplify notation.

For instance, the above IPv6 address could be written as:

2001:db8:85a3::8a2e:370:7334

This shortened notation reduces the address's length while still preserving its uniqueness.

Key Features

Some key features of IPv6 are:

  • Larger address space (2^128 addresses)
  • Simplified header format
  • Improved security with IPsec
  • Better quality of service (QoS) capabilities
  • More efficient routing and packet handling

Key differences between IPv4 and IPv6

The following table provides the comparison of IPv4 and IPv6:

FeatureIPv4IPv6
Address Space32-bit addresses (~4.3 billion)128-bit addresses (virtually unlimited)
Address FormatFour sets of decimal numbers (e.g., 192.0.2.1)Eight groups of four hexadecimal digits (e.g., 2001:0db8:85a3:0000:0000:8a2e:0370:7334)
Address ConfigurationManual or dynamic (DHCP)Manual, dynamic (SLAAC, DHCPv6)
Header SizeFixed 20 bytesFixed 40 bytes
SecurityOptional, add-ons (IPsec)Mandatory (built-in IPsec support)
NATCommonly usedLess common due to address abundance
FragmentationSupports network layer fragmentationEncourages end-to-end delivery without fragmentation
Table - IPv4 vs IPv6

IPv6: Infographic

IPv6 Infographic
IPv6 Infographic

For more in-depth details about IPv6, refer the following link:

Steps to Disable IPv6 in Linux

The following steps are same for most Linux distributions such as Debian, Fedora, and Ubuntu etc. For the demonstration purpose of this guide, we will be using a Ubuntu system.

To disable IPv6 on Linux, you can follow these steps:

1. Open the /etc/sysctl.conf file using a text editor with root privileges:

$ sudo nano /etc/sysctl.conf

2. Add the following lines at the end of the file:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Disable IPv6 using Sysctl File
Disable IPv6 using Sysctl File

These lines will disable IPv6 on all network interfaces, including the loopback interface.

3. Save the file and exit the text editor.

4. To apply the changes immediately without rebooting, run the following command:

$ sudo sysctl -p

This command will load the new settings from the /etc/sysctl.conf file.

5. To make the changes persistent across reboots, you can add the following line to the /etc/rc.local file:

echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf

Alternatively, you can create a new file in the /etc/sysctl.d/ directory, for example, /etc/sysctl.d/disable-ipv6.conf :

$ sudo nano /etc/sysctl.d/disable-ipv6.conf

And add the same lines as in step 2.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

6. Save the file and close it. Reboot your system to take effect the changes.

After following these steps, IPv6 will be disabled on your Linux system.

7. To verify if IPv6 is disabled, you can use the following commands:

$ ip -6 addr show
$ ip addr show
$ ping6 ::1

If IPv6 is disabled, you should not see any IPv6 addresses listed.

And the ping6 command should fail with the following error message.

ping6: connect: Cannot assign requested address
Verify if IPv6 is disabled
Verify if IPv6 is disabled

As you see in the above screenshot, the IPv6 addresses are not displayed.

Of course, there are also other ways to disable IPv6 in Linux. Using grubby command is one of the way.

Turn Off IPv6 using grubby Command

To disable IPv6 using grubby command line tool, execute the following command:

$ sudo grubby --update-kernel ALL --args ipv6.disable=1

Please note that it works on Red Hat-based systems only.

Disable IPv6 for a Specific Network Interface

In the previous section, we discussed how to turnoff IPv6 for all network interfaces. In this section, we will discuss how to deactivate IPv6 for a certain Network interface.

You can disable IPv6 for a specific network interface on Linux,

  1. Using the sysctl configuration file,
  2. By directly editing the Network interface's configuration file.

First, we will see how to do it using sysctl file.

Using Sysctl File

By using the sysctl configuration file, you can selectively disable IPv6 for specific network interfaces without disabling it globally for the entire system. This approach can be useful if you need to maintain IPv6 connectivity for other interfaces while disabling it for a particular interface due to compatibility issues or specific requirements.

1. Open the sysctl configuration file:

Open the /etc/sysctl.conf file with a text editor:

$ sudo nano /etc/sysctl.conf

2. Add the configuration to disable IPv6 for a specific interface:

To disable IPv6 for a specific interface, you need to add the following lines to the file, replacing <interface_name> with the name of your network interface (e.g., enp0s3):

net.ipv6.conf.<interface_name>.disable_ipv6 = 1

For example, to disable IPv6 for the enp0s3 interface, you would add:

net.ipv6.conf.enp0s3.disable_ipv6 = 1

3. Save the file and exit the text editor.

4. Load the new configuration:

After making the changes to the sysctl configuration file, you need to load the new settings using the following command:

$ sudo sysctl -p

This command will apply the new settings without requiring a system reboot.

5. Verify the change:

You can verify that IPv6 is disabled for the specific interface by running:

$ ip -6 addr show <interface_name>

Replace <interface_name> with the name of the interface you modified (e.g., enp0s3). The output should not show any IPv6 addresses assigned to that interface.

Note that if you need to make the change persistent across system reboots, you can create a new configuration file in the /etc/sysctl.d/ directory with the same settings, or add the configuration lines to a script that runs at system startup (e.g., /etc/rc.local).

Using Network Interface Configuration File

It is also possible to disable IPv6 for a specific network interface on a Linux system, instead of disabling it globally.

Please note that this method should only work on older Linux distributions.

1. Open the network interface configuration file:

The network interface configuration files are typically located in the /etc/sysconfig/network-scripts/ directory on Red Hat-based distributions (e.g., CentOS, Fedora), or in the /etc/network/interfaces.d/ directory on Debian-based distributions (e.g., Ubuntu).

For example, if you want to disable IPv6 for the enp0s3 interface on a CentOS system, open the corresponding configuration file:

$ sudo nano /etc/sysconfig/network-scripts/ifcfg-enp0s3

2. Add the IPV6INIT=no line:

In the interface configuration file, add the following line:

IPV6INIT=no

This line instructs the system not to initialize IPv6 for that specific interface.

3. Save the file and exit the text editor.

4. Restart the network service:

After making the change, restart the network service to apply the new configuration:

$ sudo systemctl restart network

5. Verify the change:

You can verify that IPv6 is disabled for the specific interface by running:

$ ip addr show <interface_name>

Replace <interface_name> with the name of the interface you modified (e.g., enp0s3). The output should not show any IPv6 addresses assigned to that interface.

By following these steps, you can selectively disable IPv6 for a specific network interface, while keeping it enabled for other interfaces on your Linux system.

Disable IPv6 during the Boot Process

You can disable IPv6 during the boot process by configuring the kernel boot parameters.

1. Edit GRUB Configuration:

Open the GRUB configuration file for editing. On most Linux distributions, including Debian and Fedora, this file is located at /etc/default/grub.

$ sudo nano /etc/default/grub

2. Modify Kernel Parameters:

Locate the line that starts with GRUB_CMDLINE_LINUX and add the following kernel parameters to disable IPv6:

ipv6.disable=1

Your modified line may look something like this:

GRUB_CMDLINE_LINUX="ipv6.disable=1"
Disable IPv6 in Grub Configuration File
Disable IPv6 in Grub Configuration File

3. Update GRUB Configuration:

Save your changes and exit the text editor. Then, update the GRUB configuration to apply the changes:

$ sudo update-grub

On some distributions, you may need to use a different command, such as grub2-mkconfig -o /boot/grub2/grub.cfg for systems that use GRUB 2.

4. Reboot:

Reboot your system to apply the changes:

$ sudo reboot

By adding the ipv6.disable=1 kernel parameter to the GRUB configuration, IPv6 will be disabled during the boot process. This ensures that IPv6 remains disabled throughout the entire runtime of the system.

To enable IPv6 again, simply remove the line that you have added in the Grub configuration file earlier. And then update the configuration file and reboot your system.

Please keep in mind that disabling IPv6 may cause compatibility issues with some applications or services that require IPv6 support.

The following section provides some insights on why disabling IPv6 is a bad practice.

Why Disabling IPv6 is not recommended

Disabling IPv6 entirely is generally not recommended for several reasons:

  1. Future-proofing: IPv6 is the next generation Internet Protocol and is designed to address the limitations of IPv4, such as address space exhaustion. As more devices connect to the internet, IPv6 provides the necessary address space to accommodate them all. Disabling IPv6 might hinder your ability to access services or communicate with devices that only support IPv6.
  2. Maintaining compatibility: Many modern applications and services are designed to work with IPv6. Disabling IPv6 could lead to compatibility issues with these services, resulting in degraded functionality or performance.
  3. Dual-stack environments: Most modern networks operate in a dual-stack environment, meaning they support both IPv4 and IPv6. Disabling IPv6 might cause complications in such environments and could lead to interoperability issues between IPv4 and IPv6 devices.
  4. Transition technologies: IPv6 deployment often involves the use of transition technologies, such as NAT64 or 6to4, which facilitate communication between IPv4 and IPv6 networks. Disabling IPv6 could disrupt the operation of these transition technologies and impede your ability to access IPv6-enabled services.
  5. Security implications: While IPv6 introduces some new security challenges, disabling it entirely is not necessarily a solution. It's better to address IPv6-related security concerns through proper configuration and management practices rather than outright disabling it.
  6. Performance benefits: In some cases, IPv6 can offer performance benefits, such as faster routing and reduced latency. Disabling IPv6 might prevent you from taking advantage of these performance improvements.

Overall, while there may be specific cases where disabling IPv6 is necessary due to compatibility issues or network constraints, it's generally advisable to leave it enabled to ensure future compatibility and optimal network performance.

If you encounter issues related to IPv6, it's better to address them individually rather than disabling IPv6 entirely.

Ok, now you've changed your mind! How do you re-enable IPv6? It is simple!

Re-enable IPv6 for all Network Interfaces using sysctl File

To re-enable IPv6 on your Linux system after disabling it, you can follow these steps:

1. Remove the IPv6 disable configuration:

Open the /etc/sysctl.conf file with a text editor:

$ sudo nano /etc/sysctl.conf

Remove or comment out the following lines (if present):

# net.ipv6.conf.all.disable_ipv6 = 1
# net.ipv6.conf.default.disable_ipv6 = 1
# net.ipv6.conf.lo.disable_ipv6 = 1

Save the file and exit the text editor.

2. Remove any custom IPv6 disable configuration files:

If you created a custom file in /etc/sysctl.d/ to disable IPv6 (e.g., /etc/sysctl.d/disable-ipv6.conf), remove that file:

$ sudo rm /etc/sysctl.d/disable-ipv6.conf

3. Load the new configuration:

Run the following command to load the new settings:

$ sudo sysctl -p

4. Revert GRUB configuration changes (if applicable):

If you modified the GRUB configuration to disable IPv6 during boot, you'll need to revert those changes.

Open the /etc/default/grub file with a text editor:

$ sudo nano /etc/default/grub

Remove the ipv6.disable=1 parameter from the GRUB_CMDLINE_LINUX line.

Save the file and exit the text editor.

Run the following command to update the GRUB configuration:

$ sudo update-grub

Or,

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

5. Reboot your system:

After making the necessary changes, it's recommended to reboot your system to ensure that IPv6 is fully re-enabled:

$ sudo reboot

After the reboot, you can verify if IPv6 is enabled by running commands like ip addr show or ifconfig. You should see IPv6 addresses assigned to your network interfaces.

Keep in mind that re-enabling IPv6 may require additional configuration or changes depending on your network environment and any customizations you've made previously.

Re-enable IPv6 for a Specific Network Interface

To re-enable IPv6 for a specific network interface after disabling it, follow these steps:

If you disabled IPv6 using the network interface configuration file:

Open the network interface configuration file (e.g., /etc/sysconfig/network-scripts/ifcfg-enp0s3 on Red Hat-based systems or /etc/network/interfaces.d/enp0s3 on Debian-based systems).

Remove the IPV6INIT=no line from the file. Save the file and exit the text editor.

Restart the network service:

$ sudo systemctl restart network 

If you disabled IPv6 using the sysctl configuration file:

Open the /etc/sysctl.conf file with a text editor:

$ sudo nano /etc/sysctl.conf

Remove or comment out the line that disables IPv6 for the specific interface (e.g., net.ipv6.conf.enp0s3.disable_ipv6 = 1).

Save the file and exit the text editor.

Load the new configuration:

$ sudo sysctl -p

Verify that IPv6 is re-enabled for the interface:

After making the necessary changes and restarting the network service (if required), you can verify that IPv6 is re-enabled for the specific interface by running:

$ ip addr show <interface_name>

Replace <interface_name> with the name of the interface you modified (e.g., enp0s3). The output should show the IPv6 addresses assigned to that interface.

If you had created a separate sysctl configuration file in /etc/sysctl.d/ to disable IPv6 for the interface, you can simply remove that file:

$ sudo rm /etc/sysctl.d/disable-ipv6-<interface_name>.conf

After re-enabling IPv6 for the specific interface, applications and services running on that interface should be able to use IPv6 connectivity again. However, keep in mind that some applications or services may need to be restarted or reconfigured to recognize the IPv6 changes.

It's always a good practice to test your applications and services after making changes to IPv6 configurations to ensure they are working as expected.

Re-enable IPv6 using grubby Command line tool

To re-enable IPv6 using the grubby command, run the following command to update the kernel arguments and enable IPv6:

$ sudo grubby --update-kernel ALL --remove-args ipv6.disable=1

Reboot your system for the changes to take effect:

$ sudo reboot

FAQ (Frequently Asked Questions)

Q: What is IPv6?

A: IPv6 (Internet Protocol version 6) is the latest version of the Internet Protocol, designed to replace the aging IPv4 protocol. It provides a much larger address space and other improvements over IPv4.

Q: Why would I want to disable IPv6 in Linux?

A: Some common reasons to disable IPv6 include compatibility issues with older applications or services, simplified network configuration and troubleshooting, or reducing the attack surface by removing an unnecessary protocol.

Q: Is it recommended to disable IPv6?

A: While it is possible to disable IPv6, it is generally not recommended as it may cause compatibility issues with modern applications and services that are designed to work with IPv6. Disabling IPv6 can also limit connectivity to IPv6-enabled networks and services in the future.

Q: How do I disable IPv6 in Linux?

A: To disable IPv6 in Linux, you need to modify the /etc/sysctl.conf file and add the following lines:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
Then, run sysctl -p to apply the changes immediately.

Q: How do I make the IPv6 disabling changes persistent across reboots?

A: To make the changes persistent, you can either add the same lines to the /etc/rc.local file or create a new file in the /etc/sysctl.d/ directory with the same configurations.

Q: How do I verify if IPv6 is disabled?

A: You can use commands like ip -6 addr show, ip addr show, ping6 ::1, and ifconfig to check if IPv6 is disabled. If no IPv6 addresses are listed, and the ping6 command fails, IPv6 is successfully disabled.

Q: What are the pros and cons of disabling IPv6?

A: Pros include improved security, compatibility with older applications, and simplified network configuration. Cons include limited connectivity to IPv6-enabled services and networks, reduced future compatibility, and potentially missing out on performance benefits of IPv6.

Q: How do I re-enable IPv6 after disabling it?

A: To re-enable IPv6, you can remove the lines you added to the /etc/sysctl.conf or /etc/sysctl.d/ files, run sysctl -p, and potentially reboot your system.

Q: Can I disable IPv6 during the boot process?

A: Yes, you can modify the kernel command line in the GRUB configuration file (/etc/default/grub on some distributions) and add the ipv6.disable=1 parameter.

Disabling IPv6: Final Thoughts

IPv6 offers advantages but isn't always necessary in some cases. This guide explored various methods to disable IPv6 on a Linux system. We also discussed the reasons why disabling IPv6 is generally not recommended and how to re-enable IPv6 after disabling it.

You should also keep in mind that while disabling IPv6 may resolve compatibility issues with older applications, it can limit connectivity to IPv6-enabled services and networks.

As IPv6 adoption increases, retaining IPv6 capability ensures future compatibility. If your requirements demand disabling IPv6, this guide provides the steps to do so safely and efficiently.


Related Read:


You May Also Like

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

This website uses cookies to improve your experience. By using this site, we will assume that you're OK with it. Accept Read More