Chisel 实战指南:一条命令打通 HTTP 隧道

46 阅读5分钟

Chisel 实战指南:一条命令打通 HTTP 隧道

摘要:在复杂的网络环境中,如何快速、安全地穿透防火墙访问内网服务?Chisel 是一款基于 Go 语言开发的开源隧道工具,它利用 HTTP/HTTPS 协议封装 TCP/UDP 流量,单文件无依赖,堪称网络工程师和渗透测试人员的“瑞士军刀”。本文将详细介绍 Chisel 的核心功能与实战用法。


1. 什么是 Chisel?

Chisel 是一个快速的 TCP/UDP 隧道工具,通过 HTTP 传输。
它的主要特点包括:

  • 单文件:客户端和服务器是同一个二进制文件,无依赖。
  • 穿透性强:基于 HTTP/WebSocket 协议,能够像普通网页流量一样穿透防火墙。
  • 安全性:支持 SSH 密钥认证和 TLS 加密。
  • 多功能:支持反向代理、端口转发、SOCKS5 代理等多种模式。

项目地址github.com/jpillora/ch…


2. 安装与环境准备

Chisel 是用 Go 语言编写的,因此你可以直接下载编译好的二进制文件,或者使用 Go 进行安装。

方式一:直接下载(推荐)

访问 Github Releases 页面,下载对应系统的版本(Windows/Linux/macOS)。

# Linux 示例
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz
gzip -d chisel_1.9.1_linux_amd64.gz
mv chisel_1.9.1_linux_amd64 chisel
chmod +x chisel

方式二:使用 Go 安装

go install github.com/jpillora/chisel@latest

3. 核心概念

Chisel 只有两个角色:

  1. 1. Server (服务端):通常部署在拥有公网 IP 的机器上,作为流量的中转站。
  2. 2. Client (客户端):通常部署在防火墙内部(内网),主动连接 Server。

4. 实战场景

场景一:反向端口转发(内网穿透)

需求
你在公司内网有一台 Web 服务器运行在 localhost:3000,你想在家通过公网访问它。

步骤

  1. 1. 服务端(公网 VPS,IP: 1.2.3.4)
    启动 Server 模式,并允许反向隧道(--reverse)。``` ./chisel server -p 8080 --reverse
  2. 2. 客户端(公司内网机器)
    连接服务端,并将服务端的 9000 端口映射到本地的 3000 端口。``` # 语法:R:<远程端口>:<本地地址>:<本地端口> ./chisel client 1.2.3.4:8080 R:9000:localhost:3000

效果
访问 http://1.2.3.4:9000,流量会经过 Chisel 隧道,最终到达公司内网的 localhost:3000


场景二:反向 SOCKS5 代理(内网漫游)

需求
你想在家完全访问公司内网的所有资源(不仅仅是某个端口),就像连了 VPN 一样。

步骤

  1. 1. 服务端(公网 VPS)
    同样需要开启反向允许。``` ./chisel server -p 8080 --reverse
  2. 2. 客户端(公司内网机器)
    连接服务端,并在服务端开启一个 SOCKS5 监听端口(例如 1080)。``` # 语法:R:<远程端口>:socks ./chisel client 1.2.3.4:8080 R:1080:socks

效果
在家的浏览器或终端中,配置 SOCKS5 代理指向 1.2.3.4:1080
现在,你的浏览器流量就像是从公司内网机器发出的一样,可以直接访问公司内网 IP(如 192.168.x.x)。


场景三:正向 SOCKS5 代理(科学上网/隐藏 IP)

需求
你有一台公网服务器,想通过它作为跳板上网。

步骤

  1. 1. 服务端(公网 VPS)
    不需要 --reverse,只需要开启 server。``` ./chisel server -p 8080 --socks5
    
    注意:较新版本 Chisel 默认 server 端不开启 socks,需要显式指定或由 client 指定。其实更推荐的做法是 Client 端指定本地监听 socks。
    
    **更通用的做法**:  
    服务端只管运行:
    
    
    ./chisel server -p 8080
  2. 2. 客户端(本地机器)
    在本地开启一个 SOCKS 端口(例如 1080),流量转发给 Server。``` # 语法:<本地端口>:socks ./chisel client 1.2.3.4:8080 1080:socks

效果
配置本地浏览器代理为 127.0.0.1:1080,你的上网流量出口变为了公网 VPS 的 IP。


5. 安全加固(生产环境必看)

默认情况下,Chisel 没有认证,任何人连上你的 Server 都可以使用隧道,这非常危险。

1. 开启身份验证 (--auth)

服务端和客户端必须使用相同的账号密码。

服务端

./chisel server -p 8080 --reverse --auth="user:pass123"

客户端

./chisel client --auth="user:pass123" 1.2.3.4:8080 R:80:localhost:80

2. 使用密钥对 (--key)

比密码更安全,生成一对密钥。

# 生成密钥
./chisel keygen > key_seed.json

然后在启动时加载该文件。

3. 通过 HTTPS 隐藏流量

如果你的 Server 前面有 Nginx 反向代理,可以将 Chisel 伪装成普通的 HTTPS 流量。

Nginx 配置示例

location /secret-tunnel {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

这样,客户端连接时可以使用 https://your-domain.com/secret-tunnel,防火墙只能看到正常的 HTTPS 通信。


6. 常见问题 (FAQ)

  • Q: 报错 Listening on 0.0.0.0:8080... 但连不上?
    • • A: 检查云服务器的安全组(防火墙)是否放行了 8080 端口。
  • Q: 速度慢?
    • • A: Chisel 基于 TCP/HTTP,受限于 TCP 拥塞控制。如果在高丢包网络下,可以尝试 KCP 协议的工具(如 frp 的 kcp 模式),但 Chisel 胜在隐蔽性。
  • Q: 想要后台运行?
    • • A: Linux 下使用 nohupSystemd 服务管理。Windows 下可以使用 nssm 封装为服务。

总结

Chisel 是“极简主义”的胜利。它没有 frp 那么复杂的配置文件,也没有 nps 那么多花哨的 GUI 功能,但它足够小、足够快、足够隐蔽。对于临时性的内网穿透或紧急运维,它绝对是首选神器。

推荐阅读
  • • 从“上帝视角”到“全自动代理”:如何打造能完成复杂任务的专属 AI Agent
  • • 在线编码工具TraeOnline
  • • 揭秘 AI 编辑器核心原理:AI 是如何“修改”你的代码的?
  • • 还在为“出海”应用发愁?亚马逊云香港服务器免费用一年,这波羊毛必须薅!