Chisel 工具使用教程

369 阅读5分钟

Chisel 是一个快速的 TCP/UDP 隧道工具,通过 HTTP 传输并使用 SSH 加密,支持服务器和客户端模式。本文基于 main.go 代码,详细介绍其使用方法。​

一、基本信息​

工具简介​

Chisel 主要用于穿透防火墙,提供安全的网络端点接入能力,支持正向 / 反向端口转发、SOCKS 代理等功能,通过单一可执行文件实现服务器和客户端功能。​

版本与帮助​

  • 查看版本:chisel --version 或 chisel -v​
  • 查看帮助:chisel --help(显示整体帮助)、chisel server --help(服务器模式帮助)、chisel client --help(客户端模式帮助)​

二、服务器模式(Server)​

服务器模式用于搭建隧道服务端,接收客户端连接并转发流量。​

基本语法​

TypeScript取消自动换行复制

chisel server [选项]​

核心选项说明​

选项​说明​
--host​监听的网络接口(默认从环境变量 HOST 获取,未设置则为 0.0.0.0)​
--port, -p​监听的端口(默认从环境变量 PORT 获取,未设置则为 8080)​
--keygen <路径>​生成 PEM 格式的 SSH 私钥文件(使用 - 输出到标准输出)​
--keyfile <路径>​指定 SSH 私钥文件(替代过时的 --key 选项,支持 base64 编码的内联密钥)​
--authfile <路径>​用户认证配置文件(JSON 格式,定义用户及允许的隧道规则)​
--auth user:pass单一用户认证(等价于简化的 authfile,该用户拥有全部权限)​
--keepalive <时间>​连接保活间隔(默认 25s,格式如 5s、2m,0s 禁用)​
--socks5​允许客户端访问内置 SOCKS5 代理​
--reverse​允许客户端使用反向端口转发​
--tls-key/--tls-cert​启用 TLS 加密(需同时指定私钥和证书路径,与 --tls-domain 互斥)​
--tls-domain <域名>​通过 Let's Encrypt 自动获取 TLS 证书(需监听 443 端口,可多次指定多域名)​
--tls-ca <路径>​用于验证客户端证书的 CA 证书(实现双向 TLS 认证)​
--pid​在当前目录生成 chisel.pid 文件(记录进程 ID)​
-v​启用详细日志输出​

服务器模式示例​

  1. 基础启动(无认证,默认端口 8080)​

TypeScript取消自动换行复制

  1. 指定端口和密钥​

TypeScript取消自动换行复制

  1. 启用用户认证​

TypeScript取消自动换行复制

users.json 示例:​

TypeScript取消自动换行复制

(允许用户 alice 访问 192.168.0.*:8080 正向隧道和 R:2222:localhost:22 反向隧道)​

  1. 启用 TLS 加密(Let's Encrypt)​

TypeScript取消自动换行复制

  1. 启用反向转发和 SOCKS5 代理​

TypeScript取消自动换行复制

三、客户端模式(Client)​

客户端模式用于连接服务器,建立隧道并转发本地 / 远程流量。​

基本语法​

TypeScript取消自动换行复制

核心选项说明​

选项​说明​
<服务器地址>​Chisel 服务器的 URL(如 http://server-ip:8080 或 wss://example.com)​
<远程隧道配置>​隧道转发规则(支持多个,格式见下文)​
--fingerprint <指纹>​服务器公钥指纹(SHA256 base64 编码,用于验证服务器身份,强烈推荐)​
--auth user:pass客户端认证凭据(与服务器 --auth 或 --authfile 对应)​
--keepalive <时间>​连接保活间隔(默认 25s)​
--max-retry-count <次数>​最大重连次数(默认无限次)​
--proxy <代理URL>​访问服务器的代理(支持 HTTP CONNECT 或 SOCKS5,如 socks://user:pass@proxy:1080)​
--header <键:值>​自定义 HTTP 头(可多次指定)​
--tls-ca <路径>​验证服务器 TLS 证书的 CA 证书(默认使用系统 CA)​
--tls-skip-verify​跳过服务器 TLS 证书验证(不推荐,仅测试用)​
--tls-key/--tls-cert​客户端 TLS 认证的私钥和证书(双向 TLS 时使用)​
--pid​生成 chisel.pid 文件​
-v​启用详细日志输出​

远程隧道配置格式​

隧道配置用于定义本地与远程的端口转发规则,支持正向和反向转发:​

  1. 正向转发(服务器 → 客户端)​

格式:[本地主机:]<本地端口>:[远程主机:]<远程端口>[/协议]​

  • 省略项默认值:本地主机 0.0.0.0,远程主机 0.0.0.0(服务器本地),协议 tcp​
  • 示例:​
  • 3000:将服务器的 3000 端口转发到客户端的 3000 端口​
  1. 反向转发(客户端 → 服务器)​

格式:R:[服务器监听主机:]<服务器端口>:[本地主机:]<本地端口>[/协议]​

  • 需服务器启用 --reverse 选项​
  • 示例:​
  • R:2222:localhost:22:将客户端的 localhost:22 转发到服务器的 2222 端口(服务器可通过 2222 访问客户端 SSH)​
  • R:socks:将客户端的 SOCKS5 代理转发到服务器的默认 SOCKS 端口(1080)​
  1. SOCKS 代理​
  • 服务器启用 --socks5 后,客户端可配置:socks(默认本地 127.0.0.1:1080)或 5000:socks(本地 5000 端口)​
  • 反向 SOCKS:R:5000:socks(服务器 5000 端口映射到客户端 SOCKS 代理)​
  1. 标准输入输出(stdio)​

格式:stdio:[远程主机:]<远程端口>​

  • 用于与 ssh ProxyCommand 配合,示例:​

TypeScript取消自动换行复制

客户端模式示例​

  1. 连接服务器并转发端口​

TypeScript取消自动换行复制

  1. 使用认证和反向转发​

TypeScript取消自动换行复制

  1. 通过代理连接服务器并使用 SOCKS​

TypeScript取消自动换行复制

  1. 启用 TLS 客户端认证​

TypeScript取消自动换行复制

四、通用功能​

  • 信号处理:​
  • SIGUSR2:打印进程统计信息​
  • SIGHUP:立即触发客户端重连(跳过退避等待)​
  • 日志:通过 -v 选项启用详细日志,便于调试连接问题。​
  • PID 文件:--pid 选项生成 chisel.pid,方便进程管理(如停止服务时使用 kill $(cat chisel.pid))。​

通过以上教程,可快速掌握 Chisel 的服务器和客户端配置,实现安全的端口转发和隧道穿透功能。