except for nor using it at all, of course.
So I want to make my homelab IPv6 ready, because I have too much free time, i guess. There are two decisions that I’m currently unsure about:
- ULA or not. Do you have local only addresses or do your clients communicate using the global IPv6 address? Does not using ULAs work without a static IP from the ISP?
- DHCPv6 or is SLAAC enough?
For each question both options seem to be possible and I’m interested in your experience
Cheers
I live in spain so the main ISP is well provided with IPv4 blocks and have zero incentive to deploy IPv6 outside of mobile networks. So the IPv6 deployment here is like 3% and I don’t have access to it 🫠
Don’t use ULA, those are non internet routable addresses so they will never use v6 for internet things. Use the range assigned from your ISP.
SLAAC. Because Android has one ass of a dev who refuses to include DHCPv6You can use both at the same time and it is useful to have ULA if your ISP changes your assigned prefix.
This is what I do. I haven’t seen a reason to change it as of yet.
Idk. what assignment we use, but our ISP gave us (company) a prefix and we offer our services (for our team) IPv6 first. IPv4 is only used within the company network where a DNS server resolves the domains if needed.
It works great for us. If my private ISP would allow it, I would do the same.
So for you selfhosted services you use ipv4 only?
The only systems with ip6v in my network are Wi-Fi devices and my public-facing reverse proxy. I use a prefix delegated by my ISP.
All of my non-public servers have ipv4 only.
Blocked by my ISP. So I have it all blocked.
Same here, my ISP is IPv4 only so I have it disabled on my router.
I have that conf:
/etc/sysctl.d/01-ipv6.confnet.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1But that falls under your exception.
I mean, you can get rid of NAT and subnet your systems in a logical fashion. That’s pretty awesome.
You can subnet logically with IPv4.
If you go IPv6 on the internal network you ‘win’ not having NAT, and exposing all your intrrnal services to the net (which… just why?), but lose the ability to do redundant ISPs/failover/loadbalancing, policy based routing, VPNs… Unless you do IPv6 address translation. Which puts you back to “IPv4+NAT, except more complicated.”
IPv6 inside the firewall is more or less entirely pointless.
I use global addresses for everything. ULA is the equivalent of the private networks like 10.0.0.0/8 on IPv4. It doesn’t need a static IP. ULA will work without any internet connection. If you run an IPv6 only network, it would be a good idea to set up ULA so you can access your local devices if the internet goes down.
I only use SLAAC on my network because DHCPv6 is not well supported. My router does use DHCPv6 to get a prefix from the ISP though.
set up ULA so you can access your local devices if the internet goes down
your router should retain its address even if the external connection goes down.
DHCPv6 is not well supported
Androids get SLAAC, everybody else can have a nice, readable, stable, firewall-openable suffix.
ISP issues a prefix that I delegate.
Also delegate an ULA prefix, intended for stake local addresses but d actually just use ipv4 for those (also had difficulty getting ipv6 to work with microk8s and multus due to inexperience).
SLAAC.
- Probably wouldn’t hurt to set them up, especially if you don’t have a static prefix. The good thing is that interfaces can have multiple IPv6 addresses, so they can use both the public address and the ULA.
- SLAAC should always be enough. Make sure you don’t block the ICMP6 messages it needs though (I’ve been bitten by that once, firewalld behaves weirdly around this).
IPv6 is disabled at the firewall. I’m just not in a hurry to redo my network.
Personal opinion, IPv6 has been on the table so long it’s no longer something I think about. 20 years ago I thought it was going to be amazing.
I use ULA for my WireGuard tunnels, otherwise it’s all public IPv6 (mostly lightly firewalled).
I’m fine with SLAAC, even for servers. I just manually update my DNS with the server addresses when I set them up.
My setup is a pile of kludges built on top of each other over the last two decades.
I started with ULAs distributed through DHCP, connected to named, which allows hosts do declare their own name and let me access local services as though I had a real domain.
My ISP eventually started supporting IPV6, but only assigned /128, so the ULAs got NAT-6ed out to the real world.
I eventually learned how to request prefix delegation from the ISP and set up SLAAC.
So now, my PIv6 clients have a) their link-local address, b) the ULA, c) a “privacy” SLAAC, and d) a unique SLAAC. All my internal services still refer to the ULAs.
I don’t think I’d recommend this system for someone setting up from scratch. The easiest thing would be to go with SLAAC, if you can get prefix delegation, and set your DNS/pihole to send the unique-SLAAC address of any servers you run.
My ISP eventually started supporting IPV6, but only assigned /128
This is hilarious to me.
“We’ve got 7.9 septillion addresses to play with in each of our v6/32 LIR allocations… if we follow the standard and give each customer a whole network prefix, that caps us at 4 billion customers per LIR! Nonsense, let’s just give every household a single v6 address.”
It’s like these people don’t understand what IPv6 is for.
In the home/lab, I use public addresses with mostly SLAAC, but the host server has a static IP. I get A public /56 prefix via DHCPv6-PD from my ISP. There is a bit of a pain point if the prefix changes but it hasn’t happened since I moved here.
My ”production” setup is a bit more controversial. Since Hetzner charges extra for extra IPv6 subnets I simply created small /80 subnets for the VMs. While this does mean that SLAAC doesn’t work I can simply generate and assign static IPv6 IPs, same way as I do with IPv4. All generated from an ansible playbook that creates the VMs.
I have some ULA ranges as well, but it’s a bit of a special case as I only use it as internal IP ranges in a Kubernetes cluster. This is completely separated from the external network, with the cluster doing NAT to the node IPs anyway (even for IPv6), and all internal traffic being on an overlay network.
Acronyms, initialisms, abbreviations, contractions, and other phrases which expand to something larger, that I’ve seen in this thread:
Fewer Letters More Letters DHCP Dynamic Host Configuration Protocol, automates assignment of IPs when connecting to a network DNS Domain Name Service/System IP Internet Protocol NAT Network Address Translation VPS Virtual Private Server (opposed to shared hosting)
5 acronyms in this thread; the most compressed thread commented on today has 8 acronyms.
[Thread #284 for this comm, first seen 11th May 2026, 19:20] [FAQ] [Full list] [Contact] [Source code]
Hey bot, you missed ULA, ICMP, and SLAAC
Edit; and ISP
Happy to take definitions and plug them into the database, if you have them to hand. If not, I’ll put aside a few minutes this weekend to look them up.
ULA = Unique Local Address, non routable address scheme in IPv6 for use in local networks
SLAAC = Stateless Address Autoconfiguration, a process in IPv6 that allows a host to assign itself an unique IP by listening to other traffic to determine the network ID and then creating the host ID
ICMP = Internet Control Message Protocol, these a specific messages that allow for higher coordination and control rather that data exchange, like ping or dhcp.
ISP = Internet Service Provider, the company that provides your internet acccess like Comcast, Google Fiber, AT&T, etc.
SLAAC with ISP-provided prefix. Everything that wants an IPv6 address gets one and I’ve got my firewall set to block pretty much all in-bound traffic other than SSH. It’s nice being able to SSH directly to something rather than using a jump host or VPN.
I also use ULA because NFS mounts over IPv6 on the global addresses would hang/timeout every time the SLAAC address rotated which is frequent due to privacy extensions.











