3.2. IPv6 Support

All the IP addresses discussed so far are of the IPv4 type. The IP address standard IPv6 is designed as a successor to IPv4 with the principal advantage of providing a much larger 128 bit address space. Among many other advantages, the large number of available global IPv6 addresses means that NAT is no longer required to share a limited number of public IPv4 addresses.

This section discusses how IPv6 usage is enabled, how IPv6 objects are created, how stateless auto-configuration by clients is enabled and how to create IP rule set and routing table entries that use IPv6 address objects.

[Note] Note: The prefix 2001:DB8::/32 is reserved for documentation

As described in RFC-3849, the IPv6 prefix 2001:DB8::/32 is specifically reserved for documentation purposes. All IPv6 examples in this manual therefore use this network or addresses from it.

cOS Core Configuration Objects Supporting IPv6

The following objects of cOS Core provide IPv6 support:

IPv6 Must be Enabled on an Ethernet Interface

IPv6 must be explicitly enabled on each cOS Core Ethernet interface for it to function on that interface. More specifically, any IPv6 traffic that is routed to an Ethernet interface will require that interface to have IPv6 enabled. In the case of IPsec, this applies to traffic that sets up the tunnel but not to traffic that flows inside the tunnel. By default, IPv6 is disabled for all interfaces.

At the same time that an interface is enabled for IPv6, an IPv6 address and IPv6 network (prefix) must be assigned to it. The interface can then be used in rules and routes with IPv6 properties.

Example 3.12. Enabling IPv6 on an Ethernet Interface

This example enables IPv6 on the wan Ethernet interface using the address objects created previously.

Command-Line Interface

Device:/> set Interface Ethernet wan
			EnableIPv6=Yes
			IPv6IP=wan_ip6
			IPv6Network=wan_net6

InControl

Follow similar steps to those used for the Web Interface below.

Web Interface

  1. Go to: Network > Interfaces and VPN > Ethernet > wan
  2. Enable the option: Enable IPv6
  3. Now enter:
    • IP Address: wan_ip6
    • Network: wan_net6
  4. Click OK

An IPv6 gateway address could also be entered for the interface if it is connected to an ISP router.

An Interface Route is Added Automatically

When an IPv6 address and network are assigned to an Ethernet interface (both are required) then an IPv6 route for that interface should be added to the main routing table.

The route is added, provided that the automatic route creation for the interface is enabled (it is enabled by default).

Alternative Methods of Creating Interface Address Objects

IPv6 address objects are created in the cOS Core address book as objects which are distinct from IPv4 objects.

Only the all-nets6 object (IPv6 address ::/0) is already predefined in the cOS Core address book. This means that the IPv6 address and network objects associated with interfaces must be created. This can be done in one of the following ways:

The Auto Configure Option

If the DHCPv6 client option is not enabled on an interface then there is an alternative method for automatically allocating IPv6 addresses to the interface. By enabling the Auto Configure IP Address property on an interface, cOS Core will calculate an IPv6 address using the Extended Unique Identifier (EUI-64) algorithm.

The EUI-64 algorithm requires a /64 (64 bit) IPv6 network from which to choose the IP address. This /64 network can come from one of the following two sources:

Example 3.13. Manually Adding IPv6 Interface Addresses

Assume that an IPv6 address and network have to be associated with the wan Ethernet interface. This example adds two new IPv6 address objects to the address book consisting of the network wan_net6 (the IPv6 prefix 2001:DB8::/32) and the single IP address wan_ip6 (2001:DB8::1) within that network.

Command-Line Interface

Device:/> add Address IP6Address wan_net6 Address=2001:DB8::/32
Device:/> add Address IP6Address wan_ip6 Address=2001:DB8::1

InControl

Follow similar steps to those used for the Web Interface below.

Web Interface

Add the network address (the IPv6 prefix):

  1. Go to: Objects > Address Book > Add > IP6 Address
  2. Specify a suitable name for the object, in this case: wan_net6
  3. Enter 2001:DB8::/32 for the IP6 Address
  4. Click OK

Add the IP address:

  1. Go to: Objects > Address Book > Add > IP6 Address
  2. Specify a suitable name for the object, in this case: wan_ip6
  3. Enter 2001:DB8::1 for the IP6 Address
  4. Click OK

IPv4 and IPv6 Cannot Share an Address Group Object

IPv6 address objects are created and managed in a similar way to IPv4 objects They are called an IP6 Address and can be used in cOS Core rules and other objects in the same way as an IPv4 address. However, it is not possible to combine the two in one configuration object.

For example, it is not possible to create an Address Group that contains both. The standard Address Group object can contain only IPv4 address objects. For IPv6 there is a special object called an IP6 Group object that can contain only IPv6 addresses.

The all-nets6 Address Object

The predefined all-nets address object is a catch-all object only for all IPv4 addresses. Another object, all-nets6, represents all IPv6 addresses and only IPv6 addresses.

Furthermore, it is not possible to combine all-nets (all IPv4 addresses) with all-nets6 in a single Address Group object. For example, if a DropAll rule is needed as the last "catch-all" rule in an IP rule set, two rules are required to catch all IPv4 and IPv6 traffic. This is discussed further in Section 3.6, IP Rule Sets.

In the same way, a routing table could route traffic for either an IPv4 network or an IPv6 network to the same interface but this must be done with two separate routes in the routing table, one for IPv4 and one for IPv6. It cannot be achieved using a single route.

Enabling IPv6 Router Advertisement

An additional option for an Ethernet interface is to enable IPv6 router advertisement. This means that any external client connected to the interface can solicit and receive IPv6 messages to allow it to perform Stateless Address Auto-Configuration (SLAAC). The SLAAC process allows the client to create its own unique global IPv6 address based on the MAC address of its interface and the prefix of the IPv6 address for the cOS Core interface it is connected to.

Example 3.14. Enabling IPv6 Advertisements

This example enables IPv6 advertisements on the wan Ethernet interface.

Command-Line Interface

Device:/> set Interface Ethernet wan EnableRouterAdvertisement=Yes

InControl

Follow similar steps to those used for the Web Interface below.

Web Interface

  1. Go to: Network > Interfaces and VPN > Ethernet > wan
  2. Go to: Advanced and enable the option: Enable router advertisement for this interface
  3. Click OK

Enabling ICMP Error Pass Through

Unlike IPv4, fragmentation of IPv6 packets is only done by the originating host using the host's selection of MTU size. Should the packets then encounter network equipment that cannot handle the chosen MTU size, ICMP error messages are sent back to the originating host to indicate that the MTU must be reduced and the packets resent.

For this reason, it is recommended to always enable the Pass returned ICMP errors messages from destination property for any Service object used with an IP rule set entry for IPv6 traffic. An alternative to this is to set up IP rule set entries which explicitly allow the ICMP error messages in both directions.

The exception is if the MTU is initially set to 1280 which is the minimum MTU supported by IPv6. In this case, there is no need for ICMP messages to be passed since they should not occur.

IPv6 Neighbor Discovery

IPv6 Neighbor Discovery (ND) is the IPv6 equivalent of the IPv4 ARP protocol.

When IPv6 is enabled for a given Ethernet interface, cOS Core will respond to any IPv6 Neighbor Solicitations (NS) sent to that interface with IPv6 Neighbor Advertisements (NA) for the IPv6 address configured for that interface. cOS Core will also respond with neighbor advertisements for any networks configured using Proxy Neighbor Discovery.

cOS Core maintains a neighbor discovery cache for IPv6 and the contents of this cache are visible when displaying the neighbor cache (this is described further in Section 3.5.5, The Neighbor Cache).

Proxy Neighbor Discovery

The IPv6 feature of Proxy Neighbor Discovery (Proxy ND) in cOS Core functions in the same way as Proxy ARP does with IPv4 (described in Section 4.2.6, Proxy ARP). There are two ways of enabling proxy ND:

Example 3.15. Adding an IPv6 Route and Enabling Proxy ND

Assume that a route needs to be in the main routing table so that the IPv6 network my_ipv6_net is routed on the interface If1 where that interface already has IPv6 enabled.

In addition, proxy neighbor discovery for my_ipv6_net needs to be enabled for the If3 interface.

Command-Line Interface

First, change the CLI context to be the main routing table:

Device:/> cc RoutingTable main

Add the IPv6 route:

Device:/main> add Route6 Network=my_ipv6_net
			Interface=If1
			ProxyNDInterfaces=If3

Lastly, return to the default CLI context:

Device:/main> cc
Device:/> 

InControl

Follow similar steps to those used for the Web Interface below.

Web Interface

  1. Go to: Network > Routing > Routing Tables > main > Add > RouteIPv6
  2. Now enter:
    • Interface: If1
    • Network: my_ipv6_net
  3. Go to: Proxy ND and move the interface If3 from Available to Selected
  4. Click OK

Troubleshooting IPv6 with ICMP Ping

The CLI command ping can be used for both IPv4 and IPv6 addresses. For example:
Device:/> ping 2001:DB8::2
This provides the means to determine if an IPv6 host is reachable and responding.

Ping can also be initiated in the Web Interface by going to: Status > Tools > Ping.

Outgoing ICMP messages from the firewall do not require an IP rule set entry which allows them since the gateway is trusted. However, if the firewall is to be pinged by an external host then an IP rule set entry must be set up to allow this, just as it is needed for IPv4. Such an entry would use the predefined Service object called ping6-inbound The service object called all_icmpv6 covers all IPv6 ICMP messages except mobile ICMP messages.

An appropriate IP rule set entry to allow cOS Core to respond to IPv6 ping messages would be the following:

Action Source
Interface
Source
Network
Destination
Interface
Destination
Network
Service
Allow wan all-nets6 core wan_ip6 ping6-inbound

The above rule assumes that IPv6 has been enabled on the wan interface.

A general discussion of ping and its options along with IPv4 usage can be found in Section 2.6.2, The ping Command.

IPv6 Usage Restrictions

The following is a summary of IPv6 restrictions in the current version of cOS Core:

IPv6 and High Availability

cOS Core High Availability (HA) fully supports IPv6 and any IPv6 configuration objects will be mirrored on both the HA master and slave units.

The address book object IP6 HA Address is the IPv6 equivalent of the IP4 HA Address object. This allows both shared and private IPv6 addresses to be assigned to interface pairs in an HA cluster. Private interface IPv6 addresses cannot be used for management access or as the source address for logging but they can be used for responding to ICMP ping messages when a cluster is active or for sending such messages when the cluster is inactive.

See Section 12.3, Setting Up HA for further discussion of using IP6 HA Address objects with an HA cluster.

IPv6 and Transparent Mode

Transparent Mode in cOS Core does not directly support IPv6 since Switched Routes cannot be defined for IPv6 networks (see Section 4.9, Transparent Mode).

However, it is possible to split networks transparently in the same way that Proxy ARP is used for this with IPv4. Doing this for IPv4 is explained in Section 4.2.6, Proxy ARP. The only difference with IPv6 is that Neighbor Discovery (ND) is used instead of proxy ARP. The method is otherwise the same and the two can be used alongside each other to split both IPv4 and IPv6 networks at the same time.

Tunneling IPv6 Across IPv4 Networks

cOS Core allows the tunneling of IPv6 traffic across networks that only support IPv4. This can be done using an IP6in4 Tunnel object. This is described further in Section 3.4.8, 6in4 Tunnels.

Tunneling IPv6 Through IPv4 IPsec Tunnels

The 6in4 tunneling solution does not provide encryption. For that, IPv6 traffic should be tunneled through an IPv4 IPsec tunnel. Setting this up is discussed in an article in the Clavister Knowledge Base at the following link:

https://kb.clavister.com/324736072

Using Neighbor Discovery Advanced Settings

This section will look more closely at configuring Neighbor Discovery (ND) for IPv6. In particular, it examines the cOS Core neighbor discovery cache.

Neighbor discovery handling in cOS Core resembles ARP handling in that a cache is maintained in local memory of IPv6 hosts, retaining information about external host's link-layer and IP address tuples. Below is a summary of the cOS Core ND cache states (these are also defined in RFC-4861):

Neighbor entries appear in the cache for the following reasons:

The key advanced settings for neighbor discovery are found in the ARPNDSettings object and include the following properties:

All settings relevant to neighbor discovery can be found in the separate cOS Core CLI Reference Guide under the object name ARPNDSettings.

IPv6 Special Address Ranges

In IPv6, the fe80::/10 address range is reserved for link-local unicast addresses. These addresses are automatically generated by devices when IPv6 is enabled on an interface. They play a crucial role in local network communication and are used for tasks such as Neighbor Discovery and communication within the same network segment. Unlike global unicast addresses, link-local addresses do not require manual configuration and are automatically associated with the respective network interface.
In summary, when working with IPv6 on Clavister cOS Core, it's essential to understand the automatic assignment and handling of special address ranges, such as link-local addresses in the fe80::/10 range, and multicast addresses like those used for Router Solicitation and Duplicate Address Detection (ff02::/16). These aspects are crucial for smooth IPv6 operation and are managed seamlessly by the IPv6 protocol stack, eliminating the need for manual configuration