Chisel 工具使用教程

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 的服务器和客户端配置,实现安全的端口转发和隧道穿透功能。

相关推荐
修仙的人8 分钟前
【开发环境】 VSCode 快速搭建 Python 项目开发环境
前端·后端·python
FinalLi9 分钟前
SpringBoot3.5.0项目使用ALLATORI JAVA混淆器
后端
bobz9651 小时前
用于服务器测试的 MCP 开发工具
后端
SimonKing1 小时前
流式数据服务端怎么传给前端,前端怎么接收?
java·后端·程序员
Laplaces Demon1 小时前
Spring 源码学习(十)—— DispatcherServlet
java·后端·学习·spring
BigYe程普1 小时前
出海技术栈集成教程(一):域名解析与配置
前端·后端·全栈
这里有鱼汤1 小时前
如何用‘资金视角’理解短线交易?这篇讲透了!
后端
扶风呀1 小时前
负载均衡详解
运维·后端·微服务·面试·负载均衡
写bug写bug2 小时前
彻底搞懂Spring Boot的系统监控机制
java·后端·spring
邦杠2 小时前
最新SpringBoot上传Maven中央仓库,在其他项目直接引入依赖(github开源项目打包上传,不需要私服)
spring boot·后端·开源·github·maven