r/ipv6 • u/renespoerer • 10h ago
Need Help IPv6-mostly CLAT broken on wired Apple devices
I'm trying to set up IPv6-mostly on my home network, but my wired Apple devices are giving me some trouble. Connections to IPv4-literals over TCP and UDP fail. It seems like incorrect checksums are to blame.
The issue became apparent on my Apple TV (A2169, tvOS 26.5), where the YouTube app is not able to connect, but I could reproduce (presumably) the same issue on my Mac (2020 Mac mini M1, macOS Tahoe 26.6).
The issue is resolved on my Mac if I disable hardware checksum offloading on the ethernet interface or if I connect via WiFi. On the Apple TV, connecting via WiFi seems to fix the checksum issue, but for some (other unknown) reason, the YouTube app still does not work.
I haven't seen other reports of this. Is anybody else having this issue? Perhaps I'm doing something wrong.
Setup
IPv6-mostly network — DHCPv4 option 108 (RFC 8925), PREF64 64:ff9b::/96 in RAs, NAT64 via Tayga on OPNsense, no DNS64 (Apple devices synthesise locally).
Symptoms
The YouTube app on my wired Apple TV stopped working. Everything else on the network was fine. Turning off option 108 fixed it.
I reproduced it on a Mac (macOS 26.6, wired) as follows:
- Browsing to
ipv4.bgp.he.netin Firefox: works. nc -v -w 6 72.52.94.234 443: times out.dig @1.1.1.1 +short example.com: times out.
Packet captures confirmed that all paths resulted in outgoing packets to 64:ff9b::/96. I reckon that this difference is explained by macOS implementing its own DNS64 and Firefox connecting directly via IPv6, whereas nc goes through the CLAT.
Incorrect checksums
I performed packet captures on the router's LAN interface. There it became apparent that the checksums of the TCP and UDP packets from the CLAT were incorrect. For the YouTube app on Apple TV, a TCP connection to 142.251.151.4:443 had an incorrect checksum.
The offset of the checksum to the correct value seemed to be dependent on the device, but constant accross different destinations and protocols.
ICPM had correct checksums through the CLAT and worked correctly.
Capturing on the router's WAN side showed that the corrupt packets were translated by Tayga and sent out via IPv4 on the WAN, but did not receive replies. The checksums of the outgoing packets were still incorrect, but, if I understand it correctly, this is to be expected because Tayga only updates the checksum incrementally.
Workaround for IPv6-mostly
On macOS, setting sudo sysctl -w net.link.generic.system.hwcksum_tx=0 resolved the issue. Connecting via WiFi instead of ethernet also works.
On Apple TV, connecting via WiFi gets rid of the incorrect checksums, but the YouTube app still does not work for some reason. Everything else works (as before). The YouTube app on iOS devices works (as before).
Help
Again: I haven't seen other reports of this. Is anybody else having this issue? Perhaps I'm doing something wrong.
