Documentación de Shadowsocks
Navegación
Formato de configuración de Shadowsocks
Archivo de configuración
Shadowsocks toma configuraciones de formato JSON:
{
“servidor”:”mi_ip_del_servidor”,
"Server_port": 8388,
"Puerto_local": 1080,
“contraseña”:”barfoo!”,
“método”:”chacha20-ietf-poly1305″
}
Formato JSON
- servidor: su nombre de host o IP del servidor (IPv4/IPv6).
- server_port: número de puerto del servidor.
- local_port: número de puerto local.
- contraseña: una contraseña utilizada para cifrar la transferencia.
- método: método de cifrado.
Método de cifrado
Configuramos nuestros servidores y le recomendamos que utilice el cifrado AEAD chacha20-ietf-poly1305 porque es el método de cifrado más seguro.
Si configura su propio servidor shadowsocks, puede elegir entre "chacha20-ietf-poly1305" o "aes-256-gcm".
URI y código QR
Shadowsocks para Android / IOS también acepta configuraciones de formato URI codificadas en BASE64:
ss://BASE64-CADENA-CODIFICADA-SIN-RELLENO#ETIQUETA
El URI simple debe ser: ss://método:contraseña@nombre de host:puerto
El URI anterior no sigue RFC3986. La contraseña en este caso debe ser texto sin formato, no codificada en porcentaje.
Ejemplo: estamos usando un servidor en 192.168.100.1:8888 usando bf-cfb método de cifrado y contraseña prueba/!@#:.
Luego, con el URI simple ss://bf-cfb:prueba/!@#:@192.168.100.1:8888, podemos generar el URI codificado en BASE64:
> consola.log(“ss://” + btoa(“bf-cfb:prueba/!@#:@192.168.100.1:8888”) )
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg
Para ayudar a organizar e identificar estos URI, puede agregar una etiqueta después de la cadena codificada en BASE64:
ss://YmYtY2ZiOnRlc3QvIUAjOkAxOTIuMTY4LjEwMC4xOjg4ODg#example-server
Direccionamiento
Shadowsocks utiliza las direcciones que se encuentran en el formato de dirección SOCKS5:
[tipo de 1 byte] [host de longitud variable] [puerto de 2 bytes]
Estos son los tipos de dirección definidos:
- 0x01: el host es una dirección IPv4 de 4 bytes.
- 0x03: host es una cadena de longitud variable, que comienza con una longitud de 1 byte, seguida de un nombre de dominio de 255 bytes como máximo.
- 0x04: el host es una dirección IPv16 de 6 bytes.
El número de puerto es un entero sin signo big-endian de 2 bytes.
TCP
El cliente ss-local inicia una conexión a ss-remote mediante el envío de datos cifrados que comienzan con la dirección de destino seguida de los datos de carga útil. El cifrado será diferente según el cifrado utilizado.
[dirección de destino][carga útil]
El ss-remote recibe los datos cifrados, luego descifra y analiza la dirección de destino. Luego, crea una nueva conexión TCP con el objetivo y le reenvía los datos de la carga útil. ss-remote recibe una respuesta del objetivo, luego cifra los datos y los reenvía a ss-local hasta que se desconecta.
Para fines de ofuscación, local y remoto deben enviar los datos del protocolo de enlace con alguna carga útil en el primer paquete.
UDP
ss-local envía el paquete de datos cifrados que contiene la dirección de destino y la carga útil a ss-remote.
[dirección de destino][carga útil]
Una vez que se recibe el paquete cifrado, ss-remote descifra y analiza la dirección de destino. Luego envía un nuevo paquete de datos con la carga útil al destino. ss-remote recibe los paquetes de datos del destino y antepone la dirección de destino a la carga útil en cada paquete. Las copias cifradas se devuelven a ss-local.
[dirección de destino][carga útil]
Este proceso puede reducirse a ss-remote realizando una traducción de direcciones de red para ss-local.