(crosspost: Network stack exchange)
I have a setup with Proxmox connected via WiFi. Everything works for my needs and IPv4 connectivity too.
Now, I want to see if it is possible to do some DHCPv6 setup so that my virtual machines have IPv6 addresses as well. I'd prefer a setup without NAT, but it's not mandatory that it is so.
I'm taking a few options into consideration for IPv6 connectivity:
- NDP Proxy. This one feels like it's the most "transparent", and I will get a public IPv6 address from the same network as the host, which is the main abcd:abcd:abcd:FFFF::/64 network.
- DHCPv6 network. My router has DHCPv6, I can probably make my Proxmox instance request a network to use for its internal bridge (using prefix delegation). I'm currently using dnsmasq for the IPv4 addresses of virtual machines, but I believe I can replace it with something else.
- NAT. I don't want this option, but I also won't decline it completely either.
The reason why I cannot just connect the Proxmox bridge in bridge mode to my LAN (which would have made things significantly easier) is the fact that I cannot bring in a wired connection, so I have to use WiFi (thankfully at least it's 5 GHz and there's no need for much traffic most of the time) and WiFi client doesn't support bridges.
So here is my request for advice. Thank you in advance.
EDIT: Came to prefix delegation as my choice. Haven't managed to get it completely done. Now for the issues:
- I get the IPv6 prefix delegated, the Proxmox server is getting a /62
- On the server I have radvd enabled, it is properly advertising to the internal LAN of the VMs
- The VM, a Ubuntu 20.04 with NetworkManager, is getting router advertisements and even autoconfiguring the default route. However, it doesn't autoconfigure the IPv6 address, which leads to unexpected issue of "Destination unreachable: Beyond scope of source address" when trying to ping an IPv6 address. If I manually do "ip a a dev ens18 2001:db8:facb:9876::23:2918/62" it works (the routes are 2001:db8:facb:9874::/62 plus the default route).
radvdump output:
{
AdvSendAdvert on;
# Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvCurHopLimit 64;
AdvDefaultLifetime 300;
AdvHomeAgentFlag off;
AdvDefaultPreference medium;
AdvSourceLLAddress on;
prefix fde1:d59a:7fa7:8::/62
{
AdvValidLifetime 86400;
AdvPreferredLifetime 14400;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
}; # End of prefix definition
prefix 2001:db8:facb:9874::/62
{
AdvValidLifetime 86400;
AdvPreferredLifetime 14400;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
}; # End of prefix definition
prefix fde1:d59a:7fa7:8::/62
{
AdvValidLifetime 86400;
AdvPreferredLifetime 14400;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
}; # End of prefix definition
prefix 2001:db8:facb:9874::/62
{
AdvValidLifetime 86400;
AdvPreferredLifetime 14400;
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
}; # End of prefix definition
route ::/0
{
AdvRoutePreference medium;
AdvRouteLifetime 300;
}; # End of route definition
}; # End of interface definition
RADVD configuration:
interface vmbr0 {
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvSourceLLAddress on;
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
Base6Interface vmbr0;
};
route ::/0 {
};
};
(vmbr0 has its IPv6 address correctly configured)
Best Answer
Turns out I was doing some things a bit overcomplicated, now I have managed to answer the question for myself.
First off, let me link to the external resource which was the most helpful for this purpose: a SuperUser answer.
My configuration mirrors the one in that article:
dhcp6c.conf fragment:
dnsmasq.conf fragment: