Volver a actualizaciones
Nuevo releaseAug 9, 2026

chisel v1.12.0-rc3

Túnel rápido TCP/UDP sobre HTTP con cifrado SSH, que admite reenvío de puertos inverso, proxy SOCKS5 y autenticación de cliente para la travesía segura de la red y evasión de cortafuegos.

Compartir

Chisel

GoDoc CI

Chisel es un túnel TCP/UDP rápido, transportado sobre HTTP, asegurado mediante SSH. Un único ejecutable que incluye tanto el cliente como el servidor. Escrito en Go (golang). Chisel es principalmente útil para atravesar firewalls, aunque también puede utilizarse para proporcionar un endpoint seguro hacia tu red.

vista general

Tabla de contenidos

Características

  • Fácil de usar
  • Alto rendimiento*
  • Conexiones cifradas usando el protocolo SSH (a través de crypto/ssh)
  • Conexiones autenticadas; conexiones de cliente autenticadas con un archivo de configuración de usuarios, conexiones de servidor autenticadas mediante coincidencia de huellas digitales.
  • El cliente se reconecta automáticamente con retroceso exponencial (ajustable mediante --min/max-retry-interval); los pings de keepalive expiran, por lo que las conexiones muertas en silencio (suspensión/activación, tiempos de espera de NAT, reinicios del servidor) se detectan y se restablecen
  • Los clientes pueden crear múltiples endpoints de túnel sobre una única conexión TCP
  • Los clientes pueden opcionalmente atravesar proxies SOCKS o HTTP CONNECT
  • Reenvío de puerto inverso (las conexiones van a través del servidor y salen por el cliente)
  • El servidor puede actuar opcionalmente como un proxy inverso
  • El servidor permite opcionalmente conexiones SOCKS5 (consulte la guía a continuación)
  • Los clientes permiten opcionalmente conexiones SOCKS5 desde un reenvío de puerto inverso
  • Conexiones de cliente a través de stdio, que admite ssh -o ProxyCommand, proporcionando SSH sobre HTTP

Instalación

Binarios

Releases Releases

Consulta la última versión o descárgalo e instálalo ahora con curl https://i.jpillora.com/chisel! | bash

Los binarios se compilan con la última versión de Go, que establece las versiones mínimas de SO: Windows 10 / Server 2016, macOS 12, kernel de Linux 3.2, FreeBSD 12.2. Para sistemas más antiguos (p. ej., Windows 7), usa la versión v1.8.1 o anterior.

Docker

Docker Pulls Image Size```sh docker run --rm -it jpillora/chisel --help

Las imágenes son multi-arquitectura y se publican tanto en Docker Hub (`jpillora/chisel`) como en GitHub Container Registry (`ghcr.io/jpillora/chisel`).

### Fedora

El paquete es mantenido por la comunidad de Fedora. Si encuentras problemas relacionados con el uso del RPM, utiliza este [rastreador de incidencias](https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&classification=Fedora&component=chisel&list_id=11614537&product=Fedora&product=Fedora%20EPEL).```sh
sudo dnf -y install chisel

Fuente```sh

$ go install github.com/jpillora/chisel@latest

## Demo

Puedes ejecutar tu propio servidor demo en minutos (la antigua demo de Heroku desapareció con el nivel gratuito de Heroku). [`example/fly.toml`](https://github.com/jpillora/chisel/blob/HEAD/example/fly.toml) despliega este `chisel server` en la cuota gratuita de [fly.io](https://fly.io):```sh
$ chisel server --port $PORT --backend http://example.com
# listens on $PORT, proxies normal web requests to http://example.com

Despliégalo con fly launch --copy-config desde el directorio example/, y luego establece un túnel hacia cualquier servicio que se ejecute junto al servidor, por ejemplo:```sh $ chisel client https://.fly.dev 3000

connects to your chisel server,

tunnels your localhost:3000 to the server's localhost:3000

Visitar la URL de tu aplicación en un navegador llega al proxy de backend predeterminado del servidor y muestra una copia de [example.com](http://example.com).

## Uso

<!-- renderiza estos textos de ayuda a mano,
  o usa https://github.com/jpillora/md-tmpl
    con $ md-tmpl -w README.md -->

<!--tmpl,code=plain:echo "$ chisel --help" && go run main.go --help | sed 's#0.0.0-src (go1\..*)#X.Y.Z#' -->``` plain 
$ chisel --help

  Usage: chisel [command] [--help]

  Version: X.Y.Z

  Commands:
    server - runs chisel in server mode
    client - runs chisel in client mode

  Read more:
    https://github.com/jpillora/chisel

``` plain

$ chisel server --help

Usage: chisel server [options]

Options:

--host, Defines the HTTP listening host – the network interface
(defaults the environment variable HOST and falls back to 0.0.0.0).

--port, -p, Defines the HTTP listening port (defaults to the environment
variable PORT and falls back to port 8080).

--key, (deprecated use --keygen and --keyfile instead)
An optional string to seed the generation of a ECDSA public
and private key pair. All communications will be secured using this
key pair. Share the subsequent fingerprint with clients to enable detection
of man-in-the-middle attacks (defaults to the CHISEL_KEY environment
variable, otherwise a new key is generate each run).

--keygen, A path to write a newly generated PEM-encoded SSH private key file.
If users depend on your --key fingerprint, you may also include your --key to
output your existing key. Use - (dash) to output the generated key to stdout.

--keyfile, An optional path to a PEM-encoded SSH private key. When
this flag is set, the --key option is ignored, and the provided private key
is used to secure all communications. (defaults to the CHISEL_KEY_FILE
environment variable). Since ECDSA keys are short, you may also set keyfile
to the inline key string itself, exactly as printed by --keygen (a base64
string with a "ck-" prefix); no extra base64 encoding is needed.

--authfile, An optional path to a users.json file. This file should
be an object with users defined like:
  {
    "<user:pass>": ["<addr-regex>","<addr-regex>"]
  }
when <user> connects, their <pass> will be verified and then
each of the remote addresses will be compared against the list
of address regular expressions for a match. Patterns are NOT
anchored by default: "10.0.0.1:80" also matches
"210.0.0.1:8080", and "." matches any character. Anchor your
patterns, e.g. "^10\.0\.0\.1:80$". The empty string ""
matches every address. Addresses will
always come in the form "<remote-host>:<remote-port>" for normal remotes,
"R:<local-interface>:<local-port>" for reverse port forwarding
remotes, and "socks" for SOCKS5 proxy access. Note that SOCKS5
access previously bypassed this list; existing authfiles which
should allow SOCKS5 must add an entry matching "socks" (the
empty wildcard "" matches everything, including "socks"). This
file will be automatically reloaded on change. Reloads apply
to new connections and to new tunnels of connected clients;
established tunnels are not interrupted.

--auth, An optional string representing a single user with full
access, in the form of <user:pass>. It is equivalent to creating an
authfile with {"<user:pass>": [""]}. If unset, it will use the
environment variable AUTH.

--keepalive, An optional keepalive interval. Since the underlying
transport is HTTP, in many instances we'll be traversing through
proxies, often these proxies will close idle connections. You must
specify a time with a unit, for example '5s' or '2m'. Defaults
to '25s' (set to 0s to disable).

--backend, Specifies another HTTP server to proxy requests to when
chisel receives a normal HTTP request. Useful for hiding chisel in
plain sight. --proxy is accepted as an alias for this flag.

--socks5, Allow clients to access the internal SOCKS5 proxy. See
chisel client --help for more information.

--reverse, Allow clients to specify reverse port forwarding remotes
in addition to normal remotes.

--tls-key, Enables TLS and provides optional path to a PEM-encoded
TLS private key. When this flag is set, you must also set --tls-cert,
and you cannot set --tls-domain.

--tls-cert, Enables TLS and provides optional path to a PEM-encoded
TLS certificate. When this flag is set, you must also set --tls-key,
and you cannot set --tls-domain.

--tls-domain, Enables TLS and automatically acquires a TLS key and
certificate using LetsEncrypt. Setting --tls-domain requires port 443.
You may specify multiple --tls-domain flags to serve multiple domains.
The resulting files are cached in the "$HOME/.cache/chisel" directory.
You can modify this path by setting the CHISEL_LE_CACHE variable,
or disable caching by setting this variable to "-". You can optionally
provide a certificate notification email by setting CHISEL_LE_EMAIL.

--tls-ca, a path to a PEM encoded CA certificate bundle or a directory
holding multiple PEM encode CA certificate bundle files, which is used to 
validate client connections. The provided CA certificates will be used 
instead of the system roots. This is commonly used to implement mutual-TLS. 

--pid Generate pid file in current working directory

-v, Enable verbose logging

--help, This help text

Signals: The chisel process is listening for: a SIGINT or SIGTERM to begin a graceful shutdown (a second signal forces an immediate exit), a SIGUSR2 to print process stats, and a SIGHUP to short-circuit the client reconnect timer

Version: X.Y.Z

Read more: https://github.com/jpillora/chisel

<!--/tmpl-->


<!--tmpl,code=plain:echo "$ chisel client --help" && go run main.go client --help | sed 's#0.0.0-src (go1\..*)#X.Y.Z#' -->``` plain 
$ chisel client --help

  Usage: chisel client [options] <server> <remote> [remote] [remote] ...

  <server> is the URL to the chisel server.

  <remote>s are remote connections tunneled through the server, each of
  which come in the form:

    <local-host>:<local-port>:<remote-host>:<remote-port>/<protocol>

    ■ local-host defaults to 0.0.0.0 (all interfaces).
    ■ local-port defaults to remote-port.
    ■ remote-port is required*.
    ■ remote-host defaults to 127.0.0.1 (server localhost).
    ■ protocol defaults to tcp.

  which shares <remote-host>:<remote-port> from the server to the client
  as <local-host>:<local-port>, or:

    R:<local-interface>:<local-port>:<remote-host>:<remote-port>/<protocol>

  which does reverse port forwarding, sharing <remote-host>:<remote-port>
  from the client to the server's <local-interface>:<local-port>.

    example remotes

      3000
      example.com:3000
      3000:google.com:80
      192.168.0.5:3000:google.com:80
      socks
      5000:socks
      R:2222:localhost:22
      R:socks
      R:5000:socks
      stdio:example.com:22
      1.1.1.1:53/udp

    When the chisel server has --socks5 enabled, remotes can
    specify "socks" in place of remote-host and remote-port.
    The default local host and port for a "socks" remote is
    127.0.0.1:1080. Connections to this remote will terminate
    at the server's internal SOCKS5 proxy. When the server also
    has --authfile set, SOCKS5 access requires an entry matching
    the token "socks" in the user's address list.

    When the chisel server has --reverse enabled, remotes can
    be prefixed with R to denote that they are reversed. That
    is, the server will listen and accept connections, and they
    will be proxied through the client which specified the remote.
    Reverse remotes specifying "R:socks" will listen on the server's
    default socks port (1080) and terminate the connection at the
    client's internal SOCKS5 proxy.

    When stdio is used as local-host, the tunnel will connect standard
    input/output of this program with the remote. This is useful when 
    combined with ssh ProxyCommand. You can use
      ssh -o ProxyCommand='chisel client chiselserver stdio:%h:%p' \
          [email protected]
    to connect to an SSH server through the tunnel.

  Options:

    --fingerprint, A *strongly recommended* fingerprint string
    to perform host-key validation against the server's public key.
    Fingerprint mismatches will close the connection.
    Fingerprints are generated by hashing the ECDSA public key using
    SHA256 and encoding the result in base64.
    Fingerprints must be 44 characters containing a trailing equals (=).
    Legacy MD5 colon fingerprints (deprecated) are still accepted,
    but only in their full 16-octet form; truncated prefixes are
    rejected.

    --auth, An optional username and password (client authentication)
    in the form: "<user>:<pass>". These credentials are compared to
    the credentials inside the server's --authfile. defaults to the
    AUTH environment variable.

    --keepalive, An optional keepalive interval. Since the underlying
    transport is HTTP, in many instances we'll be traversing through
    proxies, often these proxies will close idle connections. You must
    specify a time with a unit, for example '5s' or '2m'. Defaults
    to '25s' (set to 0s to disable).

    --max-retry-count, Maximum number of times to retry before exiting.
    Defaults to unlimited.

    --min-retry-interval, Minimum wait time before retrying after a
    disconnection. Defaults to 1 second.

    --max-retry-interval, Maximum wait time before retrying after a
    disconnection. Defaults to 5 minutes.

    --proxy, An optional HTTP CONNECT or SOCKS5 proxy which will be
    used to reach the chisel server. Authentication can be specified
    inside the URL. Credentials must be URL-encoded; for example a
    "#" in the password must be written as "%23".
    For example, http://admin:[email protected]:8081
            or: socks://admin:[email protected]:1080
    The socks://, socks5:// and socks5h:// schemes are equivalent:
    DNS is always resolved by the proxy.

    --header, Set a custom header in the form "HeaderName: HeaderContent".
    Can be used multiple times. (e.g --header "Foo: Bar" --header "Hello: World")

    --hostname, Optionally set the 'Host' header (defaults to the host
    found in the server url).

    --sni, Override the ServerName when using TLS (defaults to the 
    hostname).

    --tls-ca, An optional root certificate bundle used to verify the
    chisel server. Only valid when connecting to the server with
    "https" or "wss". By default, the operating system CAs will be used.

    --tls-skip-verify, Skip server TLS certificate verification of
    chain and host name (if TLS is used for transport connections to
    server). If set, client accepts any TLS certificate presented by
    the server and any host name in that certificate. This only affects
    transport https (wss) connection. Chisel server's public key
    may be still verified (see --fingerprint) after inner connection
    is established.

    --tls-key, a path to a PEM encoded private key used for client 
    authentication (mutual-TLS).

    --tls-cert, a path to a PEM encoded certificate matching the provided 
    private key. The certificate must have client authentication 
    enabled (mutual-TLS).

    --pid Generate pid file in current working directory

    -v, Enable verbose logging

    --help, This help text

  Signals:
    The chisel process is listening for:
      a SIGINT or SIGTERM to begin a graceful shutdown
        (a second signal forces an immediate exit),
      a SIGUSR2 to print process stats, and
      a SIGHUP to short-circuit the client reconnect timer

  Version:
    X.Y.Z

  Read more:
    https://github.com/jpillora/chisel

Seguridad

El cifrado está siempre habilitado. Cuando inicias un servidor chisel, este genera un par de claves ECDSA pública/privada en memoria. La huella digital de la clave pública (SHA256 codificado en base64) se mostrará al iniciar el servidor. En lugar de generar una clave aleatoria, el servidor puede especificar opcionalmente un archivo de clave mediante la opción --keyfile. Cuando los clientes se conectan, también mostrarán la huella digital de la clave pública del servidor. El cliente puede forzar una huella digital concreta usando la opción --fingerprint. Las huellas digitales MD5 heredadas todavía se aceptan, pero deben estar en la forma completa de 16 octetos con dos puntos; los prefijos truncados se rechazan. Consulta la ayuda --help anterior para más información.

El servidor también limita el tamaño de los mensajes websocket entrantes antes de la autenticación (CHISEL_WS_READ_LIMIT, 512 KiB por defecto), de modo que los pares no autenticados no puedan agotar la memoria con mensajes de tamaño excesivo. El valor predeterminado queda cómodamente por encima del paquete de transporte máximo de 256 KiB de x/crypto/ssh, por lo que ningún paquete SSH válido es rechazado jamás. Solo 0 desactiva el límite; los valores negativos vuelven al valor seguro predeterminado.

Autenticación

Mediante la opción --authfile, el servidor puede proporcionar opcionalmente un archivo de configuración user.json para crear una lista de usuarios aceptados. El cliente se autentica entonces usando la opción --auth. Consulta users.json para ver un ejemplo de archivo de configuración de autenticación. Consulta la ayuda --help anterior para más información.

Notas sobre el comportamiento del authfile:

  • El archivo se observa y se recarga en caliente — incluyendo guardados de editor mediante renombrado (vim) y actualizaciones de configmaps de kubernetes. Las recargas se aplican a nuevas conexiones y a nuevos túneles de clientes ya conectados; los usuarios eliminados pierden el acceso a nuevos túneles inmediatamente, aunque los túneles establecidos no se interrumpen.
  • Los patrones de direcciones son expresiones regulares y no están anclados — anclalos con ^ y $ (el servidor advierte sobre patrones sin anclar al cargarlos). La cadena vacía "" coincide con todo.
  • El acceso SOCKS5 está controlado por una entrada que coincide con el token socks. Cambio importante: SOCKS5 anteriormente omitía el authfile por completo; los servidores que ejecutan --socks5 con --authfile deben otorgar socks a los usuarios que deban conservar el acceso de proxy (las entradas comodín "" siguen funcionando).
  • Las cadenas de autenticación sin dos puntos (user:pass) ahora son un error de inicio fatal tanto en el servidor como en el cliente; anteriormente desactivaban la autenticación silenciosamente.
  • El usuario de --auth sobrevive a las recargas del authfile y gana en conflictos de nombre con usuarios del archivo.

Internamente, esto se hace mediante el método de autenticación Password proporcionado por SSH. Aprende más sobre crypto/ssh aquí http://blog.gopheracademy.com/go-and-ssh/. Las aperturas/cierres de sesión (con usuario, dirección de origen y remotos) y los intentos de inicio de sesión fallidos se registran a nivel de información.

Guía TLS

La configuración segura más simple es --tls-domain, que aprovisiona automáticamente un certificado LetsEncrypt (requiere el puerto 443 y un registro DNS que apunte al servidor):```sh chisel server --port 443 --tls-domain chisel.example.com --auth user:pass chisel client --auth user:pass https://chisel.example.com R:2222:localhost:22

Para usar tu propio certificado (autofirmado o CA interna), genera un par de clave/certificado y apunta ambos lados a los archivos correctos:```sh
chisel server --port 443 --tls-key key.pem --tls-cert cert.pem
chisel client --tls-ca ca.pem https://chisel.example.com 3000

Para TLS mutuo, pasa también --tls-ca al servidor y --tls-cert/--tls-key a cada cliente. Ten en cuenta que TLS envuelve el transporte de chisel desde el exterior; la capa SSH interna sigue cifrando y autenticando, por lo que la validación de --fingerprint funciona con o sin TLS.

Guía de SOCKS5 con Docker

  1. Imprime una nueva clave privada en la terminal

    chisel server --keygen -
    # or save it to disk --keygen /path/to/mykey
    
  2. Inicia tu servidor chisel

    jpillora/chisel server --keyfile '<ck-base64 string or file path>' -p 9312 --socks5
    
  3. Conecta tu cliente chisel (usando la huella digital del servidor)

    chisel client --fingerprint '<see server output>' <server-address>:9312 socks
    
  4. Apunta tus clientes SOCKS5 (p. ej., sistema operativo/navegador) a:

    <client-address>:1080
    
  5. Ahora tienes una conexión SOCKS5 cifrada y autenticada a través de HTTP

Nota: si el servidor también usa --authfile, los usuarios necesitan una entrada que coincida con el token socks para usar el proxy (consulta Autenticación).

SOCKS inverso con un Authfile

Para permitir que un cliente específico actúe como nodo de salida SOCKS, concédele la dirección de listener de SOCKS inverso (R:socks escucha en 127.0.0.1:1080 del servidor):```json { "exituser:password": ["^R:127\.0\.0\.1:1080$"] }

No se proporcionó contenido en el campo INPUT. No hay texto que traducir.```sh
chisel server --reverse --authfile users.json
chisel client --auth exituser:password <server-address> R:socks
# server-side consumers point SOCKS5 clients at 127.0.0.1:1080,
# and their traffic exits via the chisel client's network

Consulte también el ejemplo paso a paso de túnel inverso.

Ejecutar detrás de un CDN (Cloudflare)

chisel funciona a través de CDN que admiten WebSockets. Para Cloudflare: habilita WebSockets, activa el proxy (nube naranja) en el registro DNS y conecta los clientes con https://. El CDN termina TLS, pero la capa SSH interna hace que la validación de --fingerprint siga autenticando tu servidor chisel de extremo a extremo — el CDN no puede leer ni modificar el tráfico tunelizado. Mantén --keepalive en su valor predeterminado de 25s para no superar los tiempos de inactividad del CDN, y ten en cuenta que los proxies que eliminan las cabeceras Upgrade no pueden transportar chisel en absoluto.

Ajuste mediante variables de entorno

Los ajustes menos habituales son variables de entorno, todas se leen con un prefijo CHISEL_ (p. ej. CHISEL_WS_TIMEOUT=10s):

VariableLadoPredeterminadoPropósito
WS_TIMEOUTcliente45stiempo de espera del handshake de websocket
SSH_TIMEOUTcliente30stiempo de espera del handshake ssh
CONFIG_TIMEOUTservidor10sespera de la solicitud de configuración del cliente
SSH_WAITambos35scuánto tiempo esperan los nuevos túneles por una conexión activa
PING_TIMEOUTambosintervalo de keepalivetiempo de espera de la respuesta al ping de keepalive (sin pings si --keepalive 0)
DIAL_TIMEOUTnodo de salida30stiempo de espera del dial tcp para los destinos del túnel
WS_READ_LIMITambos524288máximo de bytes de mensajes websocket entrantes (0 = sin límite; negativo = predeterminado)
WS_BUFF_SIZEambospredeterminado de gotamaños de los búferes de lectura/escritura de websocket
UDP_MAX_SIZEambos9012máximo de bytes por paquete udp
UDP_DEADLINEnodo de salida15splazo de lectura del flujo udp y antigüedad del barrido por inactividad
UDP_MAX_CONNSnodo de salida100máximo de flujos udp concurrentes por túnel
SHUTDOWN_GRACEservidor5stiempo de drenaje de solicitudes http al apagarse

HOST, PORT, AUTH y CHISEL_KEY/CHISEL_KEY_FILE están documentados en los textos de --help anteriores.

Advertencias

Dado que se requiere compatibilidad con WebSockets:

  • Todos los proveedores de IaaS admiten WebSockets (a menos que se haya colocado a la fuerza un proxy HTTP no compatible delante de ti, en cuyo caso argumentaría que te han degradado a PaaS)
  • Los proveedores de PaaS varían en su compatibilidad con WebSockets
    • Heroku tiene compatibilidad total
    • Openshift tiene compatibilidad total, aunque las conexiones solo se aceptan en los puertos 8443 y 8080
    • Google App Engine estándar no tiene compatibilidad (el entorno flexible sí)

Contribuir

Registro de cambios

  • 1.0 - Lanzamiento inicial
  • 1.1 - Se sustituyó el cifrado simétrico simple por ECDSA SSH
  • 1.2 - Se añadió compatibilidad con SOCKS5 (servidor) y HTTP CONNECT (cliente)
  • 1.3 - Se añadió compatibilidad con túneles inversos
  • 1.4 - Se añadió compatibilidad con cabeceras HTTP arbitrarias
  • 1.5 - Se añadió compatibilidad con SOCKS inverso (por @aus)
  • 1.6 - Se añadió compatibilidad con stdio del cliente (por @BoleynSu)
  • 1.7 - Se añadió compatibilidad con UDP
  • 1.8 - Migración a una imagen Docker scratch
  • 1.9 - Actualización a Go 1.21. Cambio de la semilla --key a cadenas de clave P256 con --key{gen,file} (por @cmenginnz)
  • 1.10 - Actualización a Go 1.22. Se añaden .rpm, .deb y .apk a los lanzamientos. Se corrige la comparación errónea de versiones.
  • 1.11 - Actualización a Go 1.25.1. Se actualizan todas las dependencias.
  • 1.12 - (no publicado) Revisión de fiabilidad y seguridad:
    • los pings de keepalive ahora tienen tiempo de espera (CHISEL_PING_TIMEOUT), por lo que las conexiones muertas se reconectan rápidamente tras la suspensión/activación, los tiempos de espera de NAT y los reinicios del servidor
    • las recargas de authfile sobreviven a los renombrados del editor y a los intercambios de configmaps de Kubernetes, y se aplican en caliente a los clientes conectados (túneles nuevos; los túneles establecidos no se interrumpen)
    • cambio incompatible: con --socks5 + --authfile, el acceso SOCKS5 ahora requiere una entrada de authfile que coincida con socks (las entradas comodín "" siguen funcionando)
    • cambio incompatible: las huellas digitales MD5 heredadas truncadas se rechazan — --fingerprint debe ser la forma SHA256 completa (o la forma MD5 completa de 16 octetos con dos puntos)
    • cambio incompatible: las cadenas de autenticación sin dos puntos (p. ej. --auth user) son un error fatal al iniciar en lugar de deshabilitar silenciosamente la autenticación
    • el cierre parcial de TCP se propaga a través de los túneles, y los destinos inalcanzables rechazan el túnel en lugar de presentar una conexión muerta (CHISEL_DIAL_TIMEOUT, 30s por defecto)
    • apagado ordenado ante SIGTERM con drenaje de solicitudes HTTP (CHISEL_SHUTDOWN_GRACE); una segunda señal fuerza la salida
    • los nodos de salida UDP ya no se rompen ni filtran más allá de 100 flujos concurrentes (CHISEL_UDP_MAX_CONNS)
    • los mensajes websocket entrantes tienen un límite de tamaño previo a la autenticación (CHISEL_WS_READ_LIMIT)
    • el servidor ya no entra en pánico cuando un cliente se desconecta entre el handshake SSH y su solicitud de configuración (#608)
    • el cliente sale con código distinto de cero cuando se agota --max-retry-count; se añade --min-retry-interval (por defecto 1s); socks5:// aceptado para --proxy
    • las compilaciones con go install informan de su versión real; las sesiones y los inicios de sesión fallidos se registran a nivel de información
    • los lanzamientos ahora distribuyen imágenes Docker multi-arquitectura construidas con goreleaser a GHCR y Docker Hub con versiones correctamente marcadas; el lanzamiento es de dos etapas — el etiquetado crea un borrador de release de GitHub además de imágenes con etiquetas de versión, y la publicación del borrador promueve las etiquetas Docker latest / X / X.Y

Actualización a 1.12

Cuatro cambios pueden requerir intervención al actualizar desde 1.11.x o versiones anteriores:

  1. SOCKS5 + --authfile (aplicado desde v1.11.7): los usuarios que deban conservar el acceso proxy necesitan una entrada de authfile que coincida con el token socks (el comodín "" sigue funcionando). Consulta Autenticación. Las solicitudes denegadas se registran en el servidor como Denied connection to socks (ACL).
  2. --fingerprint: las huellas digitales MD5 heredadas truncadas se rechazan. Usa la huella digital SHA256 completa impresa por el servidor y el cliente (la forma MD5 completa de 16 octetos con dos puntos todavía se acepta, pero está obsoleta).
  3. --auth: los valores deben ser <user>:<pass> — las cadenas sin dos puntos ahora fallan al inicio en lugar de deshabilitar la autenticación silenciosamente.
  4. Códigos de salida: chisel client con --max-retry-count ahora sale con código distinto de cero cuando se agotan los intentos de conexión; los scripts que comprueban $? y las unidades systemd Restart=on-failure lo notarán.

Licencia

MIT © Jaime Pillora

Categorías