Brook is a cross-platform strong encryption and not detectable proxy. Zero-Configuration. Brook 是一个跨平台的强加密无特征的代理软件. 零配置.

Overview

Brook

中文

Build Status Docs Blog Youtube License: GPL v3 Donate

Brook


v20210401


What is Brook

Document

Brook is a cross-platform strong encryption and not detectable proxy.
Brook's goal is to keep it simple, stupid and not detectable.

Install CLI

The CLI file has both server and client functions

Download from releases

# For example, on linux amd64, v20210401

curl -L https://github.com/txthinking/brook/releases/download/v20210401/brook_linux_amd64 -o /usr/bin/brook
chmod +x /usr/bin/brook

Install via nami 🔥

nami install github.com/txthinking/brook

Install via brew

brew install brook

Install GUI

The GUI file has only client function

Download from releases: macOS, Windows, Android, iOS

Install via brew

brew install --cask brook
brew install --cask brooklite

Usage

Docs

NAME:
   Brook - A cross-platform strong encryption and not detectable proxy

USAGE:
   brook [global options] command [command options] [arguments...]

VERSION:
   20210401

AUTHOR:
   Cloud <[email protected]>

COMMANDS:
   server        Run as brook server, both TCP and UDP
   servers       Run as multiple brook servers
   client        Run as brook client, both TCP and UDP, to start a socks5 proxy, [src <-> socks5 <-> $ brook client <-> $ brook server <-> dst], [works with $ brook server]
   map           Run as mapping, both TCP and UDP, this means access [from address] is equal to [to address], [src <-> from address <-> $ brook server <-> to address], [works with $ brook server]
   dns           Run as DNS server, both TCP and UDP, [src <-> $ brook dns <-> $ brook server <-> dns server] or [src <-> $ brook dns <-> dns server for bypass], [works with $ brook server]
   tproxy        Run as transparent proxy, both TCP and UDP, only works on Linux, [src <-> $ brook tproxy <-> $ brook server <-> dst], [works with $ brook server]
   wsserver      Run as brook wsserver, both TCP and UDP, it will start a standard http server and websocket server
   wssserver     Run as brook wssserver, both TCP and UDP, it will start a standard https server and websocket server
   wsclient      Run as brook wsclient, both TCP and UDP, to start a socks5 proxy, [src <-> socks5 <-> $ brook wsclient <-> $ brook wsserver <-> dst], [works with $ brook wsserver]
   wssclient     Run as brook wssclient, both TCP and UDP, to start a socks5 proxy, [src <-> socks5 <-> $ brook wssclient <-> $ brook wssserver <-> dst], [works with $ brook wssserver]
   link          Print brook link
   qr            Print brook server QR code
   relay         Run as standalone relay, both TCP and UDP, this means access [listen address] is equal to access [to address], [src <-> listen address <-> to address]
   relays        Run as multiple standalone relays
   socks5        Run as standalone standard socks5 server, both TCP and UDP
   socks5tohttp  Convert socks5 to http proxy, [src <-> listen address(http proxy) <-> socks5 address <-> dst]
   hijackhttps   Hijack domains and assume is TCP/TLS/443. Requesting these domains from anywhere in the system will be hijacked . [src <-> $ brook hijackhttps <-> socks5 server] or [src <-> direct]
   pac           Run as PAC server or save PAC to file
   howto         Print some useful tutorial resources
   help, h       Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug, -d               Enable debug (default: false)
   --listen value, -l value  Listen address for debug (default: ":6060")
   --help, -h                show help (default: false)
   --version, -v             print the version (default: false)

COPYRIGHT:
   https://github.com/txthinking/brook

Docs

Contributing

Please read CONTRIBUTING.md first

License

Licensed under The GPLv3 License

Issues
  • Android blank page

    Android blank page

    Describe actual behavior

    What is your expected behavior

    Specifications like the version of the project, operating system, or hardware

    Steps to deploy the server

    Steps to reproduce the problem

    bug android 
    opened by nihaonanshen 41
  • How do I provide username for a remote socks5 server?

    How do I provide username for a remote socks5 server?

    Prerequisites

    • [x] Did you check the wiki?
    • [x] Did you search in issues?
    • [x] Are you running the latest version?
    • [x] I will write this in English.

    Environment

    Windows 10 x64

    My question is about CLI version. When i'm running Brook.exe I see an option to specify socks5 login and password (becuase my proxy server requires authorisation).

    However when I'm running CLI it doesn't take a username parameter so I cannot specify it.

    PS C:\Brook> .\brook_windows_amd64.exe client -l 127.0.0.1:1080 -i 127.0.0.1 -s 55.55.55.55:1080 -u myuser -p mypass
    Incorrect Usage: flag provided but not defined: -u
    
    NAME:
       brook_windows_amd64.exe client - Run as client mode
    
    USAGE:
       brook_windows_amd64.exe client [command options] [arguments...]
    
    OPTIONS:
       --listen value, -l value    Client listen address, like: 127.0.0.1:1080
       --ip value, -i value        Client IP address, like: 127.0.0.1
       --server value, -s value    Server address, like: 1.2.3.4:1080
       --password value, -p value  Server password
       --tcpTimeout value          connection tcp keepalive timeout (s) (default: 60)
       --tcpDeadline value         connection deadline time (s) (default: 0)
       --udpDeadline value         connection deadline time (s) (default: 60)
       --udpSessionTime value      udp session time (s), in most cases need this (default: 60)
       --http                      If true, client start a http(s) proxy. default socks5
    
    2019/11/27 17:12:46 flag provided but not defined: -u
    

    This is how I do curl the remote socks5 server:

    curl --socks5 55.55.55.55:1080 --user myuser:mypass http://ifcfg.co
    

    How do I run the proxy server on a localhost with remote socks5 server authorisation?

    question Vote if you need this feature too help each other 
    opened by Pzixel 25
  • Please try the new macOS/Windows GUI client

    Please try the new macOS/Windows GUI client

    https://storage.googleapis.com/txthinking-file/_/Brook.dmg

    https://storage.googleapis.com/txthinking-file/_/Brook.exe

    It is not good enough at the moment, but simple may be better compatible.

    PR welcome 
    opened by txthinking 24
  • ios无法连接

    ios无法连接

    今天ios突然无法连接,ios客户端点开始连接按钮,无法打开vpn图标,在设置vpn里面打开开关,显示断开连接,mac客户端也一样,无意中打开pac网址:https://www.txthinking.com/pac/white.list及https://www.txthinking.com/pac/black.list发现被墙,现只能用全局才能打开vpn(白名单和黑名单模式均不能打开vpn)

    pc端正常

    brookv0601

    PR welcome 
    opened by duduzz2017 23
  • iOS 13升级20210101版后系统VPN处显示【需要更新】无法使用

    iOS 13升级20210101版后系统VPN处显示【需要更新】无法使用

    • 我的服务端使用以下命令部署 nohup ./brook_linux_amd64 server -l :12345 -p xxx & 使用最新20210101版本

    • mac客户端 使用正常

    • iOS13客户端 从0909升级到0101版本后无法建立VPN连接,点击connect之后按钮变为disconnect,但系统设置的VPN里显示【需要更新】的红字,如图所示:

    91606893024_ pic

    opened by bonboru93 22
  • suddenly not work on all my android phone

    suddenly not work on all my android phone

    brook not work on all of my Android phone(Huawei, One Plus 5) a few days ago.

    But iPhone can still use with same server.

    Both the server's and Android client’s version are the newest.

    can not reproduce help each other 
    opened by jay816314 21
  • Latest release v20180601 Brook.apk  部分手机无法正常使用

    Latest release v20180601 Brook.apk 部分手机无法正常使用

    Describe actual behavior

    What is your expected behavior

    Specifications like the version of the project, operating system, or hardware

    Steps to deploy the server

    Steps to reproduce the problem

    0.Latest release v20180601 Brook.apk 在华为p20 上及小米note3 均无法正常使用 1.华为p20安装完以后,打开使用,点击开启特别慢,完了以后,通知栏有图标,但是无法科学上网 2.小米note3安装以后,打开使用,点击开启特别慢,而且无法正常开启,通知栏无图标。

    PR welcome 
    opened by liaodijin 21
  • vpn mode in macos doesn't work ,but do work in windows and linux

    vpn mode in macos doesn't work ,but do work in windows and linux

    Describe actual behavior

    captondeMacBook-Air:~ capton$ sudo ./brook vpn -l 127.0.0.1:1080 -s myhost_ip:10086 -p 1125
    Ctrl-C to quit
    Quitting...
    listen udp 127.0.0.1:53: bind: address already in use
    captondeMacBook-Air:~ capton$ 
    

    What is your expected behavior

    captondeMacBook-Air:~ capton$ sudo ./brook vpn -l 127.0.0.1:1080 -s myhost_ip:10086 -p 1125
    Ctrl-C to quit
    

    Specifications like the version of the project, operating system, or hardware

    Version of project : Brook 20180909 OS : macOS High Sierra 10.13.4 (17E199) CPU : 1.6 GHz Intel Core i5

    Steps to deploy the server

    nohup ./brook servers -l ":10085 1125" -l ":10086 1125" --tcpDeadline 10 >/dev/null 2>log &
    

    Steps to reproduce the problem

    opened by Ccapton 20
  • Android device with larger aspect ratios cause blank page, (Samsung S8 etc.)

    Android device with larger aspect ratios cause blank page, (Samsung S8 etc.)

    Describe actual behavior

    What is your expected behavior

    Specifications like the version of the project, operating system, or hardware

    Steps to reproduce the problem

    1. 首页无法显示
    2. Android 7.0
    3. Samsung s8+
    bug android 
    opened by ElementMTT 18
  • ‘Invalid args, please reopen app’ after upgrade

    ‘Invalid args, please reopen app’ after upgrade

    Gui Client show error ‘Invalid args, please reopen app’ after upgrade the client and server to v20220406(from v20210701). the issue remains after reinstall both client and server. Client: mac catalina Server: debian10

    opened by LeonTheAlchemist 17
  • Windows error with client config

    Windows error with client config

    Describe actual behavior

    What is your expected behavior

    Expect to see working brook client connection

    Specifications like the version of the project, operating system, or hardware

    v20171111

    Steps to deploy the server

    1. Create brook server
    2. Download client and configure as it must to be
    3. Receive error

    https://imgur.com/a/hpjTh https://imgur.com/a/TYfnH

    P/s i use this script on server side https://doub.io/brook-jc3/

    I will be glad to see help if someone can install it manually on server side and on pc

    desktop 
    opened by asterriya 16
  • [Feature request] IPv4/IPv6 selective egress on dual IP stack servers.

    [Feature request] IPv4/IPv6 selective egress on dual IP stack servers.

    Trying to reach regional contents on NETFLIX through BROOK, unfortunately NETFLIX only accepts my IPv6 address on the server which has also an IPv4, I can make it work by make use of the settings combination "sniffing and routing rules" provided by v2fly, but the lightning fast BROOK is just irresistible.

    Any idea?

    opened by Siss6678 0
  • mptcp support

    mptcp support

    If necessary, the author can add MPTCPv1 support.

    mptcp wiki: https://github.com/multipath-tcp/mptcp_net-next/wiki

    Introduction to MPTCP: http://multipath-tcp.org/

    opened by Sunser 2
  • brook client 增加 同时用多个cdn ip 连接 同一个服务器 达到 带宽叠加

    brook client 增加 同时用多个cdn ip 连接 同一个服务器 达到 带宽叠加

    现在是用cf ip优选,能达到较高速度。 我想能不能用多个cdn 的ip连接到 同一brook服务器,实现 多个cdn ip同时传输数据达到最大速度。 比如 用5个 cdn ip 连到 同一个brook服务器,形成5个通道。用其中一个通道发送请求。 然后brook 服务器下了100M数据,但当一个通道时,只有1M传输速度。但是如果有 5个通道的话,就可能有5*1M的速度。 请大佬考虑添加一个这样的功能。谢谢!

    enhancement 
    opened by gitv2ray 1
  • socks5 doesn't use bindIP or socks5 IP for outgoing connections

    socks5 doesn't use bindIP or socks5 IP for outgoing connections

    Please read the document first

    • https://txthinking.github.io/brook/ ✅

    Please describe step by step any commands and operations you have performed, environment and version:

    In this scenario, server has 2 IP addresses

    Primary: 1.2.3.4 Secondary: 1.2.3.100

    I want to run the socks5 server only on the 1.2.3.100 IP and use that IP for all outgoing connections

    Brook version

    # brook --version
    Brook version 20210701
    

    Brook command

    brook --debug socks5 --bindip 1.2.3.100 --socks5 1.2.3.100:9999 --username user --password pass

    Network info

    The interface as taken from ip a

    2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc htb state UP group default qlen 1000
        link/ether 8a:3a:9a:1a:ba:2a brd ff:ff:ff:ff:ff:ff
        inet 1.2.3.4/24 brd 1.2.3.255 scope global eno1
           valid_lft forever preferred_lft forever
        inet 1.2.3.100/32 scope global eno1:0
           valid_lft forever preferred_lft forever
    

    Curl command to reproduce

    curl -x socks5h://user:[email protected]:9999 https://ifconfig.co

    Current output

    1.2.3.4

    Expected output

    1.2.3.100

    opened by peps1 1
  • Load balancing with multiple servers (or relays)

    Load balancing with multiple servers (or relays)

    Is it possible to use multiple brook servers (and/or relays) for load balancing?

    something like this:

    /opt/brook/brook client --server server1:9999 --server server2:9999 --server relay1:9999 --server relay2:9999 --password hello --socks5 127.0.0.1:1080

    enhancement 
    opened by PRNDA 2
Releases(v20220707)
Owner
TxThinking
Keep it simple, stupid
TxThinking
Mutual TLS encryption TCP proxy with golang

mtls-tcp-proxy Mutual Authentication TLS encryption TCP proxy with golang Why? I created this because of sometimes, it is not possible for us to estab

Habibie Faried 3 Oct 3, 2021
Fake server, Consumer Driven Contracts and help with testing performance from one configuration file with zero system dependencies and no coding whatsoever

mockingjay server Mockingjay lets you define the contract between a consumer and producer and with just a configuration file you get: A fast to launch

Chris James 519 Jun 18, 2022
Zero Trust Network Communication Sentinel provides peer-to-peer, multi-protocol, automatic networking, cross-CDN and other features for network communication.

Thank you for your interest in ZASentinel ZASentinel helps organizations improve information security by providing a better and simpler way to protect

ZTALAB 5 May 25, 2022
Cross-poster - A cross-posting tool for golang

How to start cp config.example.json config.json update config in config.json Bui

Sagleft 0 Feb 19, 2022
llb - It's a very simple but quick backend for proxy servers. Can be useful for fast redirection to predefined domain with zero memory allocation and fast response.

llb What the f--k it is? It's a very simple but quick backend for proxy servers. You can setup redirect to your main domain or just show HTTP/1.1 404

Kirill Danshin 12 Jan 23, 2022
Simple web content/proxy server that embodies enterprise zero trust security

pswa - Protected Static Web App Introduction pswa is a simple web content/proxy server which is suitable for various static web apps. Features Availab

YAEGASHI Takeshi 3 Jan 10, 2022
“Dear Port80” is a zero-config TCP proxy server that hides SSH connection behind a HTTP server!

Dear Port80 About The Project: “Dear Port80” is a zero-config TCP proxy server that hides SSH connection behind a HTTP server! +---------------------

Abbas Gheydi 6 Jun 29, 2022
Traefik config validator: a CLI tool to (syntactically) validate your Traefik configuration filesTraefik config validator: a CLI tool to (syntactically) validate your Traefik configuration files

Traefik Config Validator Note This is currently pre-release software. traefik-config-validator is a CLI tool to (syntactically) validate your Traefik

Thomas Klinger 0 Dec 16, 2021
A simple Go library to toggle on and off pac(proxy auto configuration) for Windows, MacOS and Linux

pac pac is a simple Go library to toggle on and off pac(proxy auto configuration

null 0 Dec 26, 2021
Paw: a cross platform application to manage your passwords and identities securely

Paw Paw is a cross platform application to manage your passwords and identities securely. It is written in Go and uses Fyne as UI toolkit and age as e

Luca Corbo 25 Jun 21, 2022
🖥️ Fast, modern and cross-platform SSH client

??️ Fast, modern and cross-platform SSH client Installation Build from source Requirements for building the project from source: Node 16 Go >= 1.17 Wa

Kamil Marut 2 Mar 20, 2022
A cross-platform, decentralized, chat app based on SaltyIM for functionality and GioUI for UI

This project is shifted at https://git.mills.io/saltyim/app Salty UI A cross-platform, decentralized, chat app based on SaltyIM for functionality and

MEARAJ BHAGAD 7 Jun 20, 2022
A standalone Web Server developed with the standard http library, suport reverse proxy & flexible configuration

paddy 简介 paddy是一款单进程的独立运行的web server,基于golang的标准库net/http实现。 paddy提供以下功能: 直接配置http响应 目录文件服务器 proxy_pass代理 http反向代理 支持请求和响应插件 部署 编译 $ go build ./main/p

fangyousong 5 May 2, 2022
Validator for your Traefik Proxy configuration

Traefik Config Validator Note This is currently pre-release software. traefik-config-validator is a CLI tool to (syntactically) validate your Traefik

OTTO (GmbH & Co. KG) 5 May 5, 2022
Pure-Go library for cross-platform local peer discovery using UDP multicast :woman: :repeat: :woman:

peerdiscovery Pure-go library for cross-platform thread-safe local peer discovery using UDP multicast. I needed to use peer discovery for croc and eve

Zack 548 Jul 1, 2022
Cross platform gRPC client

Cross platform gRPC client Features Automatic parsing of proto definitions to render services and input messages .proto file discovery Selection of mu

Roger Chapman 1.1k Jul 3, 2022
Packiffer is a lightweight cross-platform networking toolkit that let you sniff/analyze/inject/filter packets.

Packiffer is a lightweight cross-platform networking toolkit that let you sniff/analyze/inject/filter packets.

Massoud Asadi 57 Jul 1, 2022
Cross platform local network clipboard sync.

clipSync Synchronize clipboard content across multiple devices. Features Rapidly synchronize clipboard content to all devices in same local network. S

Rick Mark 3 Jan 3, 2022
Cross-platform, multi-server chat app built using Fyne

Fibro Really early days proof of concept for a cross-platform multi-server chat. Feel free to play, but don't expect it to do much! Features Multiple

Andy Williams 21 Jun 16, 2022