As reported in T3134, per-interface DHCPv6 DUIDs are not supported by WIDE dhcp6c. Fork the client and implement support for them.
Description
Details
- Difficulty level
- Unknown (require assessment)
- Version
- -
- Why the issue appeared?
- Will be filled on close
- Is it a breaking change?
- Perfectly compatible
- Issue type
- Improvement (missing useful functionality)
Related Objects
- Mentioned In
- T3134: DHCPv6 DUID configuration node missing
- Mentioned Here
- T3134: DHCPv6 DUID configuration node missing
Event Timeline
Hi @stepler,
WOW! Any chance getting this upstreamed? That would be the overall best solution - I still like it and think we should add it, but fetching the source from upstream reduces our maintenance load.
After solving this requirement of vyos and confirming its normal operation, it is recommended to provide a feedback repair patch and submit a pr
Added CI Job: https://ci.vyos.net/job/vyos-build-wide-dhcpv6/
Added Patches: https://github.com/vyos/vyos-build/blob/current/packages/wide-dhcpv6/patches/0023-dhcpc6-support-per-interface-client-DUIDs.patch
Will be part of the next 1.4 ISO and could be if tested good backported into 1.3
Looks good on 1.4-rolling-202101270854:
vyos@vyos:~$ configure [edit] vyos@vyos# set interfaces ethernet eth0 address dhcpv6 [edit] vyos@vyos# set interfaces ethernet eth0 dhcpv6-options duid 00:02:00:00:0d:e9:30:30:31:45:34:36:2d:58:58:58:58:58:58:58:58:58:58:58:58:58:58 [edit] vyos@vyos# commit [edit] vyos@vyos# exit Warning: configuration changes have not been saved. exit vyos@vyos:~$ show version Version: VyOS 1.4-rolling-202101270854 Release Train: sagitta Built by: [email protected] Built on: Wed 27 Jan 2021 08:54 UTC Build UUID: df336741-0ecd-4ec5-b765-aa5c1b35831c Build Commit ID: 37b270bab20d9f Architecture: x86_64 Boot via: installed image System type: KVM guest Hardware vendor: QEMU Hardware model: Standard PC (Q35 + ICH9, 2009) Hardware S/N: Hardware UUID: df70cccc-4524-4d73-a493-ac63fcc933b8 Copyright: VyOS maintainers and contributors
Output of tshark -pi virbr0 -f "port dhcpv6-server" -VO dhcpv6 -c 1:
Capturing on 'virbr0' Frame 1: 127 bytes on wire (1016 bits), 127 bytes captured (1016 bits) on interface virbr0, id 0 Ethernet II, Src: RealtekU_d8:9b:b6 (52:54:00:d8:9b:b6), Dst: IPv6mcast_01:00:02 (33:33:00:01:00:02) Internet Protocol Version 6, Src: fe80::5054:ff:fed8:9bb6, Dst: ff02::1:2 User Datagram Protocol, Src Port: 546, Dst Port: 547 DHCPv6 Message type: Solicit (1) Transaction ID: 0x6cd4f5 Client Identifier Option: Client Identifier (1) Length: 27 Value: 000200000de93030314534362d5858585858585858585858… DUID: 000200000de93030314534362d5858585858585858585858… DUID Type: assigned by vendor based on Enterprise number (2) Enterprise ID: Broadband Forum (previously 'DSL Forum') (3561) Identifier: 3030314534362d5858585858585858585858585858 Identity Association for Non-temporary Address Option: Identity Association for Non-temporary Address (3) Length: 12 Value: 000000000000000000000000 IAID: 00000000 T1: 0 T2: 0 Elapsed time Option: Elapsed time (8) Length: 2 Value: 0000 Elapsed time: 0ms Option Request Option: Option Request (6) Length: 4 Value: 00170018 Requested Option code: DNS recursive name server (23) Requested Option code: Domain Search List (24) 1 packet captured
Found a minor bug: if DHCPv6 PD is configured without requesting an IPv6 address, the configured DUID is not sent.
Looks good on 1.4-rolling-202101280218:
vyos@vyos:~$ configure [edit] vyos@vyos# set interfaces dummy dum0 [edit] vyos@vyos# set interfaces ethernet eth0 dhcpv6-options pd 0 interface dum0 [edit] vyos@vyos# set interfaces ethernet eth0 dhcpv6-options duid 00:02:00:00:0d:e9:30:30:31:45:34:36:2d:58:58:58:58:58:58:58:58:58:58:58:58:58:58 [edit] vyos@vyos# commit [edit] vyos@vyos# exit Warning: configuration changes have not been saved. exit vyos@vyos:~$ show version Version: VyOS 1.4-rolling-202101280218 Release Train: sagitta Built by: [email protected] Built on: Thu 28 Jan 2021 02:18 UTC Build UUID: 959140d2-44da-4efc-be7f-f50c7d2f63e5 Build Commit ID: 37b270bab20d9f Architecture: x86_64 Boot via: installed image System type: KVM guest Hardware vendor: QEMU Hardware model: Standard PC (Q35 + ICH9, 2009) Hardware S/N: Hardware UUID: d7e85bbb-ff78-4726-ab5b-831200623857 Copyright: VyOS maintainers and contributors
Output of tshark -pi virbr0 -f "port dhcpv6-server" -VO dhcpv6 -c 1:
Capturing on 'virbr0' Frame 1: 148 bytes on wire (1184 bits), 148 bytes captured (1184 bits) on interface virbr0, id 0 Ethernet II, Src: RealtekU_d6:87:ac (52:54:00:d6:87:ac), Dst: IPv6mcast_01:00:02 (33:33:00:01:00:02) Internet Protocol Version 6, Src: fe80::5054:ff:fed6:87ac, Dst: ff02::1:2 User Datagram Protocol, Src Port: 546, Dst Port: 547 DHCPv6 Message type: Solicit (1) Transaction ID: 0xda3d58 Client Identifier Option: Client Identifier (1) Length: 27 Value: 000200000de93030314534362d5858585858585858585858… DUID: 000200000de93030314534362d5858585858585858585858… DUID Type: assigned by vendor based on Enterprise number (2) Enterprise ID: Broadband Forum (previously 'DSL Forum') (3561) Identifier: 3030314534362d5858585858585858585858585858 Elapsed time Option: Elapsed time (8) Length: 2 Value: 0000 Elapsed time: 0ms Identity Association for Prefix Delegation Option: Identity Association for Prefix Delegation (25) Length: 41 Value: 000000000000000000000000001a0019ffffffffffffffff… IAID: 00000000 T1: 0 T2: 0 IA Prefix Option: IA Prefix (26) Length: 25 Value: ffffffffffffffff40000000000000000000000000000000… Preferred lifetime: infinity Valid lifetime: infinity Prefix length: 64 Prefix address: :: 1 packet captured
Looks good on 1.3-beta-202102010443:
vyos@vyos:~$ configure [edit] vyos@vyos# set interfaces dummy dum0 [edit] vyos@vyos# set interfaces ethernet eth0 dhcpv6-options pd 0 interface dum0 [edit] vyos@vyos# set interfaces ethernet eth0 dhcpv6-options duid 00:02:00:00:0d:e9:30:30:31:45:34:36:2d:58:58:58:58:58:58:58:58:58:58:58:58:58:58 [edit] vyos@vyos# commit [edit] vyos@vyos# exit Warning: configuration changes have not been saved. exit vyos@vyos:~$ show version Version: VyOS 1.3-beta-202102010443 Release Train: equuleus Built by: [email protected] Built on: Mon 01 Feb 2021 04:43 UTC Build UUID: f0edd61b-8868-4537-913a-a4bce3f3ec11 Build Commit ID: 070e2e77e93f34 Architecture: x86_64 Boot via: installed image System type: KVM guest Hardware vendor: QEMU Hardware model: Standard PC (Q35 + ICH9, 2009) Hardware S/N: Hardware UUID: 965e3c00-1113-4e3d-828a-c2f1394e5c99 Copyright: VyOS maintainers and contributors
Output of tshark -pi virbr0 -f "port dhcpv6-server" -VO dhcpv6 -c 1:
Capturing on 'virbr0' Frame 1: 148 bytes on wire (1184 bits), 148 bytes captured (1184 bits) on interface virbr0, id 0 Ethernet II, Src: RealtekU_5b:ad:86 (52:54:00:5b:ad:86), Dst: IPv6mcast_01:00:02 (33:33:00:01:00:02) Internet Protocol Version 6, Src: fe80::5054:ff:fe5b:ad86, Dst: ff02::1:2 User Datagram Protocol, Src Port: 546, Dst Port: 547 DHCPv6 Message type: Solicit (1) Transaction ID: 0xc4f14a Client Identifier Option: Client Identifier (1) Length: 27 Value: 000200000de93030314534362d5858585858585858585858… DUID: 000200000de93030314534362d5858585858585858585858… DUID Type: assigned by vendor based on Enterprise number (2) Enterprise ID: Broadband Forum (previously 'DSL Forum') (3561) Identifier: 3030314534362d5858585858585858585858585858 Elapsed time Option: Elapsed time (8) Length: 2 Value: 0000 Elapsed time: 0ms Identity Association for Prefix Delegation Option: Identity Association for Prefix Delegation (25) Length: 41 Value: 000000000000000000000000001a0019ffffffffffffffff… IAID: 00000000 T1: 0 T2: 0 IA Prefix Option: IA Prefix (26) Length: 25 Value: ffffffffffffffff40000000000000000000000000000000… Preferred lifetime: infinity Valid lifetime: infinity Prefix length: 64 Prefix address: :: 1 packet captured
Not working for me as expected in 1.3.0-rc4
In my current working configuration, the duid is in the /var/lib/dhcpv6/dhcp6c_duid file (29 bytes).
With:
set interfaces ethernet eth3 vif 0 dhcpv6-options duid 00:02:00:00:0d:e9:30:30:31:45:34:36:2d:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
the send client-id gets properly configured in file /run/dhcp6c/dhcp6c.eth3.0.conf
However, the content of /var/lib/dhcpv6/dhcp6c_duid gets replaced so the file size is 16 bytes and dhcp6c stops getting any PDs.
Verified working in GNS3 on 1.3.0-rc4. Note that /var/lib/dhcpv6/dhcp6c_duid is not used if send client-id is configured.