Skip to content

dfdjoker/brook

 
 

Repository files navigation

Brook

Build Status Wiki Slides Youtube Telegram Group Telegram Channel License: GPL v3

Brook


v20200502

  • CLI: Add $ brook dns
  • CLI: Add $ brook pac
  • CLI: Rename $ brook vpn to $ brook tun, still experimental
  • GUI: Support multiple servers

Some useful tutorial resources


Table of Contents

What is Brook

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

Install via nami

install CLI using nami on Linux/BSD/macOS

nami install github.com/txthinking/brook

or install CLI on Archlinux

pacman -S brook

or download CLI from releases

install GUI on macOS

brew cask install brook

or download GUI: macOS, Windows, Android, iOS

CLI contains server and client, GUI only contains client. iOS client only supports non-China AppStore.

Brook

NAME:
   Brook - A Cross-Platform Proxy/VPN Software

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

VERSION:
   20200502

AUTHOR:
   Cloud <cloud@txthinking.com>

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 or a http proxy, [src <-> $ brook client <-> $ brook server <-> dst], [works with $ brook server]
   tunnel        Run as tunnel, both TCP and UDP, this means access [listen address] is equal to [to address], [src <-> listen address <-> $ brook server <-> to address], [works with $ brook server]
   dns           Run as DNS server, both TCP and UDP, [src <-> $ brook dns <-> $ brook server <-> default dns server] or [src <-> $ brook dns <-> list dns server], [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]
   tun           Run as tun, both TCP and UDP, [src <-> $ brook tun <-> $ brook server <-> dst], [works with $ brook server]
   wsserver      Run as brook wsserver, both TCP and UDP, it will start a standard http(s) server and websocket server
   wsclient      Run as brook wsclient, both TCP and UDP, to start a socks5 proxy or a http proxy, [src <-> $ brook wsclient <-> $ brook wsserver <-> dst], [works with $ brook wsserver]
   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]
   pac           Run as PAC server or save PAC to file
   systemproxy   Set system proxy with pac url, or remove, only works on macOS/Windows
   ssserver      Run as shadowsocks server, both TCP and UDP, fixed method is aes-256-cfb
   ssservers     Run as shadowsocks multiple servers, fixed method is aes-256-cfb
   ssclient      Run as shadowsocks client, both TCP and UDP, to start a socks5 proxy or a http proxy, fixed method is aes-256-cfb, [src <-> $ brook ssclient <-> $ brook ssserver <-> dst], [works with $ brook ssserver]
   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

Server

# Run as a brook server
$ brook server -l listen_address:port -p password

More parameters: $ brook server -h

Client

# Run as brook client, connect to brook server, start a socks5 proxy server
$ brook client -s server_address:port -p password -l listen_address:port -i socks5_server_ip

More parameters: $ brook client -h

Tunnel

# Run as tunnel, connect to brook server
$ brook tunnel -s server_address:port -p password -l listen_address:port -t tunnel_to_address:port

More parameters: $ brook tunnel -h

DNS Server

# Run as DNS server, connect to brook server
$ brook dns -s server_address:port -p password -l listen_address:port

More parameters: $ brook dns -h

Transparent Proxy

See wiki

Tun

# Run as tun, connect to brook server, proxy all TCP/UDP. [ROOT privileges required].
$ sudo brook tun -s server_address:port -p password -l 127.0.0.1:1080

# Must exit by Ctrl+C

More parameters: $ brook tun -h

See wiki for more tutorials

WebSocket Server

# Run as a brook wsserver
$ brook wsserver -l listen_address:port -p password
# Run as a brook wsserver with domain, make sure your domain name has been successfully resolved, 80 and 443 are open, brook will automatically issue certificate for you
$ brook wsserver --domain yourdomain.com -p password

More parameters: $ brook wsserver -h

WebSocket Client

# Run as brook wsclient, connect to brook wsserver, start a socks5 proxy server
$ brook wsclient -s ws://wsserver_address:port -p password -l listen_address:port -i socks5_server_ip
# Run as brook wsclient, connect to brook wsserver with domain, start a http proxy
$ brook wsclient -s wss://wsserver_domain:port -p password -l listen_address:port --http

More parameters: $ brook wsclient -h

Link

$ brook link -s server_address:port -p password
$ brook link -s ws://wsserver_address:port -p password
$ brook link -s wss://wsserver_domain:port -p password

More parameters: $ brook link -h

QR

$ brook qr -s server_address:port -p password
$ brook qr -s ws://wsserver_address:port -p password
$ brook qr -s wss://wsserver_domain:port -p password

More parameters: $ brook qr -h

Relay

# Run as relay
$ brook relay -l listen_address:port -r relay_to_address:port

More parameters: $ brook relay -h

Socks5 Server

# Run as standard socks5 server
$ brook socks5 -l listen_address:port -i server_ip

More parameters: $ brook socks5 -h

Socks5 to http

# Convert socks5 proxy to http proxy
$ brook socks5tohttp -l listen_address:port -s socks5_server_address:port

More parameters: $ brook socks5tohttp -h

PAC

# Create PAC server
$ brook pac -l listen_address_port

# Save PAC to local file
$ brook pac -f /path/to/file.pac

More parameters: $ brook pac -h

System Proxy

# Set system PAC proxy
$ brook systemproxy -u pac_url

# Clear system PAC proxy
$ brook systemproxy -r

More parameters: $ brook systemproxy -h

Shadowsocks

# Run as shadowsocks server
$ brook ssserver -l listen_address:port -p password

More parameters: $ brook ssserver -h

# Run as shadowsocks client, connect to shadowsocks server, start a socks5 proxy server
$ brook ssclient -s ssserver_address:port -p password -l listen_address:port -i socks5_server_ip

More parameters: $ brook ssclient -h

Fixed method is aes-256-cfb

How to

Some useful tutorial resources

Contributing

Please read CONTRIBUTING.md first

License

Licensed under The GPLv3 License

About

Brook is a cross-platform strong encryption and not detectable proxy. Zero-Configuration.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 99.3%
  • Shell 0.7%