Package: isc-dhcp-client
Version: 4.4.3-P1-5
Severity: important
Tags: ipv6
X-Debbugs-Cc: deb...@gibson.dropbear.id.au

Dear Maintainer,

>From dhclient-script(8) describint the PREINIT action:
    The DHCP client is requesting that an interface be configured as
    required in order to send packets prior to receiving an actual ad-
    dress. [..]

To that end the script will bring up the interface if it is not
already up.  However for DHCPv6, the client needs a working (non
tentative) link-local address before it can operate.  After bringing
up the interface there might be several seconds while the kernel runs
Duplicate Address Detection (DAD) before the link-local address is
ready to use.  The PREINIT6 action in dhclient-script should wait for
that to complete before returning.

The upstream example dhclient-script waits in this way[0], as does the
one in Fedora, based on it.  The Debian one, however, does not [1].

This means that if you attempt to "dhclient -6" on a down interface
without first bringing it up and waiting for the link-local address,
it will fail.

This can be reproduced quite easily using the pasta too (passt
package) which will create a network namespace and includes a DHCPv6
server:

$ pasta -I exampleif -- sh -c "dhclient -v -6 exampleif"
Multiple default IPv6 routes, picked first
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

can't create /var/lib/dhcp/dhclient6.leases: Permission denied
Can't bind to dhcp address: Cannot assign requested address
Please make sure there is no other dhcp server
running and that there's no entry for dhcp or
bootp in /etc/inetd.conf.   Also make sure you
are not running HP JetAdmin software, which
includes a bootp server.

If you think you have received this message due to a bug rather
than a configuration issue please read the section on submitting
bugs on either our web page at www.isc.org or in the README file
before submitting a bug.  These pages explain the proper
process and the information we find helpful for debugging.

exiting.

If, instead, time is left for DAD to complete, dhclient will succeed:

$ pasta -I exampleif -- sh -c "ip link set exampleif up; sleep 2; dhclient -v 
-6 exampleif"
Multiple default IPv6 routes, picked first
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

can't create /var/lib/dhcp/dhclient6.leases: Permission denied
Listening on Socket/exampleif
Sending on   Socket/exampleif
Created duid "\000\001\000\001.\243\033v2\351C\327C\333".
can't create /var/lib/dhcp/dhclient6.leases: Permission denied
PRC: Soliciting for leases (INIT).
XMT: Forming Solicit, 0 ms elapsed.
XMT:  X-- IA_NA 43:d7:43:db
XMT:  | X-- Request renew in  +3600
XMT:  | X-- Request rebind in +5400
XMT: Solicit on exampleif, interval 1020ms.
RCV: Advertise message on exampleif from fe80::7eff:4dff:fedf:6a54.
RCV:  X-- IA_NA 43:d7:43:db
RCV:  | X-- starts 1729126134
RCV:  | X-- t1 - renew  +4294967295
RCV:  | X-- t2 - rebind +4294967295
RCV:  | X-- [Options]
RCV:  | | X-- IAADDR 2001:4479:e300:7200:222:4dff:fea6:88f3
RCV:  | | | X-- Preferred lifetime 4294967295.
RCV:  | | | X-- Max lifetime 4294967295.
RCV:  X-- Server ID: 00:01:00:01:2e:a3:1b:74:9a:55:9a:55:9a:55
RCV:  Advertisement recorded.
PRC: Selecting best advertised lease.
PRC: Considering best lease.
PRC:  X-- Initial candidate 00:01:00:01:2e:a3:1b:74:9a:55:9a:55:9a:55 (s: 
10103, p: 0).
XMT: Forming Request, 0 ms elapsed.
XMT:  X-- IA_NA 43:d7:43:db
XMT:  | X-- Requested renew  +3600
XMT:  | X-- Requested rebind +5400
XMT:  | | X-- IAADDR 2001:4479:e300:7200:222:4dff:fea6:88f3
XMT:  | | | X-- Preferred lifetime +7200
XMT:  | | | X-- Max lifetime +7500
XMT:  V IA_NA appended.
XMT: Request on exampleif, interval 940ms.
RCV: Reply message on exampleif from fe80::7eff:4dff:fedf:6a54.
RCV:  X-- IA_NA 43:d7:43:db
RCV:  | X-- starts 1729126135
RCV:  | X-- t1 - renew  +4294967295
RCV:  | X-- t2 - rebind +4294967295
RCV:  | X-- [Options]
RCV:  | | X-- IAADDR 2001:4479:e300:7200:222:4dff:fea6:88f3
RCV:  | | | X-- Preferred lifetime 4294967295.
RCV:  | | | X-- Max lifetime 4294967295.
RCV:  X-- Server ID: 00:01:00:01:2e:a3:1b:74:9a:55:9a:55:9a:55
PRC: Bound to lease 00:01:00:01:2e:a3:1b:74:9a:55:9a:55:9a:55.
can't create /var/lib/dhcp/dhclient6.leases: Permission denied

[0] 
https://github.com/isc-projects/dhcp/blob/572032cb0e514606559de3784e3f7ca8e1539d17/client/scripts/linux#L432
[1] 
https://salsa.debian.org/debian/isc-dhcp/-/blob/master/debian/dhclient-script.linux?ref_type=heads#L389


-- System Information:
Debian Release: trixie/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.11.2-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages isc-dhcp-client depends on:
ii  debianutils  5.20
ii  iproute2     6.11.0-1
ii  libc6        2.40-3

Versions of packages isc-dhcp-client recommends:
ii  isc-dhcp-common  4.4.3-P1-5

Versions of packages isc-dhcp-client suggests:
pn  avahi-autoipd         <none>
pn  isc-dhcp-client-ddns  <none>
pn  resolvconf            <none>

-- no debconf information

Reply via email to