Using an *external* DHCPv6 server for prefix-delegation in conjunction with PPPoE

Per Carlson pelle at hemmop.com
Thu Jan 13 13:42:06 CET 2011


Hi

> Interesting.  With PVI's I had no issue on the 7206VXR or 7609-S running
> 12.2(33)SRE2.  I have you tried the "ipv6 dhcp relay source xxxx" option, so
> that the source is specified?

Yes, but that does solve anything. Here's two tshark captures illustrating it:

Without "dhcp-relay source":

Internet Protocol Version 6
    Source: fd00:8c0:3::91 (fd00:8c0:3::91)
    Destination: fd00:8c0:1::20 (fd00:8c0:1::20)
DHCPv6
    Message type: Relay-forw (12)
    Hop count: 0
    Link-address: ::
    Peer-address: fe80::219:aaff:fe85:9981


With "dhcp-relay source":

Internet Protocol Version 6
    Source: fd00:8c0:2116::1:7 (fd00:8c0:2116::1:7)
    Destination: fd00:8c0:1::20 (fd00:8c0:1::20)
DHCPv6
    Message type: Relay-forw (12)
    Hop count: 0
    Link-address: ::
    Peer-address: fe80::219:aaff:fe85:9981


In both cases there is no link address and just a link local peer
address, it's just the source of the IPv6 frame that's changed. And
isc-dhcpd doesn't use that info when selecting the subnet6 clause (see
below).

> BTW, I would recommend running ISC dhcp v4.2 or later.  There's IPv6-related
> items fixed/working in v4.2.

Yes, but I'm running Debian on the server, and it's only 4.1.1 that's
pre-packaged. Unfortunately 4.2 won't be available in the next release
(squeeze) either.

Anyway, looking at the 4.2 sources reveals what isc-dhcpd is lookng
for. The function mapping packet to subnets
(shared_network_from_packet6) starts at line 4159 in the file
server/dhcpv6.c. The comments says it all:

1)
/*
 * First, find the link address where the packet from the client
 * first appeared (if this packet was relayed).
 */

pseudo code: looking for an link address which is neither unspecified
nor link local.

/*
 * If there is a relayed link address, find the subnet associated
 * with that, and use that to get the appropriate
 * shared_network.
 */


2)
/*
 * If there is no link address, we will use the interface
 * that this packet came in on to pick the shared_network.
 */


That is: first look for the link address in the DHCPv6 packet,
secondly use the interface on the DHCPv6 *server* the packet was
received on.

In practice the second option is not very viable in a SP environment,
which gives you only one option left: make sure the DHCPv6 packet do
have an identifyable link address.

Changing the source address of the relayed packet doesn't help much.

-- 
Pelle

RFC1925, truth 11:
 Every old idea will be proposed again with a different name and
 a different presentation, regardless of whether it works.


More information about the ipv6-ops mailing list