How I Had to Learn IPv6 – And Why It’s Actually Really Cool

We just recently moved into a new place, which meant switching ISPs. After weeks of getting the flat ready, I finally found some time to dive into my next project: migrating my Ghost Blog running in Kubernetes from my paid VPS to K3s in my Homelab.
What sounded like a fun, straightforward project quickly spiraled into hours of head-scratching. The plan was simple:
- Take a fresh backup with Velero
- Set up a K3s VM in my Homelab
- Install Velero and restore the backup
- Update the DNS record
But then reality hit—Velero could no longer access the S3 backup location on my Homelab TrueNAS server. No worries, I thought, probably just a small issue with an expired certificate. After digging deeper, though, it turned out the problem wasn’t Velero at all.
My new ISP doesn’t hand out public IPv4 addresses anymore. Instead, they’re all-in on IPv6.
My First Real IPv6 Roadblock
Yes, we’ve all heard about the IPv4 shortage for years, but I’d never really been confronted with it—until now. Suddenly, I couldn’t just “open port 443 on my router” like I had for every self-hosting project before.
At first, it felt like a roadblock. Most of my tinkering had always revolved around IPv4, NAT rules, port forwarding—the usual dance. Now I was staring at long, unfamiliar IPv6 addresses and thinking: do I really want to deal with this right now?
But as I dug in, I realized IPv6 isn’t just “IPv4 but longer.” It’s a reset button on how the internet should work:
- Every device gets its own globally routable address
- No NAT gymnastics
- Once DNS is in the mix, it actually feels cleaner than IPv4
Here’s how you can figure out if your ISP is using CGNAT/LSN/DS-Lite
1. Check your public IP vs. your router’s WAN IP
- Go to your router and note the WAN/Internet IP address it has.
- Then check your public IP using a site like https://whatismyip.com.
- If they differ, your ISP is likely using CGNAT.
2. Look at the IP range
- Carrier-Grade NAT addresses are usually in these private IPv4 ranges:
100.64.0.0 – 100.127.255.255
- If your WAN IP is in this range, it’s almost certainly CGNAT.
I don't have IPV6 configured. Can I connect to an IPv6 service?
“If your system doesn’t have an IPv6 address yet, you won’t be able to connect to IPv6-only services. No worries — just enable IPv6 on your device, and your router will handle the rest. Your system is not automatically exposed to the internet; external access is only allowed if you configure port forwarding on your router.”
Real-World Example: Hosting a TeamSpeak 3 Server
To make sense of it all, I decided to test IPv6 with something simple and familiar: running a local TeamSpeak 3 server.
Here’s what I had to do:
Find the IPv6 address of my server
On Linux:
root@server[~]# ip -6 addr show br0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet6 2001:db8:abcd:ef01:2345:6789:abcd:ef01/64 scope global dynamic mngtmpaddr
valid_lft 7128sec preferred_lft 3528sec
inet6 fd12:3456:789a:0:bcde:f012:3456:789a/64 scope global dynamic mngtmpaddr
valid_lft 7128sec preferred_lft 3528sec
inet6 fe80::1234:5678:9abc:def0/64 scope link
valid_lft forever preferred_lft forever
This gave me the global IPv6 address assigned by my ISP.
Set up a dynamic DNS hostname
Since my IPv6 prefix can change, I used dynv6. It supports AAAA records (the IPv6 equivalent of A records).

Optional: Set up CNAME DNS Records
If you own a domain, you can create user-friendly hostnames for all your self-hosted services using CNAME records. This eliminates the need to remember IP addresses and ports, making your services more accessible and professional-looking.
Example Setup
Instead of connecting to your TeamSpeak 3 server using:
2001:db8:abcd:ef01:2345:6789:abcd:ef01:9987
You could set up a CNAME record like:
ts3.yourdomain.com → ts3server.example.dynv6.net
Then simply connect using the clean hostname:
ts3.yourdomain.com
Benefits
- Memorable addresses: Easy-to-remember service URLs
- Professional appearance: Clean, branded hostnames
- Easier management: Change the underlying IP once, update all services
- SSL/TLS compatibility: Simplified certificate management for web services
This approach works well for any self-hosted service - whether it's TeamSpeak, a web server, game server, or media streaming service.
If you are like me and own a real domain. You can simply create CNAME records for all your hosted services.
Adjust the FritzBox firewall rules
Unlike IPv4, there’s no NAT here. Instead, I had to allow inbound connections directly to the server’s IPv6 address on the default TeamSpeak port (9987/UDP).

Test connectivity
On a client PC, I simply connected via:ts3server.example.dynv6.net
No port forwarding, no double NAT, no weird router tricks—just a direct connection.
Why This Matters
That little TeamSpeak test was eye-opening. What started as a frustrating detour turned into one of those rare moments where a technology that felt intimidating at first actually made things simpler.
In my next blogpost I will go into detail how I finally migrated my Blog. Stay tuned... 😎