SagerNet / SagerNet/sing-box

Feature request: QUICstep-style QUIC handshake routing with post-handshake bypass

Open
#4,517 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
38.2k
Forks
4.6k
Avg merge
19d 15h
Merged PRs (30d)
1

Description

Summary

I would like to request support for a QUICstep-style routing mode in sing-box.

QUICstep is a censorship-circumvention technique presented at PETS 2026:

The basic idea is simple:

  1. Route QUIC Initial / Handshake packets through a censorship-resistant proxy or tunnel.
  2. Once the QUIC connection switches to short-header 1-RTT packets, bypass the proxy and let those packets use the native network path.
  3. If the destination server supports QUIC connection migration, the same QUIC connection continues over the direct path.

This hides the QUIC/TLS handshake, including SNI, from a censor while avoiding the bandwidth and latency cost of proxying the entire connection.

Why this seems to fit sing-box

This should not need to be implemented inside Hysteria2, WireGuard, or any other specific outbound protocol.

The handshake path can use any UDP-capable outbound, for example:

QUIC Initial / Handshake
        |
        v
sing-box routing
        |
        +--> Hysteria2
        +--> WireGuard
        +--> another UDP-capable outbound

After the handshake:

QUIC 1-RTT short-header packets
        |
        v
bypass sing-box
        |
        v
native network path

So conceptually this looks more like a routing / pre-match feature than a protocol-specific outbound feature.

sing-box already has relevant Linux infrastructure through auto_redirect and NFQUEUE-based pre-matching, so QUICstep may be implementable as a relatively narrow extension of the existing packet pre-match path.

Motivation

The PETS 2026 QUICstep paper reports that this approach can significantly reduce proxy bandwidth usage and page-load overhead compared with tunneling the entire QUIC connection, while still bypassing QUIC SNI censorship when the destination supports connection migration.

It also fits sing-box's architecture well because sing-box already provides:

  • TUN / transparent routing
  • NFQUEUE pre-match infrastructure
  • multiple UDP-capable proxy outbounds
  • kernel-level bypass behavior

So I think sing-box may be a good place to expose QUICstep as a transport-agnostic routing feature.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing sing-box's existing auto_redirect and NFQUEUE-based pre-match infrastructure, then compare the requested behavior with the QUICstep paper and reference implementation. The work is done when a concrete, transport-agnostic routing design supports proxying QUIC Initial/Handshake packets and bypassing the proxy for short-header 1-RTT packets, including defined behavior for connection migration.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, linux
Domain
networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.