On 21 November 2015 at 02:27, Owen DeLong <owen@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. Regards, Baldur