chisel
基於 HTTP 的快速 TCP/UDP 隧道。通過x-cmd一鍵安裝,即刻體驗高效工作流程。
| Language | Go |
| Homepage | https://github.com/jpillora/chisel |
- 使用 docker 模組自動拉取基礎鏡像,並在首次執行時根據需求重構為一個可直接運行的完整軟件鏡像。
- 在後續運行中,命令會基於已構建好的鏡像快速啓動容器,實現秒級響應。
- 所有操作均在容器內部完成,與本地系統完全隔離,無需任何本地依賴,安全、乾淨且不留痕跡。
- 當因軟件版本或依賴發生變化需重構鏡像時,會充分利用 Docker 鏡像構建的緩存機制,最大限度地複用已下載的依賴與構建成果,大幅縮短重建耗時。
該功能仍在測試中,使用過程中如有問題,歡迎在 X-CMD 社區 留言反饋。
x docker alpine chiselxd alp chiselx docker ubuntu chiselxd ubu chiselx docker kali chiselxd kal chiselx docker debian chiselxd deb chiselx docker fedora chiselxd fed chiselx install chisel
| x env | sh
|
| fedora/dnf | sh
|
| /go | sh
|
chisel - 基於 HTTP 的安全 TCP/UDP 隧道工具 🔐
需要穿透防火牆訪問內網服務,或者將本地端口安全地暴露到公網?chisel 是一款用 Go 編寫的 TCP/UDP 隧道工具,它通過 HTTP 傳輸數據,使用 SSH 協議加密通信,單文件同時包含客户端和服務端,部署簡單但功能強大。
30 秒上手
場景一:將本地端口暴露到遠程服務器
在遠程服務器啓動服務端:
chisel server -p 8080 --reverse在本地機器啓動客户端:
chisel client http://your-server:8080 R:3000:localhost:8000這樣,訪問遠程服務器的 3000 端口就相當於訪問本地的 8000 端口。
場景二:通過防火牆訪問遠程內網服務
在可訪問公網的服務器啓動:
chisel server -p 8080在防火牆後的機器連接:
chisel client http://your-server:8080 3000然後訪問本地的 3000 端口即可連接到遠程服務器的 3000 端口。
核心設計:HTTP + SSH 的巧妙結合
chisel 的技術架構在同類工具中比較有特點:
| 特性 | chisel | 傳統隧道工具 |
|---|---|---|
| 傳輸層 | HTTP/WebSocket | 原生 TCP/UDP |
| 加密方式 | SSH 協議 (ECDSA) | 自實現或 TLS |
| 部署形態 | 單文件(客户端+服務端) | 通常分離部署 |
| 代理穿透 | 原生支持 HTTP/SOCKS5 代理 | 需額外配置 |
| 自動重連 | 指數退避算法 | 視工具而定 |
使用 HTTP 作為傳輸層是 chisel 的一個巧妙設計。大多數企業防火牆會放行 80/443 端口的 HTTP 流量,這讓 chisel 能在嚴格限制的網絡環境中工作。同時,SSH 協議提供的加密和認證機制保證了通信安全,無需自己實現複雜的加密邏輯。
服務端配置詳解
啓動服務端的基本命令:
chisel server -p 8080常用配置選項:
| 選項 | 説明 | 示例 |
|---|---|---|
-p, --port | 監聽端口 | -p 8080 |
--host | 監聽主機地址 | --host 0.0.0.0 |
--keyfile | SSH 私鑰文件路徑 | --keyfile /path/to/key |
--authfile | 用户認證文件 | --authfile users.json |
--auth | 簡單用户名密碼 | --auth user:pass |
--socks5 | 啓用 SOCKS5 代理 | --socks5 |
--reverse | 允許反向隧道 | --reverse |
--tls-key/--tls-cert | 啓用 TLS | --tls-key key.pem --tls-cert cert.pem |
--tls-domain | 自動獲取 Let's Encrypt 證書 | --tls-domain example.com |
生成 SSH 密鑰對:
# 生成新的密鑰文件
chisel server --keygen /path/to/server_key
# 查看生成的密鑰指紋(用於客户端驗證)
chisel server --keyfile /path/to/server_key用户認證配置(users.json):
{
"admin:secret123": [""],
"user:pass456": ["localhost:3000", "192.168.1.0/24:.*"]
}鍵是 用户名:密碼,值是允許訪問的地址正則表達式列表。空字符串 [""] 表示允許訪問所有地址。
客户端配置詳解
連接服務端的基本命令:
chisel client [選項] <服務器URL> <遠程規則> [遠程規則...]遠程規則格式:
[local-host]:[local-port]:[remote-host]:[remote-port]/[protocol]各字段都有智能默認值:
local-host默認為0.0.0.0(所有接口)local-port默認為remote-portremote-host默認為0.0.0.0(服務端本地)protocol默認為tcp
常見規則示例:
| 規則 | 含義 |
|---|---|
3000 | 將服務端的 3000 端口映射到本地的 3000 端口 |
8080:google.com:80 | 通過服務端代理訪問 Google 的 80 端口 |
R:2222:localhost:22 | 反向隧道:將本地的 22 端口暴露到服務端的 2222 端口 |
socks | 使用服務端的 SOCKS5 代理(需服務端啓用 --socks5) |
127.0.0.1:53/udp | 轉發 UDP 流量(如 DNS) |
stdio:example.com:22 | 標準輸入輸出模式,可用於 SSH ProxyCommand |
客户端安全選項:
chisel client \
--fingerprint "SHA256:xxxxx" \
--auth "user:pass" \
https://your-server:8080 \
3000| 選項 | 説明 |
|---|---|
--fingerprint | 驗證服務端指紋(強烈推薦) |
--auth | 用户認證信息 |
--proxy | 通過代理連接服務端(如 http://proxy:8080) |
--tls-skip-verify | 跳過 TLS 證書驗證(測試用) |
--keepalive | 心跳間隔,防止連接被代理關閉 |
SSH over HTTP 的巧妙用法:
chisel 的 stdio 模式可以與 SSH 的 ProxyCommand 配合,實現 SSH 通過 HTTP 隧道:
ssh -o ProxyCommand='chisel client https://chisel-server stdio:%h:%p' user@target-host這樣即使目標 SSH 端口被防火牆阻斷,也能通過 chisel 隧道連接。
加密與認證機制
加密原理:
chisel 使用 Go 標準庫的 crypto/ssh 實現加密。服務端啓動時會生成 ECDSA 密鑰對(或從 --keyfile 加載),客户端可以通過 --fingerprint 驗證服務端身份,防止中間人攻擊。
指紋計算方式:對 ECDSA 公鑰進行 SHA256 哈希,然後 Base64 編碼,共 44 字符(含末尾等號)。
認證方式:
- 密碼認證:通過
--auth或--authfile配置,使用 SSH 的密碼認證機制 - 密鑰指紋驗證:客户端通過
--fingerprint驗證服務端身份 - mTLS:支持通過
--tls-ca、--tls-key、--tls-cert實現雙向 TLS 認證
高級應用場景
SOCKS5 代理服務器:
在服務端啓用 SOCKS5 代理:
chisel server -p 8080 --socks5客户端連接並開啓本地 SOCKS5 端口:
chisel client http://server:8080 1080:socks現在可以將瀏覽器的 SOCKS5 代理設置為 localhost:1080,所有流量都會通過服務端轉發。
反向 SOCKS5 代理:
將客户端所在網絡作為代理出口:
# 服務端
chisel server -p 8080 --reverse
# 客户端
chisel client http://server:8080 R:socks這樣服務端所在網絡可以通過 localhost:1080 訪問客户端所在網絡。
帶認證的隧道:
# 服務端設置認證
chisel server -p 8080 --auth admin:secret --fingerprint
# 記錄顯示的指紋,如 SHA256:abcdefg...
# 客户端連接時驗證指紋並提供認證
chisel client --fingerprint "SHA256:abcdefg..." --auth admin:secret http://server:8080 3000通過企業代理連接:
chisel client \
--proxy http://corporate-proxy:8080 \
--auth "user:pass" \
https://chisel-server \
3000chisel 會自動處理 CONNECT 隧道建立。
Docker 部署:
# 服務端
docker run -d --name chisel-server -p 8080:8080 jpillora/chisel server -p 8080 --reverse
# 客户端
docker run --rm jpillora/chisel client http://your-server:8080 3000與同類工具的對比
| 工具 | 傳輸協議 | 加密 | 特點 | 適用場景 |
|---|---|---|---|---|
| chisel | HTTP/WebSocket | SSH | 單文件、自動重連、代理友好 | 防火牆穿透、企業環境 |
| bore | TCP | 無(需配合 TLS) | 極簡、約 400 行代碼 | 快速臨時暴露端口 |
| ngrok | TCP/HTTP | TLS | 功能豐富、有 SaaS 服務 | 開發調試、Webhook |
| frp | TCP | TLS/AES | 功能全面、支持 KCP | 生產級內網穿透 |
| SSH 隧道 | TCP | SSH | 無需額外工具 | 已有 SSH 訪問權限時 |
chisel 的優勢在於代理友好性:在只允許 HTTP/HTTPS 出站流量的嚴格企業環境中,大多數隧道工具無法工作,而 chisel 可以。同時,自動重連和指紋驗證讓它在可靠性方面表現不錯。
生產環境建議
- 始終使用 TLS:生產環境應通過
--tls-domain或--tls-key/--tls-cert啓用 HTTPS - 啓用指紋驗證:客户端務必配置
--fingerprint防止中間人攻擊 - 設置合理的心跳:根據網絡環境調整
--keepalive(默認 25 秒) - 限制訪問範圍:通過
--authfile精確控制每個用户可訪問的地址 - 考慮反向隧道安全:啓用
--reverse時要特別注意認證配置
來源:
https://github.com/jpillora/chisel
相關鏈接
幫助我們改善文檔
X-CMD 的文檔內容來自命令的幫助文檔、多個數據源以及文檔庫生成。文檔中如果有錯誤或不明確的地方,歡迎通過這些方式進行告知~
完成验证加入微信群