diff --git a/relay/server/listener/quic/listener.go b/relay/server/listener/quic/listener.go index d3160a44e..797223e74 100644 --- a/relay/server/listener/quic/listener.go +++ b/relay/server/listener/quic/listener.go @@ -11,6 +11,7 @@ import ( log "github.com/sirupsen/logrus" "github.com/netbirdio/netbird/relay/protocol" + nbRelay "github.com/netbirdio/netbird/shared/relay" ) const Proto protocol.Protocol = "quic" @@ -27,7 +28,7 @@ type Listener struct { func (l *Listener) Listen(acceptFn func(conn net.Conn)) error { quicCfg := &quic.Config{ EnableDatagrams: true, - InitialPacketSize: 1452, + InitialPacketSize: nbRelay.QUICInitialPacketSize, } listener, err := quic.ListenAddr(l.Address, l.TLSConfig, quicCfg) if err != nil { diff --git a/shared/relay/client/dialer/quic/quic.go b/shared/relay/client/dialer/quic/quic.go index c057ef089..78462837d 100644 --- a/shared/relay/client/dialer/quic/quic.go +++ b/shared/relay/client/dialer/quic/quic.go @@ -12,6 +12,7 @@ import ( log "github.com/sirupsen/logrus" nbnet "github.com/netbirdio/netbird/client/net" + nbRelay "github.com/netbirdio/netbird/shared/relay" quictls "github.com/netbirdio/netbird/shared/relay/tls" ) @@ -42,7 +43,7 @@ func (d Dialer) Dial(ctx context.Context, address string) (net.Conn, error) { KeepAlivePeriod: 30 * time.Second, MaxIdleTimeout: 4 * time.Minute, EnableDatagrams: true, - InitialPacketSize: 1452, + InitialPacketSize: nbRelay.QUICInitialPacketSize, } udpConn, err := nbnet.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}) diff --git a/shared/relay/constants.go b/shared/relay/constants.go index 0f2a27610..fc0545dd5 100644 --- a/shared/relay/constants.go +++ b/shared/relay/constants.go @@ -3,4 +3,9 @@ package relay const ( // WebSocketURLPath is the path for the websocket relay connection WebSocketURLPath = "/relay" + + // QUICInitialPacketSize is the conservative initial QUIC packet size (bytes) + // for unknown-path PMTU, per RFC 9000 §14: 1280 (IPv6 min MTU) − 40 (IPv6 + // header) − 8 (UDP header) = 1232. DPLPMTUD may probe larger sizes later. + QUICInitialPacketSize = 1232 )