Skip to content

Noisy-Shuttle

Structure

Note: This is a sing-box-native protocol variant. It is NOT wire compatible with the Rust noisy-shuttle implementation.

{
  "type": "noisy-shuttle",
  "tag": "ns-out",

  "server": "server.example",
  "server_port": 443,
  "password": "secret",
  "network": "tcp",
  "tls": {},
  "session": {
    "enabled": true,
    "max_streams": 16,
    "max_requests": 0,
    "idle_timeout": "5m",
    "max_age": "0s",
    "keepalive_interval": "30s",
    "keepalive_timeout": "60s"
  },
  "handshake": {
    "padding_min": 0,
    "padding_max": 24,
    "auth_timeout": "5s"
  },
  "udp_timeout": "60s",
  "udp_max_packet_size": 1500,

  ... // Dial Fields
}

Fields

server

Required

The server address.

server_port

Required

The server port.

password

Required

The Noisy-Shuttle password.

network

Enabled network.

One of tcp udp.

Both is enabled by default.

tls

TLS configuration, see TLS.

session

Session multiplex options.

session.enabled

Enable session multiplexing. Default is false (disabled). Must be explicitly enabled.

session.max_streams

Maximum concurrent streams per session. Default is 16.

session.max_requests

Maximum concurrent requests per stream. 0 means unlimited. Default is 0.

session.idle_timeout

Idle timeout for streams. Default is 5m.

session.max_age

Maximum age for sessions. 0 means no expiry. Default is 0s.

session.keepalive_interval

Interval for sending keepalive packets. Default is 30s.

session.keepalive_timeout

Timeout for keepalive response. Default is 2x keepalive_interval (60s).

handshake

Handshake options for outbound connections.

handshake.padding_min

Minimum padding length for outbound handshake. Default is 0.

handshake.padding_max

Maximum padding length for outbound handshake. Default is 24.

handshake.auth_timeout

Authentication timeout for handshake. Default is 5s.

udp_timeout

UDP session timeout. Default is 60s.

udp_max_packet_size

Maximum UDP packet size. Default is 1500.

Dial Fields

See Dial Fields for details.

Minimal Example

{
  "type": "noisy-shuttle",
  "tag": "ns-out",
  "server": "server.example",
  "server_port": 443,
  "password": "secret",
  "network": "tcp",
  "tls": {
    "enabled": true,
    "server_name": "server.example"
  }
}

Advanced Example (with session reuse, keepalive, and UDP)

{
  "type": "noisy-shuttle",
  "tag": "ns-out",
  "server": "server.example",
  "server_port": 443,
  "password": "secret",
  "network": "tcp,udp",
  "tls": {
    "enabled": true,
    "server_name": "server.example"
  },
  "session": {
    "enabled": true,
    "max_streams": 16,
    "max_requests": 0,
    "idle_timeout": "5m",
    "max_age": "0s",
    "keepalive_interval": "30s",
    "keepalive_timeout": "60s"
  },
  "handshake": {
    "padding_min": 0,
    "padding_max": 24,
    "auth_timeout": "5s"
  },
  "udp_timeout": "60s",
  "udp_max_packet_size": 1500
}