The Proxmox server running at home only has an IPv4 statically assigned to it. Since I’ve been trying to get all my connected devices at home to get IPv6 assigned, I figured I should try with this Proxmox server next.

I’m running Proxmox VE 8.0.4, and it’s based on Debian 12 (bookwarm). The settings for its network interfaces are stored in /etc/network/interfaces:

root@pve:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.8/24
        gateway 192.168.1.1
        bridge-ports enp2s0
        bridge-stp off
        bridge-fd 0

Here is the output of vmbr0 device:

root@pve:~# ip a show vmbr0
39: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:e2:69:54:67:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.8/24 scope global vmbr0
       valid_lft forever preferred_lft forever

I don’t use Debian much in the last decades, it looks like there is no much changes in term of how to configure network interfaces on the lastes relase of Debian.It could be a good thing, right?

Anyway, I’ve been using SLAAC with IPv6, with the main idea behind it is that I let the client to request an IPv6 from itself instead of getting one assigned by a DHCP6 (which is disabled on my router). First I tried to set the ‘accept_ra’ to 1, as suggested at [1], followed by restaring the networking.service [2]; but it did not work. No IPv6 assigned to the vmbr0 interface.

iface vmbr0 inet6 static auto
        accept_ra 1
        autoconf 1
root@pve:~# systemctl status networking.service

root@pve:~# ip a show vmbr0
39: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:e2:69:54:67:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.8/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::2e2:69ff:fe54:67dc/64 scope link
       valid_lft forever preferred_lft forever

I thought by setting accept_ra 1, this will make the interface to accept the routing advertisement from the router. Looking further, I found the following information from [3], which explains more details about the possible value: 0, 1, 2 for accept_ra.

accept_ra - INTEGER
	Accept Router Advertisements; autoconfigure using them.

	It also determines whether or not to transmit Router
	Solicitations. If and only if the functional setting is to
	accept Router Advertisements, Router Solicitations will be
	transmitted.

	Possible values are:
		0 Do not accept Router Advertisements.
		1 Accept Router Advertisements if forwarding is disabled.
		2 Overrule forwarding behaviour. Accept Router Advertisements
		  even if forwarding is enabled.

	Functional default: enabled if local forwarding is disabled.
			    disabled if local forwarding is enabled.

If 1 didn’t work, the next logical value to try was 2, so I changed the network interface as below:

root@pve:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
        address 192.168.1.8/24
        gateway 192.168.1.1
        bridge-ports enp2s0
        bridge-stp off
        bridge-fd 0

# [2023-09-15:SS] Configure IPv6 using SLAAC
iface vmbr0 inet6 static auto
        accept_ra 2

Upon restarting the networking.service, my Proxmox server had an IPv6 assigned.

root@pve:~# ip a show vmbr0
39: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:e2:69:54:67:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.8/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 2403:5555:xxxx:0:xxx:69ff:fe54:67dc/64 scope global dynamic mngtmpaddr
       valid_lft 86322sec preferred_lft 14322sec
    inet6 fe80::2e2:69ff:fe54:67dc/64 scope link
       valid_lft forever preferred_lft forever

I’m quite happy with the result.

References: