Self-hosted TCP / UDP / HTTP(S) / WebSocket tunnels with a Web management panel
中文文档 | English (Docs) | Official Website | Quick Start | FAQ
g-brook/brook is a self-hosted network tunnel written in Go. It connects services behind NAT to a server you control and supports TCP, UDP, HTTP(S), and WebSocket tunnels through a Web management interface.
| Use case | How Brook helps |
|---|---|
| Preview a local Web app | Publish a temporary HTTP(S) route without opening an inbound port on the client network. |
| Reach a TCP or UDP service | Forward SSH, databases, game servers, or custom protocols through a Brook server. |
| Operate several tunnels | Create tokens and routes in the Web panel and inspect connection status in one place. |
| Run on mixed environments | Use pre-built server and client packages for Linux, macOS, and Windows. |
Note
When sharing or searching for this project, use the full repository name g-brook/brook. The name “Brook” is also used by other network projects.
- 🚀 Blazing Fast Performance: High-concurrency architecture based on Go routines, with low latency and low resource consumption.
- 🛡️ All-around Compatibility: Supports SSH, HTTP/HTTPS, MySQL, Redis, RDP, and almost all mainstream application protocols.
- 🎨 Visual Management: Built-in modern Web panel for one-click initialization, real-time traffic monitoring, and connection status.
- 🔗 Versatile Protocols: Native support for TCP / UDP / HTTP(S) / WebSocket tunnels, easily handling various network environments (including CDN and firewall restrictions).
- 🛠️ Minimal Configuration: Only one JSON file needed, with auto-reconnection for worry-free operation.
- 💻 Cross-platform Support: Pre-compiled packages for Linux, macOS (Intel/M-series), and Windows (x64/ARM64).
Click to expand and view management interface screenshots
| Initialization Wizard | Secure Login |
|---|---|
![]() |
![]() |
| Token Management | Tunnel Configuration |
![]() |
![]() |
Important
Brook exposes services across network boundaries. In the reviewed v0.3.2 code path, the manager and smux data connections are not wrapped in TLS. Use an encrypted overlay plus application-layer TLS/SSH, restrict access with firewall rules, and place the Web panel behind TLS or a trusted network before using it beyond local testing. Review install.sh before running the one-line installer; manual downloads and SHA-256 digests are available on the Releases page.
bash -c "$(curl -fsSL https://www.gbrook.cc/install.sh)"- Download and Extract: Download the
brook-sevfor your platform from GitHub Releases. - Prepare Configuration (
server.json):{ "enableWeb": true, "webPort": 8000, "serverPort": 8909, "tunnelPort": 8919, "logger": { "logLevel": "info", "logPath": "./", "outs": "file" } } - Start Service:
./brook-sev -c ./server.json
- Access Panel: Open your browser and visit
http://your-ip:8000/indexfor initialization.
- Get Token: Generate it in the Web management backend.
- Prepare Configuration (
client.json):{ "serverHost": "your-server-ip", "serverPort": 8909, "token": "YOUR_GENERATED_TOKEN", "tunnels": [ { "type": "tcp", "destination": "127.0.0.1:80", "proxyId": "web-proxy-1" } ] } - Start Client:
./brook-cli -c ./client.json
On Linux distributions with systemd, Brook provides built-in service management commands. The first time you run start, it will automatically create the unit file under /etc/systemd/system/ and then start the service.
Server:
sudo ./brook-sev start -c ./server.json
sudo ./brook-sev restart
sudo ./brook-sev stop
sudo ./brook-sev status
./brook-sev versionClient:
sudo ./brook-cli start -c ./client.json
sudo ./brook-cli restart
sudo ./brook-cli stop
sudo ./brook-cli status
./brook-cli version- Foreground (run in console): open
cmdin the extracted directory and runbrook-sev.exe -c server.json/brook-cli.exe -c client.json - Console helper: use
run.batto launch and keep the console window open - Background mode:
brook-sev.exe start/brook-cli.exe start(then userestart/stop/status/version)
| Platform | Arch | File | Direct Download |
|---|---|---|---|
| Linux | amd64 | brook-sev_Linux-x86_64.amd64.tar.gz |
⬇️ Download |
| Linux | arm64 | brook-sev_Linux-arm64.tar.gz |
⬇️ Download |
| macOS | ARM64 (Apple M) | brook-sev_macOS-ARM64.Apple-M.tar.gz |
⬇️ Download |
| macOS | Intel | brook-sev_macOS-Intel.tar.gz |
⬇️ Download |
| Windows | x86_64 | brook-sev_Windows-x86_64.tar.gz |
⬇️ Download |
| Windows | ARM64 | brook-sev_Windows-ARM64.tar.gz |
⬇️ Download |
| Platform | Arch | File | Direct Download |
|---|---|---|---|
| Linux | amd64 | brook-cli_Linux-x86_64.amd64.tar.gz |
⬇️ Download |
| Linux | arm64 | brook-cli_Linux-arm64.tar.gz |
⬇️ Download |
| macOS | ARM64 (Apple M) | brook-cli_macOS-ARM64.Apple-M.tar.gz |
⬇️ Download |
| macOS | Intel | brook-cli_macOS-Intel.tar.gz |
⬇️ Download |
| Windows | x86_64 | brook-cli_Windows-x86_64.tar.gz |
⬇️ Download |
| Windows | arm64 | brook-cli_Windows-arm64.tar.gz |
⬇️ Download |
# Frontend Build
cd portal/server/ && npm install && npm run build
# Server/Client Build
cd scmd/ && bash build.sh
cd ccmd/ && bash build.shHow to solve connection timeouts?
Please ensure that ports 8909 and 8919 on the server side are open in the firewall/security group.Does it support CDN forwarding?
Yes, by using WebSocket protocol tunnels, you can implement CDN forwarding with Nginx or Cloudflare.How to run in the background?
Linux users can use `systemd` scripts or directly run `sudo ./brook-cli start`.This project is open-sourced under the Apache License 2.0 agreement.



