Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
chisel — 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. | Kitploit
Herramientas/GitHubGitHub/jpillora/chisel
Utilidades de Propósito GeneralProxies Web e InterceptaciónEvasión de IDS/IPSExfiltración de DatosSeguridad de RedesPruebas de PenetraciónComando y ControlUtilidades y FrameworksRed TeamingHerramienta de Acceso RemotoTroyano de Acceso Remoto
16.4k1.6k146hace 1 mesRevisado por Kitploit
Top en Comando y Control #17
Top en Exfiltración de Datos #3
Top en Utilidades de Propósito General #8
Top en Evasión de IDS/IPS #9
Top en Herramienta de Acceso Remoto #12
Top en Troyano de Acceso Remoto #13
Top en Utilidades y Frameworks #11
Top en Proxies Web e Interceptación #8
GitHubjpillora/chisel

chisel

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.

Ver Repositorio

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
# Chisel

[![GoDoc](https://godoc.org/github.com/jpillora/chisel?status.svg)](https://godoc.org/github.com/jpillora/chisel) [![CI](https://github.com/jpillora/chisel/workflows/CI/badge.svg)](https://github.com/jpillora/chisel/actions?workflow=CI)

Chisel es un túnel TCP/UDP rápido, transportado sobre HTTP y 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.

![overview](https://assets.kitploit.com/production/public/readmes/1084/7f9bb728fdb834aad865b50d9798c4b62bb22f9fa37915bc4d5a5ca9c6f7aed0.png)

## Tabla de contenidos

- [Características](#features)
- [Instalación](#install)
- [Demo](#demo)
- [Uso](#usage)
- [Contribuciones](#contributing)
- [Registro de cambios](#changelog)
- [Licencia](#license)

## Características

- Fácil de usar
- [Rendimiento](https://github.com/jpillora/chisel/blob/master/test/bench/perf.md)\*
- [Conexiones cifradas](#security) mediante el protocolo SSH (a través de `crypto/ssh`)
- [Conexiones autenticadas](#authentication); 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](https://github.com/jpillora/backoff) (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 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 pasar a través de proxies SOCKS o HTTP CONNECT
- Reenvío de puertos inverso (las conexiones pasan por el servidor y salen por el cliente)
- El servidor opcionalmente actúa como [proxy inverso](http://golang.org/pkg/net/http/httputil/#NewSingleHostReverseProxy)
- El servidor opcionalmente permite conexiones [SOCKS5](https://en.wikipedia.org/wiki/SOCKS) (consulta la [guía a continuación](#socks5-guide))
- Los clientes opcionalmente permiten conexiones [SOCKS5](https://en.wikipedia.org/wiki/SOCKS) desde un reenvío de puerto inverso
- Conexiones de cliente a través de stdio que admiten `ssh -o ProxyCommand` proporcionando SSH sobre HTTP

## Instalación

### Binarios

[![Releases](https://img.shields.io/github/release/jpillora/chisel.svg)](https://github.com/jpillora/chisel/releases) [![Releases](https://img.shields.io/github/downloads/jpillora/chisel/total.svg)](https://github.com/jpillora/chisel/releases)

Consulta [la última versión](https://github.com/jpillora/chisel/releases/latest) o descárgala e instálala 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 sistema operativo: Windows 10 / Server 2016, macOS 12, kernel de Linux 3.2, FreeBSD 12.2. Para sistemas más antiguos (por ejemplo, Windows 7), utiliza la [versión v1.8.1](https://github.com/jpillora/chisel/releases/tag/v1.8.1) o anterior.

### Docker

[![Docker Pulls](https://img.shields.io/docker/pulls/jpillora/chisel.svg)](https://hub.docker.com/r/jpillora/chisel/) [![Image Size](https://img.shields.io/docker/image-size/jpillora/chisel/latest)](https://hub.docker.com/r/jpillora/chisel/tags)```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 de demostración en minutos (la antigua demo de Heroku desapareció con el plan gratuito de Heroku). [`example/fly.toml`](https://github.com/jpillora/chisel/blob/master/example/fly.toml) despliega este `chisel server` en la asignación 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 haz un túnel hacia cualquier servicio que se ejecute junto al servidor, por ejemplo:```sh
$ chisel client https://<your-app>.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 alcanza el proxy backend predeterminado del servidor y muestra una copia de [example.com](http://example.com).

## Uso

<!-- render these help texts by hand,
  or use https://github.com/jpillora/md-tmpl
    with $ 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

```
<!--/tmpl-->


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

```
<!--/tmpl-->

### Seguridad

El cifrado está siempre habilitado. Cuando inicias un servidor chisel, este genera un par de claves pública/privada ECDSA 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 específica usando la opción `--fingerprint`. Las huellas digitales MD5 heredadas aún se aceptan, pero deben estar en la forma completa de 16 octetos separados por dos puntos; los prefijos truncados se rechazan. Consulta la opción `--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 se sitúa cómodamente por encima del paquete máximo de transporte de 256 KiB de `x/crypto/ssh`, por lo que ningún paquete SSH válido se rechaza 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](https://github.com/jpillora/chisel/blob/master/example/users.json) para ver un ejemplo de archivo de configuración de autenticación. Consulta la opción `--help` anterior para más información.

Notas sobre el comportamiento de authfile:

- El archivo se vigila y se **recarga en vivo**, incluidos los guardados del editor mediante renombrado (vim) y las 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 de inmediato, 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 no anclados al cargarlos). La cadena vacía `""` coincide con todo.
- El acceso SOCKS5 se controla mediante una entrada que coincide con el token `socks`. **Cambio importante**: SOCKS5 anteriormente omitía por completo el authfile; 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 fatal de inicio** tanto en el servidor como en el cliente; anteriormente desactivaban silenciosamente la autenticación.
- El usuario `--auth` sobrevive a las recargas del authfile y gana en conflictos de nombre con los usuarios del archivo.

Internamente, esto se realiza 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, también pasa `--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 interna de SSH aún cifra y autentica, 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

    ```sh
    chisel server --keygen -
    # o guárdala en disco --keygen /path/to/mykey
    ```

1. Inicia tu servidor chisel

    ```sh
    jpillora/chisel server --keyfile '<cadena ck-base64 o ruta de archivo>' -p 9312 --socks5
    ```

1. Conecta tu cliente chisel (usando la huella del servidor)

    ```sh
    chisel client --fingerprint '<ver salida del servidor>' <server-address>:9312 socks
    ```

1. Apunta tus clientes SOCKS5 (p. ej. SO/Navegador) a:

    ```
    <client-address>:1080
    ```

1. Ahora tienes una conexión SOCKS5 cifrada y autenticada sobre HTTP

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

### 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 escucha de SOCKS inverso (`R:socks` escucha en `127.0.0.1:1080` del servidor):```json
{
  "exituser:password": ["^R:127\\.0\\.0\\.1:1080$"]
}
```
I need the input content to translate. Please provide the Markdown chunk you'd like me to translate from English to Spanish.```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
```
Véase también el ejemplo paso a paso de [túnel inverso](https://github.com/jpillora/chisel/blob/master/example/reverse-tunneling-authenticated.md).

### Ejecución detrás de una CDN (Cloudflare)

chisel funciona a través de CDNs que soportan WebSockets. Para Cloudflare: habilite WebSockets, use proxy (nube naranja) en el registro DNS y conecte los clientes con `https://`. La CDN termina TLS, pero la capa SSH interna significa que la validación de `--fingerprint` sigue autenticando su servidor chisel de extremo a extremo — la CDN no puede leer ni modificar el tráfico tunelizado. Mantenga `--keepalive` en su valor predeterminado de `25s` para permanecer por debajo de los tiempos de espera de inactividad de la CDN, y tenga en cuenta que los proxies que eliminan las cabeceras `Upgrade` no pueden transportar chisel en absoluto.

### Ajuste con variables de entorno

Los ajustes menos comunes son variables de entorno, todas leídas con un prefijo `CHISEL_` (p. ej. `CHISEL_WS_TIMEOUT=10s`):

| Variable        | Lado         | Predeterminado     | Propósito                                            |
| --------------- | ------------ | ------------------ | ---------------------------------------------------- |
| `WS_TIMEOUT`    | cliente      | `45s`              | tiempo de espera del handshake websocket             |
| `SSH_TIMEOUT`   | cliente      | `30s`              | tiempo de espera del handshake ssh                   |
| `CONFIG_TIMEOUT`| servidor     | `10s`              | espera de la solicitud de configuración del cliente  |
| `SSH_WAIT`      | ambos        | `35s`              | cuánto tiempo esperan los nuevos túneles por una conexión activa |
| `PING_TIMEOUT`  | ambos        | intervalo keepalive| tiempo de espera de respuesta al ping keepalive (sin pings si `--keepalive 0`) |
| `DIAL_TIMEOUT`  | nodo de salida| `30s`              | tiempo de espera de dial tcp para los objetivos del túnel |
| `WS_READ_LIMIT` | ambos        | `524288`           | máximo de bytes de mensajes websocket entrantes (0 = sin límite; negativo = predeterminado) |
| `WS_BUFF_SIZE`  | ambos        | predeterminado de go | tamaños de búfer de lectura/escritura websocket      |
| `UDP_MAX_SIZE`  | ambos        | `9012`             | máximo de bytes de paquetes udp                      |
| `UDP_DEADLINE`  | nodo de salida| `15s`              | plazo de lectura del flujo udp y antigüedad de barrido de inactividad |
| `UDP_MAX_CONNS` | nodo de salida| `100`              | máximo de flujos udp concurrentes por túnel          |
| `SHUTDOWN_GRACE`| servidor     | `5s`               | tiempo 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 soporte de WebSockets:

- Los proveedores de IaaS soportarán todos WebSockets (a menos que se haya forzado un proxy HTTP no compatible frente a usted, en cuyo caso argumentaría que lo han degradado a PaaS)
- Los proveedores de PaaS varían en su soporte de WebSockets
  - Heroku tiene soporte completo
  - Openshift tiene soporte completo aunque las conexiones solo se aceptan en los puertos 8443 y 8080
  - Google App Engine estándar **no** tiene soporte (el entorno flexible sí)

## Contribuciones

- http://golang.org/doc/code.html
- http://golang.org/doc/effective_go.html
- `github.com/jpillora/chisel/share` contiene el paquete compartido
- `github.com/jpillora/chisel/server` contiene el paquete del servidor
- `github.com/jpillora/chisel/client` contiene el paquete del cliente

## Registro de cambios

- `1.0` - Lanzamiento inicial
- `1.1` - Se reemplazó el cifrado simétrico simple por SSH ECDSA
- `1.2` - Se añadió soporte de SOCKS5 (servidor) y HTTP CONNECT (cliente)
- `1.3` - Se añadió soporte de túneles inversos
- `1.4` - Se añadió soporte de cabeceras HTTP arbitrarias
- `1.5` - Se añadió soporte de SOCKS inverso (por @aus)
- `1.6` - Se añadió soporte de stdio del cliente (por @BoleynSu)
- `1.7` - Se añadió soporte de UDP
- `1.8` - Migración a una imagen Docker `scratch`
- `1.9` - Actualización a Go 1.21. Cambio de 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 de versiones defectuosa.
- `1.11` - Actualización a Go 1.25.1. Se actualizan todas las dependencias.
- `1.12` - Pase de fiabilidad y seguridad:
  - los pings keepalive ahora expiran (`CHISEL_PING_TIMEOUT`), por lo que las conexiones muertas se reconectan rápidamente tras suspensión/activación, tiempos de espera de NAT y reinicios del servidor
  - las recargas de authfile sobreviven a los renombrados de editores y a los intercambios de configmaps de kubernetes, y se aplican en vivo a los clientes conectados (nuevos túneles; los túneles establecidos no se interrumpen)
  - **ruptura**: con `--socks5` + `--authfile`, el acceso SOCKS5 ahora requiere una entrada de authfile que coincida con `socks` (las entradas comodín `""` siguen funcionando)
  - **ruptura**: se rechazan las huellas dactilares MD5 heredadas truncadas — `--fingerprint` debe ser la forma SHA256 completa (o la forma MD5 completa de 16 octetos con dos puntos)
  - **ruptura**: las cadenas de autenticación sin dos puntos (p. ej. `--auth user`) son un error fatal al inicio en lugar de deshabilitar silenciosamente la autenticación
  - el half-close TCP se propaga a través de los túneles, y los objetivos inalcanzables rechazan el túnel en lugar de presentar una conexión muerta (`CHISEL_DIAL_TIMEOUT`, predeterminado 30s)
  - apagado ordenado en 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`; nuevo `--min-retry-interval` (predeterminado 1s); se acepta `socks5://` para `--proxy`
  - las compilaciones con `go install` informan su versión real; las sesiones y los inicios de sesión fallidos se registran a nivel de información
  - los binarios de lanzamiento se compilan con Go 1.27.0; `x/crypto/ssh` se actualiza a v0.55.0 para abordar GO-2026-6303
  - los lanzamientos ahora incluyen imágenes multi-arquitectura basadas en scratch construidas con ko, con raíces de CA, en GHCR y Docker Hub; el lanzamiento es en dos etapas — el etiquetado construye un lanzamiento de GitHub en borrador más imágenes con etiqueta de versión, y publicar el borrador promueve las etiquetas Docker `latest` / `X` / `X.Y`

### Actualización a 1.12

Cuatro cambios pueden requerir acción al actualizar desde 1.11.x o anterior:

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). Consulte [Autenticación](#authentication). Las solicitudes denegadas se registran en el servidor como `Denied connection to socks (ACL)`.
2. **`--fingerprint`**: se rechazan las huellas dactilares MD5 heredadas truncadas. Use la huella dactilar SHA256 completa impresa por el servidor y el cliente (la forma MD5 completa de 16 octetos con dos puntos sigue aceptándose, pero está en desuso).
3. **`--auth`** los valores deben ser `<usuario>:<contraseña>` — las cadenas sin dos puntos ahora fallan al inicio en lugar de deshabilitar silenciosamente la autenticación.
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](https://github.com/jpillora/chisel/blob/master/LICENSE) © Jaime Pillora
Descargar herramienta