Ocultación de prefijo de conexión

Desde la versión 1.9.0 del cliente de Outline, las claves de acceso admiten la opción "prefix". Esta opción es una lista de bytes que sirven como los primeros bytes de la salt de una conexión TCP de Shadowsocks. De esta forma, la conexión puede parecer un protocolo permitido en la red, lo que le permite eludir los cortafuegos que rechazan los protocolos desconocidos.

¿Cuándo debería optar por esta opción?

Si sospechas que se sigue bloqueando a los usuarios de tu despliegue de Outline, te recomendamos probar distintos prefijos.

Instrucciones

El prefijo no debe tener más de 16 bytes. Los prefijos más largos pueden provocar colisiones en la salt, lo que puede poner en riesgo la seguridad del cifrado y hacer que las conexiones se detecten. Usa el prefijo más corto posible para sortear el bloqueo que te hayas encontrado.

El puerto que uses debe coincidir con el protocolo que esté simulando el prefijo. La IANA tiene un registro de los números de puerto de los protocolos de transporte que asocia protocolos y números de puerto.

Estos son algunos ejemplos de prefijos eficaces que parecen protocolos habituales:

Puerto recomendado Codificado como JSON Codificado como URL
Solicitud HTTP 80 (http) "POST " POST%20
Respuesta HTTP 80 (http) "HTTP/1.1 " HTTP%2F1.1%20
Solicitud DNS-over-TCP 53 (dns) "\u0005\u00DC\u005F\u00E0\u0001\u0020" %05%C3%9C_%C3%A0%01%20
TLS ClientHello 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps-data), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (Apple APN), 5228 (Play Store), 5349 (turns) "\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" %16%03%01%00%C2%A8%01%01
TLS Application Data 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps-data), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (Apple APN), 5228 (Play Store), 5349 (turns) "\u0013\u0003\u0003\u003F" %13%03%03%3F
TLS ServerHello 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps-data), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (Apple APN), 5228 (Play Store), 5349 (turns) "\u0016\u0003\u0003\u0040\u0000\u0002" %16%03%03%40%00%02
SSH 22 (ssh), 830 (netconf-ssh), 4334 (netconf-ch-ssh), 5162 (snmpssh-trap) "SSH-2.0\r\n" SSH-2.0%0D%0A

Claves de acceso dinámicas

Para usar la opción de prefijo con las claves de acceso dinámicas (ssconf://), añade una clave "prefix" al objeto JSON, con un valor codificado como JSON que represente el prefijo que quieras (consulta algunos ejemplos en la tabla de arriba). Puedes usar códigos de escape (como \u00FF) para representar puntos de código Unicode no imprimibles en el intervalo de U+0 a U+FF. Por ejemplo:

{
    "server": "example.com",
    "server_port": 8388,
    "password": "example",
    "method": "chacha20-ietf-poly1305",
    "prefix": "\u0005\u00DC\u005F\u00E0\u0001\u0020"
}

Claves de acceso estáticas

Para usar prefijos con las claves de acceso estáticas (ss://), debes modificar tu clave antes de distribuirla. Si tienes una clave de acceso estática generada por Administrador de Outline, consigue una versión de tu prefijo codificada como URL (consulta algunos ejemplos en la tabla de arriba) y añádela al final de la clave de acceso de esta forma:

ss://Z34nthataITHiTNIHTohithITHbVBqQ1o3bkk@127.0.0.1:33142/?outline=1&prefix=<your url-encoded prefix goes here>

Si eres un usuario avanzado, puedes usar la función encodeURIComponent() de tu navegador para convertir tu prefijo codificado como JSON en uno codificado como URL. Para ello, abre la pestaña Consola del inspector web (*Desarrollador > consola web de JavaScript* en Chrome) y escribe lo siguiente:

encodeURIComponent("<your json-encoded prefix goes here>")

Pulsa Intro. El valor que se genera es la versión *codificada como URL*. Por ejemplo:

encodeURIComponent("\u0016\u0003\u0001\u0000\u00a8\u0001\u0001")
'%16%03%01%00%C2%A8%01%01'