Are we Monostack yet?
The Monostack idea is all nice and well in theory, problem is the Linux1 network client ecosystem doesn't yet support any of this. We've really dropped the ball here. While Google, Apple, hell even holdout Microsoft, got their shit together and made using their devices in Monostack networks possible we're still bickering over SysV vs systemd.
On the network provider side things aren't quite so bleak in the FLOSS world, there's a reliable, high-performance Linux kernel NAT64 implementation: Jool. Unfortunately it's not upstream, limiting adoption. We're working on that — /TODO#Linux-SIIT.
On the other hand all the popular DNS recursors: BIND, unbound and knot-resolver support DNS64, no problem. CLAT and PREF64 support is still sparse but some upstreams are waking up.
Still, could be easier to deploy this shopping list of services. That's something we want to improve — /TODO#Gizmo.
[1]: We're not sure how much greener the grass is in *BSD or other Unix land. If you know how to run or use a Monostack network using a kernel other than Linux let us know.
Status:
NAT64 DNS64 CLAT/PREF64/DNS64 client PREF64 (provider) IPv6-mostly (provider) IPv6-mostly (client)
Network Provider Side
NAT64 Software Implementations
- Jool (Kernel), currently the best option.
- Our ipxlat kernel module
- Evan's protomask NAT64, Rust, new. Looks exciting.
- Tayga userspace, RFC compliant, old, singlethreaded but workable for small networks.
- wrapSix userspace, old, multithreaded, not widely packaged.
- tundra-nat64 userspace, good ideas, but not mature.
TODO: Evaluate BSD NAT64 implementations
DNS64 in network provider software
PREF64 support in network provider software
RAdvd: YES, since v2.20_rc1.
Add PREF64 support (PR !179)OpenWrt odhcpd: YES since FILLME.
router: Add PREF64 (RFC 8781) support (commit).
Thanks Ondřej!systemd-networkd: YES since v255 (2023).
sd-radv - Introduce PREF64 support (PR).
Thanks Susant!Dnsmasq.
Nope. Please fix!
IPv6-mostly support in network provider software
Support in network provider software isn't a problem here since it is common for DHCP servers to allow configuring custom (numeric) DHCP options even when they didn't exist when the server software was written.
Exception: IPv6-only (as opposed to mostly) can be a challenge as DHCP servers have to be configured to actually reject any v4 lease request and not just add the DHCP 108 option to its offers. See eg. ISC Kea which supports this now.
Support for IPv6-only networks with RFC 8925
(MR),
(issue).
Thanks Francis!
Network Client Side
IPv6-mostly support in network clients
NetworkManager: YES, since FIXME.
Not in distros yet.
Not enabled by default, setipv4.dhcp-ipv6-only-preferred=yes.
Add IPv6-Only Preferred option (MR) (issue)
Thanks Beniamino!dhcpcd: YES, since
v9.3.2(2020) edge-case fix inv10.0.9(2024).
Not enabled by default, needsoption ipv6_only_preferred.
Implement IPv6-Only Preferred (commit)
RespectIPV6_PREFERRED_ONLYflag onDHS_NONE(commit)
Handle option 108 correctly (commit) (issue)
Thanks Roy & taoyl-g!isc-dhcp client: YES, since v4.4.3 (2022).
ISC DHCP client and server are EOL since 2022 and won't get any more updates from ISC. No viable fork has emerged yet.
IPv6-only Preferred DHCPv4 Option (MR !65)
Thanks Francissystemd-networkd: YES, since v255 (2023).
Add IPv6 only mode support (PR) (issue)
Thanks Yu & Susant
CLAT/PREF64/DNS64 support in network clients
RAcd: a Unix'y RA receiver for PREF64 based CLAT provisioning.
Design doc and prototype code on Codeberg: IPv6-monostack/racd.dhcpcd: Sort of. Needs glue code.
definendoption withcode 38allows reading PREF64.NetworkManager: WIP. Testers welcome.
Add support for CLAT using a BPF program (MR) (issue)
Autoconfigure 464XLAT CLAT .systemd-networkd: Nope. Waiting on a viable SIIT impl.
464XLAT CLAT support (issue)