DHCP6 client

David Horn dhorn2000 at gmail.com
Mon Jan 18 21:31:38 UTC 2010


On Sun, Jan 17, 2010 at 5:02 PM, Brett Lee <Brett.Lee at sun.com> wrote:
> Brett Lee wrote:
>>
>> Hello -
>>
>> Am using FreeBSD 6.3 as a dhcp6 client, trying to get DDNSv6 operational
>> in this environment.  When I execute 'dhcp6c -d lnc0' from the command line,
>> the following messages are logged on the (ISC 4.1.0p1) DHCP6 server:
>>
>> Solicit message from fe80::20c:29ff:fef3:a5de port 546, transaction ID
>> 0xB3D95D
>> Unable to pick client prefix: no IPv6 prefix pools on this shared network
>> Sending Advertise to fe80::20c:29ff:fef3:a5de port 546
>>
>> Am confused by the message above, in particular the "prefix pools", as
>> this host obtains the "global address" prefix and configures both link local
>> and global addresses via SLAAC.  Surely this can't be the same prefix.
>>
>> Equally confusing is that the Solaris hosts on this LAN have no problem
>> getting v6 addresses via this DHCP server, and there seems to be plenty of
>> free leases available.
>>
>> Does FreeBSD 6.3 DHCP6 client need a "prefix", or a "pool" of them to be
>>  delivered by the server?  Obviously I'm a little bit confused :) and am
>> thinking the problem is with the dhcpd.conf file.  Hoping for some
>> clarification or direction.  Configs are below.
>>
>> Thanks for your guidance/suggestions!  -Brett
>>
>> Client:
>>
>> [root at freebsdvm ~]# ifconfig -a
>> lnc0: flags=108843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,NEEDSGIANT> mtu
>> 1500
>>        inet6 fe80::20c:29ff:fef3:a5de%lnc0 prefixlen 64 scopeid 0x1
>>        inet 192.168.1.94 netmask 0xffffff00 broadcast 192.168.1.255
>>        inet6 2bad:0:564:1:20c:29ff:fef3:a5de prefixlen 64 autoconf
>>        ether 00:0c:29:f3:a5:de
>> plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
>> lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
>>        inet6 ::1 prefixlen 128
>>        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
>>        inet 127.0.0.1 netmask 0xff000000
>> [root at freebsdvm ~]# grep -v '#' /usr/local/etc/dhcp6c.conf
>> interface lnc0 {
>>        send ia-pd 0;
>> };
>> id-assoc pd {
>>        prefix-interface lnc0 {
>>                sla-id 1;
>>        };
>> };
>> [root at freebsdvm ~]#
>>
>> Server:
>>
>> [root at solaris10u4sparc named]# grep iaaddr /var/db/dhcpd6.leases | sort |
>> uniq
>>  iaaddr 2bad:0:564:1::12 {
>>  iaaddr 2bad:0:564:1::18 {
>>  iaaddr 2bad:0:564:1::19 {
>>  iaaddr 2bad:0:564:2::18 {
>>  iaaddr 2bad:0:564:2::19 {
>>  iaaddr 2bad:0:564:3::18 {
>> [root at solaris10u4sparc named]# grep -v '#' /etc/dhcpd.conf | egrep
>> '[A-Z]|[a-z]|[0-9]'
>> authoritative;
>> include "/etc/rndc.key";
>> ddns-update-style       interim;
>> ddns-domainname         "ipv6.apevt.local";
>> ddns-rev-domainname     "in-addr.arpa";
>> ignore                  client-updates;
>> zone ipv6.apevt.local. {
>>        primary 192.168.1.23;
>>        key "rndc-key";
>> log-facility local6;
>> min-lease-time 60;
>> default-lease-time 3600;
>> max-lease-time 43200;
>> option domain-name "ipv6.apevt.local";
>> option domain-name-servers 192.168.1.254, 192.168.1.23;
>> option dhcp.domain-search "ipv6.apevt.local, apevt.local";
>> option dhcp6.domain-search "ipv6.apevt.local, apevt.local";
>> option dhcp6.name-servers 2bad:0:564:1:203:baff:fee8:36f2,
>> 2bad:0:564:2:203:baff:fee8:36f3, 2bad:0:564:3:203:baff:fee8:36f4;
>> subnet6 2bad:0000:0564:0001::/64 {
>>   allow unknown-clients;
>>   min-lease-time 60;
>>   default-lease-time 60;
>>   max-lease-time 60;
>>   range6 2bad:0000:0564:0001::10 2bad:0000:0564:0001::19;
>> subnet6 2bad:0000:0564:0002::/64 {
>>   allow unknown-clients;
>>   min-lease-time 60;
>>   default-lease-time 60;
>>   max-lease-time 60;
>>   range6 2bad:0000:0564:0002::10 2bad:0000:0564:0002::19;
>> subnet6  2bad:0000:0564:0003::/64 {
>>   allow unknown-clients;
>>   min-lease-time 60;
>>   default-lease-time 60;
>>   max-lease-time 60;
>>   range6 2bad:0000:0564:0003::10 2bad:0000:0564:0003::19;
>> [root at solaris10u4sparc named]#
>>
>
> Seems I misconfigured dhcp6c.conf to request a pool of addresses for
> delivery downstream instead of a single stateful address.  Now using the
> current FreeBSD, 8.0-RELEASE, with dhcp6c.conf setup as seen below:
>
> interface le0 {
>        send ia-na 0;           # request stateful address
>        request domain-name;
>        request domain-name-servers;
> }
> id-assoc na 0 {
> }
>
> It works.  On to DDNSv6.  -Brett
>

The dhcp6c client is the wide-dhcpv6 client (I am guessing you
installed from port net/dhcp6).  If you are trying to do ddnsv6 using
dhcpv6, you might have better luck with using the ISC dhcpv6 client at
the same patchlevel as the server.  (You will need to compile on your
own, as ISC 4.1 dhcp does not seem to be in the freebsd ports
collection at this time).

In my own testing, I also needed to tell dhclient (ISC variant)'s
dhclient-script how to locate ifconfig and route (simple script change
from ifconfig to /sbin/ifconfig and from route to /sbin/route).

Take a look at the dhclient.conf (5) man page from the ISC package
under "DYNAMIC DNS".  You will likely need a dhclient.conf with items
like:

    send fqdn.fqdn "test.example.com.";
    send fqdn.encoded on;
    send fqdn.server-update off;
    also request dhcp6.fqdn;

This also assumes that the ISC dhcpd server is configured with
appropriate information to actually have the server perform updates.
I have not actually turned ddns on with DHCPv6 yet, so these are just
suggestions.  According to RFC 4704, the protocol supports either
client or server actually performing the updates, but not certain
which cases work properly with ISC at this point.

Please share if/when you get a working configuration with any dhcpv6
client/server combination.

Good Luck.

---Dave Horn


More information about the freebsd-net mailing list