chisel 是一个在 HTTP 协议上的 TCP/UDP 隧道,使用 Go 语言编写,10.9 K 星星。
工具采用 HTTP 进行数据传输,将 TCP 和 UDP 封装在 HTTP 隧道中。可以用来做 [[内网穿透工具]]。
chisel 只有一个二进制可执行文件,客户端和服务端都包含在内。
在之前的文章中,介绍过不少内网穿透的工具,比如 [[frp]],[[nps]],还有一些已经非常成熟的商业化工具 [[Tailscale]] ,[[ZeroTier]] 等等,感兴趣可以查看历史的文章。
作用
chisel 这一类的工具可以有很多种用途,比如常见的端口转发,内网穿透等。
- 也可以用来绕过防火墙,比如通常防火墙会禁用掉一些非常用的 TCP 协议,通过 chisel over HTTP 的特性就可以绕过此防火墙
安装
直接通过 GitHub release 获取二进制
或者通过 Docker
docker run --rm -it jpillora/chisel --help
或者 Go
go install github.com/jpillora/chisel@latest
macOS 下也可以
brew install chisel
端口转发
比如一台内网的服务器 10.0.0.1 上有一个本地端口 8000 的服务,目前没有暴露给外部访问。如果要在另外一台机器上能访问该服务。可以执行如下的操作。
在这一台服务器上执行 chisel 服务端,暴露 12000 端口
./chisel server -p 12000
在另外一台服务器 10.0.0.2 上,保证可以访问 10.0.0.1,然后执行
./chisel client 10.0.0.1:12000 28000:127.0.0.1:8000
这样就将 10.0.0.1 的本地 8000 端口,转发到了 10.0.0.2 机器的 28000 端口,此事在 10.0.0.2 机器上到 28000 的访问,就会通过 chisel 转发到 10.0.0.1 机器的 8000 端口。
比如可以用 Python 直接起一个测试的服务 python3 -m http.server --bind 127.0.0.1 8000
反向连接
刚刚上面的操作是通过在 10.0.0.2 机器作为 chisel 的 client。
同样也可以将 10.0.0.2 作为 chisel 的 server,比如在 10.0.0.2 服务器上
./chisel server -p 12000 --reverse
开启 reverse 之后,表示服务器端使用反向模式,流量转发到哪一个端口由 client 端指定。
然后在 10.0.0.1 服务器上执行
./chisel client 10.0.0.2:12000 R:28000:127.0.0.1:8000
此时 10.0.0.2 机器上也可以通过 28000 端口来访问 10.0.0.1 的 8000 端口。
socks 代理
除了直接转发 HTTP ,chisel 也可以设置 socks 代理。
比如在服务器中执行
./chisel server -p 12000
客户端可以
./chisel client server_ip:12000 socks
这个时候就默认开启了一个 1080 端口的 socks 代理,当然这个端口可以自己设置,结合 Socks 代理工具,或者 Proxychains 等工具就可以直接利用这个 socks。
经过上面的说明,既然 chisel 可以作为 Socks5 代理,那么其实用来作为穿透 GFW 的工具也是可以的
在公网的服务器上
chisel server -p 3000 --socks5
然后在本地执行
chisel client server_ip:3000 socks