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

相关推荐
bug攻城狮3 分钟前
Spring Boot Banner
java·spring boot·后端
MadPrinter29 分钟前
SpringBoot学习日记 Day11:博客系统核心功能深度开发
java·spring boot·后端·学习·spring·mybatis
dasseinzumtode29 分钟前
nestJS 使用ExcelJS 实现数据的excel导出功能
前端·后端·node.js
淦出一番成就32 分钟前
Java反序列化接收多种格式日期-JsonDeserialize
java·后端
Java中文社群34 分钟前
Hutool被卖半年多了,现状是逆袭还是沉寂?
java·后端
程序员蜗牛1 小时前
9个Spring Boot参数验证高阶技巧,第8,9个代码量直接减半!
后端
yeyong1 小时前
咨询kimi关于设计日志告警功能,还是有启发的
后端
库森学长1 小时前
2025年,你不能错过Spring AI,那个汲取了LangChain灵感的家伙!
后端·openai·ai编程
Java水解2 小时前
Spring Boot 启动流程详解
spring boot·后端
学历真的很重要2 小时前
Claude Code Windows 原生版安装指南
人工智能·windows·后端·语言模型·面试·go