Skip to content

Transport ​

A transport stack is the list of layers under a proxy protocol, in an inbound's or outbound's transport. The first entry is a base transport, which opens the connection; each later entry is an overlay, which wraps the one before it.

How a transport stack is built: an outbound's list, such as tcp, tls, ws, is dialed in order: tcp opens the connection, tls wraps it, ws wraps that, and the proxy protocol sends its request over the result. An inbound with the same list accepts in the same order and its proxy protocol reads the request.

Structure ​

json
{
  "transport": [
    {
      "type": "tcp",
      "settings": { "no_delay": true }
    },
    {
      "type": "tls",
      "settings": { "server_name": "proxy.example.com" }
    }
  ]
}

Each entry has a type and optional settings.

TypeKindWhere
tcpbaseinbound, outbound
udpbase, datagramfreedom's settings.udp
tlsoverlayinbound, outbound
wsoverlayinbound, outbound
httpupgradeoverlayinbound, outbound
fragmentoverlayoutbound
proxy_protocoloverlayinbound

Choosing a stack ​

GoalStack
Look like an HTTPS sitetcp, tls
Pass a CDNtcp, tls, ws; or tcp, ws where the CDN ends TLS
The same, cheaper after the handshakehttpupgrade instead of ws, where nothing checks frames
Hide the SNI from DPI that does not reassemblefragment directly below tls
Learn the client's address behind a load balancertcp, proxy_protocol