This guide explains how IPv6 is normally configured on BinaryLane Linux VPSs, how to add an address from a routed IPv6 range, and how to troubleshoot common IPv6 issues on Ubuntu and Debian systems using netplan and systemd-networkd.
BinaryLane Linux images normally receive their main IPv6 address and IPv6 default route automatically using router advertisements. In many cases, the netplan file generated by cloud-init only lists the IPv4 configuration, while IPv6 is still learned automatically by the operating system.
Prerequisites:
- Root or sudo access to the VPS.
- A Linux VPS with IPv6 enabled in the BinaryLane mPanel:
- Open the 'Network' settings for your VPS (use this quick access link: https://home.binarylane.com.au/server/-/network), select the server you'd like to enable IPv6 on, click the
button, in the pop-up, click
.
- Open the 'Network' settings for your VPS (use this quick access link: https://home.binarylane.com.au/server/-/network), select the server you'd like to enable IPv6 on, click the
- The IPv6 address details shown in the mPanel, including the main IPv6 address and any routed IPv6 range (you can review your IPv6 information from the 'Network' page after enabling IPv6)
- Basic familiarity with SSH and Linux networking commands.
TABLE OF CONTENTS
- How BinaryLane IPv6 works
- Check the current IPv6 state
- Adding an address from a routed IPv6 range
- Cloud-init and netplan notes
- Common problems and fixes
- Related articles
Important: BinaryLane External Firewall rules currently apply to IPv4 traffic only and do not filter IPv6 traffic. If IPv6 is enabled on your VPS, manage IPv6 access inside the server using an OS-level firewall such as ufw, nftables, iptables/ip6tables, or firewalld. For larger environments, consider using a dedicated firewall/gateway design such as a bastion or VPC gateway.
How BinaryLane IPv6 works
A BinaryLane VPS can have two different IPv6 values shown in the mPanel:
- The main IPv6 address, usually shown as an address inside an on-link
/64. - An optional routed IPv6 range, commonly shown as a
/56.
The main IPv6 address is normally learned through SLAAC/router advertisements. The IPv6 default route is also learned from router advertisements. On current BinaryLane Linux VPSs, the router learned by RA is commonly:
fe80::fc00:ff:fe00:1
Do not assume the IPv6 gateway is fe80::1. If a static route is configured to the wrong link-local gateway, IPv6 traffic will fail.
The routed IPv6 range is different. It is routed to the VPS, but the full range should not be added directly to the network interface as an interface address. If you want to use an address from the routed range on the VPS itself, choose one address from the range and add it as a single host address, for example:
2404:9400:29bf:9300::1/128
Check the current IPv6 state
Before changing the network configuration, check the active IPv6 address, route, neighbour, and systemd-networkd configuration.
ip -6 addr show dev eth0 ip -6 route show ip -6 neigh show dev eth0 networkctl status eth0 --no-pager networkctl cat eth0
On a working default configuration, you should usually see:
- A global IPv6 address from the on-link SLAAC range.
- A route for the on-link
/64marked asproto ra. - A default IPv6 route learned through RA.
- An IPv6 neighbour entry for the router, usually
fe80::fc00:ff:fe00:1.
You can test outbound IPv6 with:
ping -6 -c 3 2606:4700:4700::1111
Adding an address from the routed IPv6 range
Each BinaryLane VPS provides a routed IPv6 range (you can review your routed IPv6 range from the 'Network' page after enabling IPv6), such as:
2404:9400:29bf:9300::/56
Do not add the whole /56 to eth0 as an interface address. Instead, choose an individual address inside that range, such as:
2404:9400:29bf:9300::1/128
On Ubuntu and Debian systems using systemd-networkd, adding the routed address as a normal netplan address can fail Duplicate Address Detection and leave the address unusable as dadfailed tentative. To avoid this, keep the main cloud-init/netplan configuration in place and add the routed address through a systemd-networkd drop-in with Duplicate Address Detection disabled for that specific address.
Create the systemd-networkd drop-in:
sudo mkdir -p /etc/systemd/network/10-netplan-eth0.network.d
Create this file:
sudo nano /etc/systemd/network/10-netplan-eth0.network.d/10-routed-ipv6.conf
Add the following content, replacing the example address with one address from your routed IPv6 range:
[Address] Address=2404:9400:29bf:9300::1/128 DuplicateAddressDetection=none
Apply the networkd configuration:
sudo networkctl reload sudo networkctl reconfigure eth0
If you previously tested a configuration that caused dadfailed, reboot after removing the bad configuration so the failed address state is cleared cleanly.
sudo reboot
After the server comes back online, verify the result:
ip -6 addr show dev eth0 ip -6 route show ip -6 neigh show dev eth0
The routed address should appear with the nodad flag, the SLAAC address should still be present, and the default IPv6 route should still be learned through RA.
Cloud-init and netplan notes
On BinaryLane Ubuntu and Debian images, cloud-init normally writes the base netplan file for the VPS. This file may only show IPv4 configuration. That can still be correct: IPv6 may be learned automatically by router advertisements through systemd-networkd.
For the routed IPv6 address method above, you do not need to disable cloud-init networking. The systemd-networkd drop-in is stored separately under /etc/systemd/network/ and can add the extra routed address without replacing the cloud-init generated netplan file.
Only disable cloud-init network configuration if you are intentionally taking over the full network configuration yourself. If you do that, make sure you preserve the correct IPv4 settings and do not accidentally disable IPv6 router advertisements.
Common problems and fixes
The IPv6 route points to fe80::1:
A static route via fe80::1 is usually not correct for BinaryLane VPSs. Check the RA-learned router with:
ip -6 neigh show dev eth0
If the neighbour entry for fe80::1 shows FAILED, remove the static route and allow router advertisements to provide the IPv6 default route. If manually configuring, note the auto-supplied route, then add it manually later.
The routed IPv6 address shows dadfailed tentative:
This can happen when an address from the routed IPv6 range is added as a normal interface address. Use the systemd-networkd drop-in method above with DuplicateAddressDetection=none, then reboot if the failed state remains visible.
The whole routed range was added to the interface:
Do not add a routed range such as 2404:9400:29bf:9300::/56 directly to eth0 as the interface address. Choose one address from the range and add it as a /128 host address.
IPv6 temporary or privacy addresses are being used:
BinaryLane expects the VPS to use the stable SLAAC address shown in the mPanel. If Linux generates temporary IPv6 addresses, disable IPv6 privacy extensions. See Disable IPv6 Privacy Extension in Linux
IPv6 is disabled inside the operating system:
If commands fail with an error such as IPv6 is disabled on this device, check whether IPv6 is disabled by sysctl or the kernel command line:
sysctl net.ipv6.conf.all.disable_ipv6 net.ipv6.conf.default.disable_ipv6 net.ipv6.conf.eth0.disable_ipv6 cat /proc/cmdline
If ipv6.disable=1 appears in the kernel command line, remove it from the bootloader configuration and reboot.
Check for leftover network fragments:
If IPv6 worked before but no longer appears after testing custom netplan or systemd-networkd files, check for remaining fragments or drop-ins:
find /etc/netplan /etc/systemd/network -maxdepth 3 -type f -print -exec sed -n '1,160p' {} \;
networkctl cat eth0Look for settings such as accept-ra: false, manually configured SLAAC addresses, static IPv6 default routes, or unexpected .network.d drop-ins.
Related articles
If you require assistance, feel free to submit a support ticket at our helpdesk here: Submit a ticket | BinaryLane
