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.
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.
| Type | Kind | Where |
|---|---|---|
tcp | base | inbound, outbound |
udp | base, datagram | freedom's settings.udp |
tls | overlay | inbound, outbound |
ws | overlay | inbound, outbound |
httpupgrade | overlay | inbound, outbound |
fragment | overlay | outbound |
proxy_protocol | overlay | inbound |
Choosing a stack
| Goal | Stack |
|---|---|
| Look like an HTTPS site | tcp, tls |
| Pass a CDN | tcp, tls, ws; or tcp, ws where the CDN ends TLS |
| The same, cheaper after the handshake | httpupgrade instead of ws, where nothing checks frames |
| Hide the SNI from DPI that does not reassemble | fragment directly below tls |
| Learn the client's address behind a load balancer | tcp, proxy_protocol |