Documentação das meias de sombra
Navegação
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.