Brook
Shiliew
Cheap
Zhi
Meeting
Nan
mitmproxy client
Network Activity Monitor
iOS Old App Downloader
SSH Terminal
Server Dashboard
菜根谭
Socks5 Configurator
IPvBar
File Link
Markdown Editor
IP
AI
nami
joker
brook
ipio
nico
z
zoro
hancock
mad
httpserver
google hosts
Updated at: 2025-01-02
因为 OpenAI 在某些地区不可用,还 ban 掉了大部分 VPS 提供商的 IP。这篇文章的目的找个可用的落地 IP 来访问 ChatGPT。
以下在全新的 Ubuntu 22.04 上操作并验证可行
curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
apt update
apt install cloudflare-warp -y
echo y | warp-cli registration new
warp-cli mode proxy
warp-cli proxy port 1080
warp-cli connect
sleep 3
warp-cli status
到这里,你应该有了一个socks5, 127.0.0.1:1080
bash <(curl https://bash.ooo/nami.sh)
nami install brook
测试下 warp 创建出来的 socks5
brook testsocks5 -s 127.0.0.1:1080
Testing TCP: query http3.ooo A on 8.8.8.8:53
2023/05/13 09:17:14 Sent NegotiationRequest: 0x5 0x1 []byte{0x0}
2023/05/13 09:17:14 Got NegotiationReply: 0x5 0x0
2023/05/13 09:17:14 Sent Request: 0x5 0x1 0x0 0x1 []byte{0x8, 0x8, 0x8, 0x8} []byte{0x0, 0x35}
2023/05/13 09:17:14 Got Reply: 0x5 0x0 0x0 0x1 []byte{0x7f, 0x0, 0x0, 0x1} []byte{0x0, 0x0}
TCP: OK
Testing UDP: query http3.ooo A on 8.8.8.8:53
2023/05/13 09:17:14 Sent NegotiationRequest: 0x5 0x1 []byte{0x0}
2023/05/13 09:17:14 Got NegotiationReply: 0x5 0x0
2023/05/13 09:17:14 Sent Request: 0x5 0x3 0x0 0x1 []byte{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0} []byte{0x0, 0x0}
2023/05/13 09:17:14 unexpected EOF
可以看出,这个 socks5 只支持 TCP,不能处理 UDP。所以只能让 brook server block 掉 OpenAI 的 UDP (在客户端用脚本 block 更好),然后将 OpenAI 的 TCP 转发到 Warp 的 socks5.
brook --script /path/to/script.tengo server --listen :9999 -p hello
match_domain := func(m, domain){
text := import("text")
ss := text.split(text.to_lower(domain), ".")
s := ""
for i := len(ss) - 1; i >= 0; i-- {
if s == "" {
s = ss[i]
} else {
s = ss[i] + "." + s
}
if m[s] {
return true
}
}
return false
}
match_openai := func(domain){
m := {
"ai.com": true,
"chatgpt.com": true,
"chat.com": true,
"oaistatic.com": true,
"oaiusercontent.com": true,
"openai.com": true,
"sora.com": true,
"openaiapi-site.azureedge.net": true,
"openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net": true,
"openaicomproductionae4b.blob.core.windows.net": true,
"production-openaicom-storage.azureedge.net": true,
"chatgpt.livekit.cloud": true,
"host.livekit.cloud": true,
"turn.livekit.cloud": true,
"o33249.ingest.sentry.io": true,
"openaicom.imgix.net": true,
"browser-intake-datadoghq.com": true
}
if match_domain(m, domain) {
return true
}
text := import("text")
if text.contains(domain, "chatgpt-async-webps-prod") {
return true
}
return false
}
f := func() {
if in_brooklinks {
return {
"warp": "brook://socks5?password=&socks5=socks5%3A%2F%2F127.0.0.1%3A1080"
}
}
if in_address {
m := in_address
if m.domainaddress {
brook := import("brook")
r := brook.splithostport(m.domainaddress)
if m.network == "udp" && match_openai(r.host) {
return { block: true }
}
if m.network == "tcp" && match_openai(r.host) {
return { brooklinkkey: "warp" }
}
}
}
}
out := f()