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