RFC 8899 DPLPMTUD design document#1619
Conversation
Analyzes options for implementing RFC 8899 Datagram PLPMTUD in Nebula, recommending extension of the existing Test packet mechanism with new TestProbe/TestProbeReply subtypes. Covers overlay IPv6 MTU floor constraints, phased rollout plan, and backwards compatibility. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
e106a0b to
8a5a53f
Compare
|
It would be awesome to support PMTU and my desire and the primary focus of this plan is increasing a paths MTU, which is opposite of what ICMP does. This creates an awkward situation that was glossed over in the plan. ICMP can reduce a path mtu and a paths mtu is reset every so often to reprobe for a limit being removed, the max PMTU is derived from the route table or the tun device. This means we have 2 realistic options to enable mtu growth:
A 3rd option, which I am not stoked about at all, is to have nebula do its own packet fragmentation and run a large MTU on the tun. |
- Add relay overhead (extra 32B: second Nebula header + AEAD tag) and TCP underlay (+4B length prefix) to the overhead budget table - Rewrite tun.mtu interaction section to address the core problem: PLPMTUD discovers larger path capacity, but the OS won't send larger packets unless the TUN MTU is raised. Analyzes three options: large TUN + per-peer PTB (recommended), per-peer route MTU, and Nebula-layer fragmentation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@nbrownus your third option presents some interesting opportunities wrt using sendmmsg though |
|
it could be kinda spicy to have hosts report their MTU per-remote-addr (+ default route) to the lighthouse, but that opens quite a can of worms |
sendmmsg only exists on linux though, right? |
|
|
|
Someone did spec out a version of QUIC using Noise instead of TLS 😁 https://github.com/quic-noise-wg/quic-noise-spec |
Summary
Design document analyzing options for implementing RFC 8899 DPLPMTUD (Datagram Packetization Layer Path MTU Discovery) in Nebula.
Testpacket mechanism with newTestProbe/TestProbeReplysubtypesThis is a design doc only — no code changes. Looking for feedback on the approach before implementation.
Context
Nebula currently uses a static
tun.mtu(default 1300), which is conservative for most paths. DPLPMTUD would discover the actual per-peer path MTU via active probing, enabling jumbo frames on LAN/datacenter paths and detecting constrained paths (carrier WiFi, VPN-in-VPN) without manual tuning.Unlike #16, this would implement MTU detection by probing with larger and larger packets until a failure to receive an ACK, rather than relying on ICMP "must fragment" responses.
🤖 Generated with Claude Code