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 | 启用详细日志输出 |
服务器模式示例
- 基础启动(无认证,默认端口 8080)
TypeScript取消自动换行复制
- 指定端口和密钥
TypeScript取消自动换行复制
- 启用用户认证
TypeScript取消自动换行复制
users.json 示例:
TypeScript取消自动换行复制
(允许用户 alice 访问 192.168.0.*:8080 正向隧道和 R:2222:localhost:22 反向隧道)
- 启用 TLS 加密(Let's Encrypt)
TypeScript取消自动换行复制
- 启用反向转发和 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 | 启用详细日志输出 |
远程隧道配置格式
隧道配置用于定义本地与远程的端口转发规则,支持正向和反向转发:
- 正向转发(服务器 → 客户端)
格式:[本地主机:]<本地端口>:[远程主机:]<远程端口>[/协议]
- 示例:
- 3000:将服务器的 3000 端口转发到客户端的 3000 端口
- 8080:google.com:80:将服务器的 google.com:80 转发到客户端的 8080 端口
- 127.0.0.1:53:1.1.1.1:53/udp:将服务器的 1.1.1.1:53(UDP)转发到客户端的 127.0.0.1:53
- 反向转发(客户端 → 服务器)
格式:R:[服务器监听主机:]<服务器端口>:[本地主机:]<本地端口>[/协议]
- 需服务器启用 --reverse 选项
- 示例:
- R:2222:localhost:22:将客户端的 localhost:22 转发到服务器的 2222 端口(服务器可通过 2222 访问客户端 SSH)
- R:socks:将客户端的 SOCKS5 代理转发到服务器的默认 SOCKS 端口(1080)
- SOCKS 代理
- 服务器启用 --socks5 后,客户端可配置:socks(默认本地 127.0.0.1:1080)或 5000:socks(本地 5000 端口)
- 反向 SOCKS:R:5000:socks(服务器 5000 端口映射到客户端 SOCKS 代理)
- 标准输入输出(stdio)
格式:stdio:[远程主机:]<远程端口>
- 用于与 ssh ProxyCommand 配合,示例:
TypeScript取消自动换行复制
客户端模式示例
- 连接服务器并转发端口
TypeScript取消自动换行复制
- 使用认证和反向转发
TypeScript取消自动换行复制
- 通过代理连接服务器并使用 SOCKS
TypeScript取消自动换行复制
- 启用 TLS 客户端认证
TypeScript取消自动换行复制
四、通用功能
- 信号处理:
- SIGUSR2:打印进程统计信息
- SIGHUP:立即触发客户端重连(跳过退避等待)
- 日志:通过 -v 选项启用详细日志,便于调试连接问题。
- PID 文件:--pid 选项生成 chisel.pid,方便进程管理(如停止服务时使用 kill $(cat chisel.pid))。
通过以上教程,可快速掌握 Chisel 的服务器和客户端配置,实现安全的端口转发和隧道穿透功能。