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

相关推荐
brzhang4 分钟前
我十几个项目都是这套Flutter 快速开发框架,今天开源了,从此你只用关心业务了
前端·后端·架构
神仙别闹27 分钟前
基于ASP.NET+SQL Server的网站登录注册功能设计与实现
后端·asp.net
threejs源码翻译官42 分钟前
显微镜图像处理【部署】- pytorch模型转onnx使用GPU进行推理
后端
stark张宇43 分钟前
Linux 用户、用户组、文件权限、文件查找
后端
wjpwjpwjp08311 小时前
[MySQL基础3] 数据控制语言DCL和MySQL中的常用函数
数据库·笔记·后端·学习·mysql
东边有耳1 小时前
一文深扒银行会计科目(收藏备查)
后端·架构·产品经理
东边有耳1 小时前
银行将你的存款放大了!!!
后端
白日依山尽yy1 小时前
SpringBoot项目部署至云服务器
java·spring boot·后端
汤姆yu2 小时前
基于springboot的考研互助小程序
java·spring boot·后端·考研互助
ai小鬼头4 小时前
创业小公司如何低预算打造网站?熊哥的实用建站指南
前端·后端