Túneis
TunnelConfig
O túnel é o objeto de mais alto nível em uma configuração do Outline. Ele especifica como a VPN deve ser configurada.
Formato: ExplicitTunnelConfig | LegacyShadowsocksConfig | LegacyShadowsocksURI
ExplicitTunnelConfig
Formato: struct
Campos:
transport(TransportConfig): o transporte a ser usado para trocar pacotes com o destino pretendidoerror(struct): informações a serem comunicadas ao usuário em caso de erro de serviço (por exemplo, chave expirada, cota esgotada)message(string): mensagem simples para exibir ao usuáriodetails(string): mensagem a ser exibida quando o usuário abrir os detalhes do erro; útil para solução de problemas
Os campos error e transport são mutuamente exclusivos.
Exemplo bem-sucedido:
transport:
$type: tcpudp
tcp:
... # Stream Dialer for TCP
udp:
... # Packet Listener for UDP
Exemplo de erro:
error:
message: Quota exceeded
details: Used 100GB out of 100GB
Transportes
TransportConfig
Especifica como os pacotes devem ser trocados com o destino pretendido.
Formato: Interface
Tipos de interface aceitos:
tcpudp: TCPUDPConfig
TCPUDPConfig
O TCPUDPConfig permite definir estratégias TCP e UDP separadas.
Formato: struct
Campos:
tcp(DialerConfig): o discador de fluxo a ser usado para conexões TCP.udp(PacketListenerConfig): o listener de pacotes a ser usado para pacotes UDP.
Exemplo de envio de TCP e UDP para diferentes endpoints:
tcp:
$type: shadowsocks
endpoint: ss.example.com:80
<<: &cipher
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "
udp:
$type: shadowsocks
endpoint: ss.example.com:53
<<: *cipher
Endpoints
Os endpoints estabelecem conexões com um endpoint fixo. São preferíveis aos discadores, porque permitem otimizações específicas. Existem endpoints de fluxo e de pacote.
EndpointConfig
Formato: string | Interface
O endpoint string é o endereço host:porta do endpoint selecionado. A conexão é estabelecida usando o discador padrão.
Tipos de interface aceitos para endpoints de fluxo e pacote:
dial: DialEndpointConfigfirst-supported: FirstSupportedConfigwebsocket: WebsocketEndpointConfigshadowsocks: ShadowsocksConfig
DialEndpointConfig
Estabelece conexões discando um endereço fixo. Pode usar um discador, o que permite a composição de estratégias.
Formato: struct
Campos:
address(string): endereço do endpoint a discardialer(DialerConfig): discador a ser usado para discar o endereço
WebsocketEndpointConfig
Conexões de fluxo e pacotes de túneis para um endpoint sobre Websockets.
Para conexões de fluxo, cada gravação é transformada em uma mensagem do Websocket. Para conexões de pacotes, cada pacote é transformado em uma mensagem do Websocket.
Formato: struct
Campos:
url(string): URL do endpoint do Websocket. O esquema precisa serhttpsouwsspara Websocket sobre TLS ehttpouwspara Websocket em texto simples.endpoint(EndpointConfig): endpoint (do servidor da Web) para conexão. Se não houver um, ele se conectará ao endereço especificado no URL.
Discadores
Os discadores estabelecem conexões de acordo com o endereço de um endpoint. Existem discadores de fluxo e de pacotes.
DialerConfig
Formato: null | Interface
Um discador null (ausente) significa o discador padrão, que usa conexões diretas TCP para fluxo e conexões diretas UDP para pacotes.
Tipos de interface aceitos para discadores de fluxo e de pacotes:
first-supported: FirstSupportedConfigshadowsocks: ShadowsocksConfig
Listeners de pacotes
Um listener de pacotes estabelece uma conexão de pacotes ilimitada que pode ser usada para enviar pacotes a vários destinos.
PacketListenerConfig
Formato: null | Interface
Um listener de pacotes null (ausente) significa o listener de pacotes padrão, que é um listener de pacotes UDP.
Tipos de interface aceitos:
first-supported: FirstSupportedConfigshadowsocks: ShadowsocksPacketListenerConfig
Estratégias
Shadowsocks
LegacyShadowsocksConfig
O LegacyShadowsocksConfig representa um túnel que usa o Shadowsocks como transporte. Ele implementa o formato legado para compatibilidade com versões anteriores.
Formato: struct
Campos:
server(string): o host para se conectarserver_port(number): o número da porta para se conectarmethod(string): a criptografia AEAD a ser usada (link em inglês)password(string): usada para gerar a chave de criptografiaprefix(string): o disfarce de prefixo a ser usado. Compatível com conexões de pacotes e fluxo.
Exemplo:
server: example.com
server_port: 4321
method: chacha20-ietf-poly1305
password: SECRET
prefix: "POST "
LegacyShadowsocksURI
O LegacyShadowsocksURI representa um túnel que usa o Shadowsocks como transporte. Ele implementa o formato legado de URL para compatibilidade com versões anteriores.
Formato: string
Consulte Formato de URI legado do Shadowsocks e Esquema de URI SIP002 (links em inglês). Não oferecemos suporte a plug-ins.
Exemplo:
ss://chacha20-ietf-poly1305:SECRET@example.com:443?prefix=POST%20
ShadowsocksConfig
O ShadowsocksConfig pode representar discadores de fluxo ou de pacotes, bem como um listener de pacotes que usa o Shadowsocks.
Formato: struct
Campos:
endpoint(EndpointConfig): o endpoint do Shadowsocks para se conectarcipher(string): a criptografia AEAD a ser usada (link em inglês)secret(string): usada para gerar a chave de criptografiaprefix(string, opcional): o disfarce de prefixo a ser usado. Compatível com conexões de pacotes e fluxo.
Exemplo:
endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "
Metadefinições
FirstSupportedConfig
Usa a primeira configuração aceita no aplicativo. Esta é uma maneira de incorporar novas configurações e, ao mesmo tempo, manter compatibilidade com outras antigas.
Formato: struct
Campos:
options(EndpointConfig[] | DialerConfig[] | PacketListenerConfig[]): lista de opções a considerar
Exemplo:
options:
- $type: websocket
url: wss://example.com/SECRET_PATH
- ss.example.com:4321
Interface
As interfaces permitem escolher uma entre diversas implementações. Elas usam o campo
$type para especificar o tipo que a configuração representa.
Exemplo:
$type: shadowsocks
endpoint: example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET