NextChat icon indicating copy to clipboard operation
NextChat copied to clipboard

[Bug] proxychains4在mac下dev无法代理

Open EngsShi opened this issue 2 years ago • 4 comments

Describe the bug mac环境dev调试,mac版proxychains4代理,proxychains启动时正常挂载,但是实际接口并未走代理通道。 编译docker没问题

To Reproduce Steps to reproduce the behavior:

  1. 配置proxychains.conf strict_chain proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] socks5 127.0.0.1 51837
  2. 调试启动 proxychains4 -f ./proxychains.conf npm run dev [proxychains] config file found: ./proxychains.conf [proxychains] preloading /usr/local/Cellar/proxychains-ng/4.16/lib/libproxychains4.dylib
  3. 没有代理成功的 [proxychains] 日志,clash并未收到请求 [Proxy] v1/chat/completions [Base Url] https://api.openai.com [Chat Stream] [TypeError: fetch failed] { cause: [ConnectTimeoutError: Connect Timeout Error] { name: 'ConnectTimeoutError', code: 'UND_ERR_CONNECT_TIMEOUT', message: 'Connect Timeout Error' }

Desktop (please complete the following information):

  • OS: MacOS 13.3.1 (22E261)
  • Node v18.14.0
  • proxychains-ng 4.16 install with brew

EngsShi avatar Apr 24 '23 08:04 EngsShi

我建议你可以先用其他的 openai-proxy 项目,在 cloudflare 上搭建一个 openai 代理,然后通过修改 BASE_URL 的方式去访问,这样要比本地的梯子稳很多。

Yidadaa avatar Apr 24 '23 09:04 Yidadaa

  1. 我在MAC本地运行也有同样的问题,proxychains也是同样的配置,一样的错误(Proxychains验证curl是正常可用的)。 本地希望网络走NextWeb Client -> MAC Local SOCKS5 -> OpenAI的链路,对React和NextJs不熟悉,不清楚这里网络转发是如何走的?
  2. 通过公司网络(公司网已经直接支持访问Google等),没有任何代理配置,直接在webstorm里面运行yarn run dev,通过访问127.0.0.1:3000端口则可以正常访问和使用Chat,不清楚这里网络有什么差异?

lupguo avatar Apr 27 '23 02:04 lupguo

@lupguo 由于要兼容 vercel edge function 运行时,无法在 server function 内部使用 proxy,所以只能用 proxychains 曲线救国,可以等待 standalone 编译支持后,这个问题就不存在了 #1000

Yidadaa avatar Apr 27 '23 03:04 Yidadaa

@EngsShi @Yidadaa

proxychains.conf配置信息

这里特别注意本地端口不走代理

strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000

# 本地端口不走代理,不然会静态web页会访问失败
localnet 127.0.0.0/255.0.0.0
localnet ::1/128

[ProxyList]
socks5 127.0.0.1 10553

node执行的应用走proxychains

本地执行yarn run dev实际是执行了node ./node_modules/.bin/next dev

$ which node
/opt/homebrew/bin/node

# 通过ps看到node执行信息
$ pstree -p 6102
-+= 00001 root /sbin/launchd
 \-+= 05973 lupingguo /Applications/WebStorm.app/Contents/MacOS/webstorm
   \-+= 06102 lupingguo /usr/local/bin/zsh --login -i
     \-+= 12366 lupingguo node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/.bin/next dev
       \-+- 12367 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js
         |--- 12368 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js
         \--- 12369 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js

# 实际是node要走proxychains4,并非yarn,所以这里proxychains4执行为以下内容:
$ proxychains4 node ./node_modules/.bin/next dev                                                                  
[proxychains] config file found: /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.16-git-13-g133e06b
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
[proxychains] DLL init: proxychains-ng 4.16-git-13-g133e06b
...

输入框发出提问请求后,可以通过Log看到代理链路请求信息:

....
[Proxy]  v1/chat/completions
[Base Url] https://api.openai.com
[proxychains] Strict chain  ...  127.0.0.1:10553  ...  api.openai.com:443  ...  OK

到处,本地访问localhost:3000是通过本地IP端口访问,node的web应用是通过proxychains配置的socks5代理访问,从而可以正常使用openai了!

最后,注意因为有MAC的SIP机制存在,会导致一些MAC自带二进制bin执行文件失效

参考:https://github.com/rofl0r/proxychains-ng/issues/78

lupguo avatar Apr 28 '23 06:04 lupguo

合入 #1000

Yidadaa avatar May 09 '23 08:05 Yidadaa