IPv6 Prefix Delegation, Static Routes, and GPON Packet Padding

This article is contributed by @Cang_Household .

This article details some standard and advanced knowledge. The official support may not cover the knowledge detailed here. As usual, (the lawyers would argue that) you are responsible for all the changes made on your devices and plans. This article does not provide warranties of any kind. By following the knowledge detailed in this article, you agree to hold both the article authors and Verizon harmless.

(Under Construction...) 🚧

IPv6 Prefix Delegation

Verizon implements the following IPv6 addressing mechanism.

  1. CPE routers start by soliciting an IPv6 default route (ICMPv6 RS packet). 
  2. The upstream server replies by advertising a route with an ICMPv6 RA packet. The "m" (managed) bit in this packet is set to 1 indicating that the client should start the DHCPv6 process.
  3. The CPE routers  transmit a DHCPv6 solicit packet (first of the SARR process).
  4. The dhcpv6 server will grant the client a /56 prefix from a pool of prefixes and will complete the SARR process with the client.
  5. The router then addresses its WAN and LAN addresses based on the /56 prefix it received from the server.
      a. For the WAN address it assigns the first 2 bytes of the host part of the address and the very last bit are assigned 1 ( so in hex/ipv6 notation its ff::1)
      b. For the LAN, the first /64 from the /56 is used and the Router takes the first address (so whatever the value of the 56 and then 00::1/64)

For endpoint to endpoint IPv6 routing, intermediate routers between the endpoints do not need to have globally routable IPv6 addresses because using the link-local IPv6 addresses is more than sufficient.

There are currently no plans on rolling out IPv6 on NG-PON 2 circuits.

There are currently no plans on rolling out IPv6 on static IP circuits.

Static Routes

Static routes should be used when a /64 subnet of the assigned /56 block is used as a transit network to reach other /64 subnets.

There are plans on implementing a bash script that would update all relevant static routes if the dynamic /56 prefix were to change.

GPON Packet Padding

Some ONT/OLT combinations would add paddings to packets that are less than 100 megabytes in size., but would not correct the checksum. Apparently, it was needed for some older ActionTec routers (but isn't IPv6 deployment is a recent phenomenon?). NICs would reject these packets and cause packet losses.

As of Jan 27, 2025, an ONT/OLT firmware update was pumped out rather laboriously to reach the majority of the footprint.

An ACS command was issued to about 10k routers to see if these customers would still call in to complain about packet losses. The roll out is reflected in APNIC IPv6 Adoption probes.

Vendor Specific Configurations

I only have the following equipment at hand for testing. The following vendor configurations should be generalizable to other enterprise or consumer vendors. Disclaimer: Neither the article authors, nor Verizon, endorse any of their products.

Mikrotik

To request a /56 prefix, use DHCPv6 Client on WAN interface. Prefix length is 56.

DHCPv6 Client SettingDHCPv6 Client Setting

Strictly speaking, to route across networks, the router itself does not need a global unicast IPv6 address. Unless you need the router's WAN interface to be globally accessible, which has security ramifications. I choose 00::1/64 as the subnet for the WAN interface. You don't need such a large subnet, but whatever.

[TODO: there is a way to get a deterministic address as <prefix_from_56_pool>00::1/64

image.png

For internal networks, you can assign further /64 subnets to them. The distribution of addresses can be SLAAC or DHCPv6. For DHCPv6, there is currently no way to make a smaller /64 pool to dynamically reference the prefix of the larger /56 pool.

Directly Connected routes are automatically populated as expected.

IPv6 PoolsIPv6 Pools

Cisco IOS XE

Vanilla 🍨 Box (Alpine Linux)