Red Hat / CentOS IPv6 Network Configuration

Q. How do I configure static IPv6 networking under RHEL 5.x / Fedora / CentOS Linux?

A. Red Hat / CentOS / Fedora RHEL support IPv6 out of box. All you have to do is update two files and turn on networking.

You need to update and configure following files for IPv6 configuration:

  1. /etc/sysconfig/network : Turn on networking in this file.
  2. /etc/sysconfig/network-scripts/ifcfg-eth0 : Set default IPv6 router IP and server IP address in this file.

Open /etc/sysconfig/network file, enter:
# vi /etc/sysconfig/network
Append following line:


Open /etc/sysconfig/network-scripts/ifcfg-eth0 (1st network config file)
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
Append following config directives for IPv6:


Here is my sample file with mix of IPv4 and IPv6 assigned to eth0:



  • NETWORKING_IPV6=yes|no – Enable or disable global IPv6 initialization.
  • IPV6INIT=yes – Enable or disable IPv6 configuration for all interfaces.
  • IPV6ADDR=2607:f0d0:1002:0011:0000:0000:0000:0002 – Specify a primary static IPv6 address here.
  • IPV6_DEFAULTGW=2607:f0d0:1002:0011:0000:0000:0000:0001 – Add a default route through specified gateway.

Save and close the file. Restart networking:
# service network restart
Verify your configuration by pinging ipv6 enabled site such as
$ ping6
Sample output:

PING 56 data bytes
64 bytes from 2001:4860:b002::68: icmp_seq=1 ttl=59 time=93.2 ms
64 bytes from 2001:4860:b002::68: icmp_seq=2 ttl=59 time=95.0 ms
64 bytes from 2001:4860:b002::68: icmp_seq=3 ttl=59 time=94.2 ms
64 bytes from 2001:4860:b002::68: icmp_seq=4 ttl=59 time=95.2 ms
64 bytes from 2001:4860:b002::68: icmp_seq=5 ttl=59 time=94.8 ms
64 bytes from 2001:4860:b002::68: icmp_seq=6 ttl=59 time=95.1 ms
64 bytes from 2001:4860:b002::68: icmp_seq=7 ttl=59 time=93.3 ms
64 bytes from 2001:4860:b002::68: icmp_seq=8 ttl=59 time=93.8 ms

--- ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7010ms
rtt min/avg/max/mdev = 93.268/94.376/95.268/0.799 ms

Traces path to a network host, enter:
$ traceroute6
Print default IPv6 routing table, enter:
$ route -n -A inet6
Sample output:

Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
::1/128                                     ::                                      U     0      42531       1 lo      
::                          ::                                      U     0      0        1 lo      
::                             ::                                      U     0      0        1 lo      
::/96                                       ::                                      U     256    0        0 sit0    
2001:470:1f04:55a::2/128                    ::                                      U     0      15201       1 lo      
2001:470:1f04:55a::/64                      ::                                      U     256    0        0 sit1    
fe80::4833:22f4/128                         ::                                      U     0      0        1 lo      
fe80::212:3fff:fe75:fa0d/128                ::                                      U     0      0        1 lo      
fe80::/64                                   ::                                      U     256    0        0 eth0    
fe80::/64                                   ::                                      U     256    0        0 sit1    
ff00::/8                                    ::                                      U     256    0        0 eth0    
ff00::/8                                    ::                                      U     256    0        0 sit1    
::/0                                        ::                                      U     1      0        0 sit1    

Once IPv6 configured properly, you need to setup IPv6 firewall using ip6tables command under Linux.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 23 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersncdu pydf
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
23 comments… add one
  • Sean Jun 15, 2010 @ 18:41

    you have no ipv6 mask :(

  • Beau Jul 13, 2010 @ 19:26

    Thanks so much for this article. It is exactly what I have been looking for. I will recommend this article. Keep up the good work.

  • Pete Jul 15, 2010 @ 16:02

    Nice reminders, but I’d like to make two suggestions:

    1. Since the gateways are not specific to an interface, I keep the default gateway stuff (v4 and v6) in /etc/sysconfig/network.

    2. I also don’t like the v6 autoconf for servers, so I turn it off in /etc/sysconfig/network: IPV6_AUTOCONF=no

    Thanks for the quick tips.


  • Steve Sep 27, 2010 @ 10:41

    So how would one find out there IPV6 address to use as a static one and what the default gw IPV6 address us to use?

    I know the IPV4 addresses > how do i find its IPV6?

    Thanks in advance

  • SH Oct 7, 2010 @ 11:27

    I try to add another interface (ifcfg-eth0:1) with the same IPv6 lines as in ifcfg-eth0, but the IPv6 does not appear when I use ifconfig. How can I assign an IPv6 to another network interface?

  • Pete Oct 7, 2010 @ 18:11

    Use IPV6ADDR_SECONDARIES in ifcfg-eth0. Generally, v6 devices expect to have multiple addresses. If you do an ifconfig on eth0, you’ll probably see at least two v6 addresses already (one a link-local scope and one a global scope).

    IPV6ADDR_SECONDARIES=”[/] …” (optional)
    A list of secondary IPv6 addresses (e.g. useful for virtual hosting)
    IPV6ADDR_SECONDARIES=”3ffe:ffff:0:1::10 3ffe:ffff:0:2::11/128″

  • S!FE Oct 20, 2010 @ 13:22

    Is there any directive to make network service start at boot time.

  • S!FE Oct 20, 2010 @ 19:35

    I think that works for me, thanks Mr Vivek.

  • tomas Nov 16, 2010 @ 20:11

    Just a question. How can I calculate usable hosts address? I have assigned IPv6 /48 network and need single adress for each server, for example
    3x IPv6 address for server-1
    2x IPv6 address for server-2
    etc …

  • Joel Snyder Feb 27, 2011 @ 23:16 doesn’t resolve today, so it’s a bad example. Try

  • Monster Jun 10, 2011 @ 0:12

    any idea how to configure IPv6 in bridge for RH based OS?

  • Iain Kay Jul 22, 2011 @ 9:26

    I have a question. If one has setup a CentOS server, and it is now in production sitting online in use 24/7 with IPv4, is it possible to add IPv6 to it without having to restart the network service?

    What I have tried:
    $ modprobe ipv6
    $ ifconfig eth0 && ifconfig xenbr0

    By this point there are no ipv6 addresses shown in ifconfig

    $ ip addr add 2001:xx:xx:xx:1::2/64 dev xenbr0

    By this point I still have no ipv6 addresses in ifconfig, all I get is:
    RTNETLINK answers: Operation not supported

    If I absolutely have to reboot the server then I will find a good point to do so and do it but if it’s even remotely possible to do without then that would be ideal. The server hosts Xen virtual machines using bridged networking configuration and somehow I doubt that restarting the network service would play nice with them and come back automatically at Virtual Machine level.

  • George Oct 17, 2011 @ 0:35

    Hi I dont find /etc/sysconfig/network-scripts/ifcfg-eth0, I only have /etc/sysconfig/network-scripts/ifcfg-lo…….what can I do ? Help me please

  • Calum Nov 2, 2011 @ 23:24

    George – how about cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-eth0

  • Freaky Oct 24, 2012 @ 11:40

    The scripts aren’t really smart. If you have to use a link local address for your gateway, its not going to work because the route command doesn’t specify the interface.

    I solved this quite bluntly – no clue on how future proof this is – by using a zone identifier on the gateway address. As in:


    Before more people start the discussion, many hosting providers use the link local address as the gateway because of redundancy. In case of failure of one of the routers the link local address is transferred the global addresses these routers have are NOT! And hence, using one the global addresses at these providers means your routing redundancy is gone.

  • Freaky Oct 24, 2012 @ 12:09

    Earlier I commented on default IPv6 route not working with a link local address for the gateway and that it did work by adding the zone identifier (fe80::1%eth2 for example). Whilst this works nicely for me, I just found out it’s not the official way…

    Please update your howto with the following ifcfg-ethX option:

    From the docs:
    IPV6_DEFAULTDEV= (optional)
    Add a default route through specified interface without specifying next hop
    Type of interface will be tested whether this is allowed
    IPV6_DEFAULTDEV=”eth0″ INVALID example!
    Examples for 6to4
    Add default route through dedicated 6to4 tunnel device “tun6to4”, if configured

    As with all link local address it always has to be specified what device to use. Even ping6 has this issue, because all interfaces get an address in the same range (link local that is).

  • Aznboy4life Jun 28, 2013 @ 18:50


    I’m getting:
    [ipv6_add_route] ‘No route to host’ adding route ‘::/0’ via gateway ‘2607:fcd0:ff03::1’ through device ”

    When I restart network. Any ideas? I followed everything above!

  • Prashant Jul 12, 2013 @ 7:27

    I need to configuer ipv6 dhcp server with 112 perfix.Can You help me out

  • Tom Oct 28, 2013 @ 20:01

    I prefer to NOT put in a default gateway for IPv6. You should let the routers on the subnet announce themselves. That’s what Router Announcements (part of Neighbor Discovery) are for. They will announce the proper IPv6 address (which should be a link-local fe80 address) as needed. That RA also includes the “prefix”, which is the IPv6 term for the netmask. Since IPv6 doesn’t permit non-contiguous subnet bits, a straight prefix, which will almost always be /64, should appear in the RA.

  • Lingamurthy Dec 13, 2016 @ 7:31


Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum