Brook

🇬🇧 English

Build Status

🤝 Telegram 💬 Chat 🩸 Youtube ❤️ Sponsor

一个为开发者设计的跨平台网络工具.

🗣 订阅公告

Table of Contents

安装

安装 brook 命令

nami 她会自动帮你下载适用你系统的最新版 brook 命令文件. 如果你的系统是 Windows, 你需要在 Git Bash 里面运行

如果你的系统不是 Linux, MacOS, Windows, 或不想用 nami, 你可以去 releases 自己下载命令文件

一键脚本,目前仅支持部分命令参数: bash <(curl https://bash.ooo/brook.sh)

使用网上其他同学写的脚本

Archlinux: pacman -S brook (可能不是最新版本)

brew: brew install brook (可能不是最新版本)

安装 nami

bash <(curl https://bash.ooo/nami.sh)

使用 nami 安装 brook

nami install brook

安装 Brook 图形客户端

Brook GUI 工作原理

brook 子命令命令参数

brook 规则格式

有三种规则文件

规则文件可用于

例子

下面列举一些常用场景命令的例子, 注意自己替换示例中的 IP,端口,密码,域名,证书路径等参数

运行 brook server

SRC --TCP--> brook client/relayoverbrook/dns/tproxy/GUI Client --TCP(Brook Protocol)--> brook server --TCP--> DST
SRC --UDP--> brook client/relayoverbrook/dns/tproxy/GUI Client --UDP/TCP(Brook Protocol)--> brook server --UDP--> DST
brook server --listen :9999 --password hello

获取 brook link

brook link --server 1.2.3.4:9999 --password hello --name 'my brook server'

或 获取 brook link 让 udp 走 tcp --udpovertcp

brook link --server 1.2.3.4:9999 --password hello --udpovertcp --name 'my brook server'

运行 brook wsserver

SRC --TCP--> brook wsclient/relayoverbrook/dns/tproxy/GUI Client --TCP(Brook Protocol)--> brook wsserver --TCP--> DST
SRC --UDP--> brook wsclient/relayoverbrook/dns/tproxy/GUI Client --TCP(Brook Protocol)--> brook wsserver --UDP--> DST
brook wsserver --listen :9999 --password hello

获取 brook link

brook link --server ws://1.2.3.4:9999 --password hello --name 'my brook wsserver'

或获取 brook link 指定个域名, 甚至不是你自己的域名也可以

brook link --server ws://hello.com:9999 --password hello --address 1.2.3.4:9999 --name 'my brook wsserver'

运行 brook wssserver: 自动签发信任证书

注意:确保你的域名已成功解析到你服务器的 IP, 自动签发证书需要额外监听 80 端口

brook wssserver --domainaddress domain.com:443 --password hello

获取 brook link

brook link --server wss://domain.com:443 --password hello --name 'my brook wssserver'

运行 brook wssserver 使用已有的信任机构签发的证书

注意:确保你的域名已成功解析到你服务器的 IP

brook wssserver --domainaddress domain.com:443 --password hello --cert /root/cert.pem --certkey /root/certkey.pem

获取 brook link

brook link --server wss://domain.com:443 --password hello --name 'my brook wssserver'

运行 brook wssserver 自己签发非信任证书, 甚至不是你自己的域名也可以

安装 mad

nami install mad

使用 mad 生成根证书

mad ca --ca /root/ca.pem --key /root/cakey.pem

使用 mad 由根证书派发 domain.com 证书

mad cert --ca /root/ca.pem --ca_key /root/cakey.pem --cert /root/cert.pem --key /root/certkey.pem --domain domain.com

运行 brook

brook wssserver --domainaddress domain.com:443 --password hello --cert /root/cert.pem --certkey /root/certkey.pem

获取 brook link 使用 --insecure

brook link --server wss://domain.com:443 --password hello --name 'my brook wssserver' --address 1.2.3.4:443 --insecure

或 获取 brook link 使用 --ca

brook link --server wss://domain.com:443 --password hello --name 'my brook wssserver' --address 1.2.3.4:443 --ca /root/ca.pem

withoutBrookProtocol

性能更好,但数据不使用 Brook 协议进行强加密。所以请使用证书加密,并且不建议--withoutBrookProtocol 和--insecure 一起使用

withoutBrookProtocol 自动签发信任证书

注意:确保你的域名已成功解析到你服务器的 IP, 自动签发证书需要额外监听 80 端口

brook wssserver --domainaddress domain.com:443 --password hello --withoutBrookProtocol

获取 brook link

brook link --server wss://domain.com:443 --password hello --withoutBrookProtocol

withoutBrookProtocol 使用已有的信任机构签发的证书

注意:确保你的域名已成功解析到你服务器的 IP

brook wssserver --domainaddress domain.com:443 --password hello --cert /root/cert.pem --certkey /root/certkey.pem --withoutBrookProtocol

获取 brook link

brook link --server wss://domain.com:443 --password hello --name 'my brook wssserver' --withoutBrookProtocol

withoutBrookProtocol 自己签发非信任证书, 甚至不是你自己的域名也可以

安装 mad

nami install mad

使用 mad 生成根证书

mad ca --ca /root/ca.pem --key /root/cakey.pem

使用 mad 由根证书派发 domain.com 证书

mad cert --ca /root/ca.pem --ca_key /root/cakey.pem --cert /root/cert.pem --key /root/certkey.pem --domain domain.com

运行 brook wssserver

brook wssserver --domainaddress domain.com:443 --password hello --cert /root/cert.pem --certkey /root/certkey.pem --withoutBrookProtocol

获取 brook link

brook link --server wss://domain.com:443 --password hello --withoutBrookProtocol --address 1.2.3.4:443 --ca /root/ca.pem

brook server wsserver wssserver 服务端转发给另外的 socks5 server

brook server wsserver wssserver 在服务端屏蔽域名和 IP 列表

运行 brook socks5, 一个独立的标准 socks5 server

SRC --TCP--> brook socks5 --TCP--> DST
SRC --UDP--> brook socks5 --UDP--> DST
brook socks5 --listen :1080 --socks5ServerIP 1.2.3.4

获取 brook link

brook link --server socks5://1.2.3.4:1080

运行 brook socks5, 一个独立的标准 socks5 server, 指定用户名和密码

brook socks5 --listen :1080 --socks5ServerIP 1.2.3.4 --username hello --password world

获取 brook link

brook link --server socks5://1.2.3.4:1080 --username hello --password world

brook relayoverbrook 中继任何 TCP 和 UDP server, 让其走 brook 协议. 它与 brook server wsserver wssserver 一起工作

SRC --TCP--> brook relayoverbrook --TCP(Brook Protocol) --> brook server/wsserver/wssserver --TCP--> DST
SRC --UDP--> brook relayoverbrook --TCP/UDP(Brook Protocol) --> brook server/wsserver/wssserver --UDP--> DST
brook relayoverbrook ... --from 127.0.0.1:5353 --to 8.8.8.8:53

brook dns 用来创建一个加密 DNS Server, TCP and UDP, 它与 brook server wsserver wssserver 一起工作

SRC --TCP--> brook dns --TCP(Brook Protocol) --> brook server/wsserver/wssserver --TCP--> DST
SRC --UDP--> brook dns --TCP/UDP(Brook Protocol) --> brook server/wsserver/wssserver --UDP--> DST
brook dns ... --listen 127.0.0.1:53

规则

brook tproxy 透明代理网关在官网原版 OpenWrt

无需操作 iptables!

opkg install ca-certificates openssl-util ca-bundle coreutils-nohup iptables-mod-tproxy
brook tproxy --link 'brook://...' --dnsListen :5353
  1. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
  2. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
  3. 默認, OpenWrt 將會下發 router 的 IP 的為電腦或手機的網關和 DNS

规则

brook tproxy 透明代理网关在 Ubuntu

无需操作 iptables!

systemctl stop systemd-resolved
systemctl disable systemd-resolved
echo nameserver 8.8.8.8 > /etc/resolv.conf
brook tproxy --link 'brook://...' --dnsListen :53
  1. 配置其他机器的网关和 DNS 为这台机器的 IP 即可
  2. 如果你运行在虚拟机里并且宿主机使用的是无线网卡, 可能不能工作。

brook tproxy 透明代理网关在 M1 macOS

https://talks.txthinking.com/articles/brook-gateway-on-m1-macos.article

brook tproxy 透明代理网关在 Intel macOS

https://talks.txthinking.com/articles/brook-gateway-on-intel-macos.article

brook tproxy 透明代理网关在 Windows

https://talks.txthinking.com/articles/brook-gateway-on-windows.article

官网原版 OpenWrt 图形客户端

依赖: ca-certificates openssl-util ca-bundle coreutils-nohup iptables-mod-tproxy

无需操作 iptables!

端口 9999, 1080, 5353 将会被使用. 它与 brook server, brook wsserver, brook wssserver 一起工作.

  1. 下載適合你系統的ipk文件
  2. 上傳並安裝: OpenWrt Web -> System -> Software -> Upload Package...
  3. 刷新頁面, 頂部菜單會出現 Brook 按鈕
  4. OpenWrt Web -> Brook -> 輸入後點擊 Connect
  5. OpenWrt DNS forwardings: OpenWrt Web -> Network -> DHCP and DNS -> General Settings -> DNS forwardings -> 127.0.0.1#5353
  6. OpenWrt Ignore resolve file: OpenWrt Web -> Network -> DHCP and DNS -> Resolv and Hosts Files -> Ignore resolve file
  7. 默認, OpenWrt 將會下發 router 的 IP 為電腦或手機的網關和 DNS

brook relay 可以中继任何 TCP 和 UDP server, 这是一个独立的功能, 它不依赖 brook server wsserver wssserver

SRC --TCP--> brook relay --TCP--> DST
SRC --UDP--> brook relay --UDP--> DST
brook relay --from :9999 --to 1.2.3.4:9999

brook socks5tohttp 将 socks5 proxy 转换为 http proxy

brook socks5tohttp --socks5 127.0.0.1:1080 --listen 127.0.0.1:8010

brook pac 创建一个 pac server

brook pac --listen 127.0.0.1:8080 --proxy 'SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT' --bypassDomainList ...

brook pac 创建一个 pac 文件

brook pac --file proxy.pac --proxy 'SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT' --bypassDomainList ...

IPv6

Command/Client Remark Support IPv4 Support IPv6
brook server CLI Yes Yes
brook client CLI Yes Yes
brook wsserver CLI Yes Yes
brook wsclient CLI Yes Yes
brook wssserver CLI Yes Yes
brook wssclient CLI Yes Yes
brook relayoverbrook CLI Yes Yes
brook dns CLI Yes Yes
brook tproxy CLI Yes Yes
brook connect CLI Yes Yes
brook relay CLI Yes Yes
brook socks5 CLI Yes Yes
brook socks5tohttp CLI Yes Yes
brook hijackhttps CLI Yes Yes
macOS Client GUI Yes Yes
Windows Client GUI Yes Yes/?
iOS Client GUI Yes Yes
Android Client GUI Yes Yes
OpenWrt Client GUI Yes Yes

NAT Type

Symmetric

使用 joker 运行守护进程

使用 nami 安装 joker

nami install joker

使用 joker 运行 brook 守护进程, 只需要在原来命令前面加上 joker

joker brook ...

查看最后一个命令的 ID

joker last

查看某个命令的输出和错误

joker log <ID>

查看运行的命令列表

joker list

停止某个命令

joker stop <ID>

使用 jinbe 添加开机自启动命令

使用 nami 安装 jinbe

nami install jinbe

使用 jinbe 添加开机自启动命令,只需要在原来命令前面加上 jinbe

jinbe joker brook ...

查看添加的开机命令

jinbe list

移除某个开机命令

jinbe remove <ID>

Protocol

brook server protocol

brook-server-protocol.md

brook wsserver protocol

brook-wsserver-protocol.md

brook wssserver protocol

brook-wssserver-protocol.md

withoutBrookProtocol protocol

withoutbrookprotocol-protocol.md

brook link protocol

brook-link-protocol.md

其他资源