DHCPv6 PD & Routing Questions

Baldur Norddahl baldur.norddahl at gmail.com
Sat Nov 21 08:10:29 UTC 2015

On 21 November 2015 at 02:27, Owen DeLong <owen at delong.com> wrote:

> I mean the router that will deliver the PD to the requesting DHCPv6 client.
> If the DHCPv6 server is on-net, then this will be the requesting client.
> Otherwise, it will be the last relay router.
There is no actual requirement that the relay function runs on a router.
There might be more than one router that needs to know how to route the
prefix. You might be using VRRP and you would need a synchronization
protocol so the backup router also learns the prefix.

I hold that as long nobody cared to write down the obvious implementation
in a RFC, you are in error to assume said implementation. Unfortunately
there are a few CPEs that do exactly that. Fortunately most work correctly.

Also it might be obvious but not all router vendors actually implemented
DHCPv6-PD snooping on the DHCPv6 relay function. Ours did not (yet - they
probably will sometime before unix time wrapover). They can claim no RFC
requires this and be right.

I came around that limitation by implementing predictable assignments. Each
requesting router/CPE will be assigned a fixed WAN address that is tied to
the prefix also assigned. I then inject the routes using Exabgp.

Example exabgp config:

group g1 {
  static {
route 2a00:7660:202::/48 next-hop 2a00:7660:0:2::2;
route 2a00:7660:203::/48 next-hop 2a00:7660:0:2::3;
route 2a00:7660:204::/48 next-hop 2a00:7660:0:2::4;
route 2a00:7660:205::/48 next-hop 2a00:7660:0:2::5;
route 2a00:7660:206::/48 next-hop 2a00:7660:0:2::6;
route 2a00:7660:207::/48 next-hop 2a00:7660:0:2::7;
route 2a00:7660:208::/48 next-hop 2a00:7660:0:2::8;
... and so on

Our DHCPv6 server is then programmed to assign 2a00:7660:0:2::2 to the same
CPE that will get 2a00:7660:202::/48. We also use static assignments based
on the DHCPv6 interface ID option, but this is not a requirement for using
the method.

Injecting the routes using BGP is not strictly necessary. You could use
static routes as well. Our routers have a limitation on how many static
routes are allowed, the routes fill up the config and it is error prone to
keep multiple routers in sync. For this reason I implemented route
injection using Exabgp instead and it works great.

We are not using a trigger on the DHCPv6 server. Instead the routes are
computed and injected well before the client connects to the network for
the first time. The method would also work well with a dynamically trigger
based approach.



More information about the NANOG mailing list