Documentação das meias de sombra

Formato de Configuração das Shadowsocks

Arquivo de configuração

Shadowsocks aceita configurações de formato JSON:

{

    “servidor”:”meu_servidor_ip”,

    "server_port":8388,

    “porta_local”:1080,

    “senha”:”barfoo!”,

    “método”:”chacha20-ietf-poly1305″

}

Formato JSON

  • servidor : seu nome de host ou IP do servidor (IPv4/IPv6).
  • server_port: número da porta do servidor.
  • local_port: número da porta local.
  • senha: uma senha usada para criptografar a transferência.
  • método: método de criptografia.

Método de criptografia

Configuramos nossos servidores e recomendamos que você use a cifra AEAD chacha20-ietf-poly1305 porque é o método de criptografia mais forte. 

Se estiver configurando seu próprio servidor shadowsocks, você pode escolher entre “chacha20-ietf-poly1305” ou “aes-256-gcm”.

URL e código QR

Shadowsocks para Android / IOS também aceita configurações de formato de URI codificadas em BASE64:

ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG

 

O URI simples deve ser: ss://method:password@hostname:port

O URI acima não segue RFC3986. A senha, neste caso, deve ser texto simples, não codificada por porcentagem.



Exemplo: Estamos usando um servidor em 192.168.100.1:8888 utilização bf-cfb método de criptografia e senha teste/!@#:

 

Então, com o URI simples ss://bf-cfb:test/!@#:@192.168.100.1:8888, podemos gerar o URI codificado em BASE64: 

 

> console.log( “ss://” + btoa(“bf-cfb:teste/!@#:@192.168.100.1:8888”) )

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg

 

Para ajudar a organizar e identificar esses URIs, você pode anexar uma tag após a string codificada em BASE64:

ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server

Endereçando

Shadowsocks usa os endereços encontrados no formato de endereço SOCKS5:

[tipo de 1 byte][host de comprimento variável][porta de 2 bytes]

 

Aqui estão os tipos de endereço definidos:

  • 0x01 : host é um endereço IPv4 de 4 bytes.
  • 0x03 : host é uma string de comprimento variável, começando com um comprimento de 1 byte, seguido por um nome de domínio máximo de 255 bytes.
  • 0x04 : host é um endereço IPv16 de 6 bytes.

 

O número da porta é um inteiro sem sinal big-endian de 2 bytes.

TCP

O cliente ss-local inicia uma conexão com ss-remote enviando dados criptografados começando com o endereço de destino seguido pelos dados de carga útil. A criptografia será diferente dependendo da cifra usada.

[endereço de destino][carga útil]

O ss-remote recebe os dados criptografados, então descriptografa e analisa o endereço de destino. Em seguida, ele cria uma nova conexão TCP com o destino e encaminha os dados de carga para ele. O ss-remote recebe uma resposta do alvo, criptografa os dados e os encaminha de volta para o ss-local até que seja desconectado.

Para fins de ofuscação, local e remoto devem enviar os dados de handshake com alguma carga útil no primeiro pacote.

UDP

ss-local envia o pacote de dados criptografados contendo o endereço de destino e a carga útil para ss-remote.

[endereço de destino][carga útil]

Depois que o pacote criptografado é recebido, o ss-remote descriptografa e analisa o endereço de destino. Em seguida, ele envia um novo pacote de dados com a carga para o destino. O ss-remote recebe os pacotes de dados do destino e anexa o endereço de destino à carga em cada pacote. As cópias criptografadas são enviadas de volta para ss-local.

[endereço de destino][carga útil]

Esse processo pode ser resumido a ss-remote executando uma tradução de endereço de rede para ss-local.

Comece seu teste gratuito de 5 dias