I've found a solution for a situation where proxmox VE (and also PBS) has to get both IPv4 and IPV6 IP addresses via DHCP/DHCP6 (not only SLAAC).
Synopsis:
In my setup the OpenWRT router serves as an integrated DNS, DHCP and DHCP6 server. And I get a dynamic IPv6 /56 prefix delegation from my ISP. It is usually the same but sometimes can change after my router is switched off for some time, so I need a robust solution with permanent IPv4 addresses and IPv6 suffixes but dynamic IPv6 prefixes. So static configuration is out of consideration. And the DNS creates and serves IPv6 A/AAAA records only if there is an active DHCP/DHCP6 lease.
So I
have to use DHCP
and DHCP6 simultaneously with multiple static reservations (it staples IPv4 addresses and IPv6 suffixes).
ifupdown + ISC dhclient worked fine but is out of consideration because of PVE's strict dependency on ifupdown2
ifupdown2 + ISC dhclient doesn't work for some reason (DHCP6 requests fail at boot)
Solution:
1. I removed ISC dhcp client and installed a full dhcpcd package (not only dhcpcd-base):
apt -y install dhcpcd && apt -y purge isc-dhcp-common isc-dhcp-client
This not only installs the binary but also creates a daemon in systemd tree
2. Since dhcpcd doesn't give a f..ck about /etc/network/interfaces, I marked all of the interfaces as manual (so ifupdown2 doesn't spam syslog about absent dhclient) and used the "up" parameter for vmbr0 to specify up-command as dhcpcd doesn't apply IP addresses to bridges by default
Code:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto enp33s0f0
iface enp33s0f0 inet manual
auto enp33s0f1
iface enp33s0f1 inet manual
auto bond0
iface bond0 inet manual
bond-slaves enp33s0f0 enp33s0f1
bond-miimon 100
bond-mode 802.3ad
auto vmbr0
iface vmbr0 inet manual
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge_maxwait 0
up dhcpcd vmbr0
3. In /etc/dhcpcd.conf one line has to be added so dhcpcd doesn't try to apply IP addresses to tun, tap and physical bridged or bonded interfaces and only applies it to the bridge:
In virtual machines I use "allowinterfaces e*" instead so it doesn't mess with docker networks and the like. And i always uncomment "slaac hwaddr" and comment out "slaac private" since I don't need this unpredictability at home.
For static IPv4 and only IPv6 via DHCP6, those parameters have to be specified in /etc/dhcpcd.conf, see its manual.
If you need DHCP4 only or DHCP IPv4 and SLAAC IPv6, the default installation should work.
Hope guys at Cumulus networks or Proxmox create an official solution soon for DHCP6 without dependency on deprecated or EOL packages.