macOS 下解决新安装 Dropbox 后无法设置代理的问题

yangyouth 2019-06-26

macOS 下解决新安装 Dropbox 后无法设置代理的问题

问题描述

新安装 Dropbox 后,由于没有设置翻墙代理导致启动后提示无网络连接,但由于 Dropbox 产品设计的问题,无网络连接的情况下无法设置网络代理。这就导致了一个死循环,你想要有网络连接,你就必须得设置代理,但是你又无法在无网络连接的情况下设置代理。

解决方案

感谢 Mac下dropbox无法使用,无法设置首选项解决 这篇文章中指出的通过命令行带上代理来启动 Dropbox 的解决方案。

根据上述的解决方案,我们有了一个大致的步骤计划,首先安装 Homebrew,然后通过 Homebrew 安装 ProxyChains-NG,设置好 ProxyChains-NG 后使用命令行带上 ProxyChains-NG 参数启动 Dropbox,启动成功后在 Dropbox 首选项里面好代理后退出重新以正常方式启动 Dropbox 就可以了。

前置准备

为了防止上述所需要的一切软件在下载过程中出现意料不到的问题,我们首先要将整个 Terminal 置于代理设置好的环境当中。

// 设置代理 
export ALL_PROXY=socks5://127.0.0.1:1086 

// 清除代理 
unset ALL_PROXY 

// 查看ip测试是否生效 
curl -i http://ip.cn

设置代理地址当中的 socks5 端口可以从 Shadowsocks 客户端设置中查到。

如果设置成功,curl 返回的结果应该是你代理代理服务器的 IP 地址。需要注意的是,这种设置方式只对当前的 Terminal 环境起作用,如果想要代理永久对 Terminal 起作用,可以参考下面两个地址中讲解的方式设置。

https://juejin.im/entry/58218...

https://apple.stackexchange.c...

另外,为了防止后续的下载地址命不中 Shadowsocks PAC列表,所以最好将 Shadowsocks 代理改成全局代理

安装 Homebrew 及 ProxyChains-NG

安装 Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装 ProxyChains-NG

brew search proxychains

brew install proxychains-ng

编辑 ProxyChains-NG配置文件

vi /usr/local/etc/proxychains.conf

在文件末尾 [ProxyList] 下面,根据实际情况修改成自己的代理:

socks5  127.0.0.1 1086

参考:https://www.ktanx.com/blog/p/...

使用 ProxyChains-NG

到这里,前期工作基本都做完了,但有个问题就是使用命令

proxychains4 curl -i http://ip.cn

不管怎么样都无法成功返回代理服务器的 IP,虽然看命令执行情况已经加载了 ProxyChains-NG 的配置文件。

[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Sun, 28 Jan 2018 15:27:04 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive

当前 IP:222.**.***.* 来自:**市 电信

无奈搜索一番,猛然发现 macOS 在新版本的系统中加入了一个叫 SIP 的东西,导致 ProxyChains 无法使用,除非关闭 SIP。

关于 SIP,在前面引用的设置 Terminal 代理的文章中也有提到,具体的问题描述可以从 ProxyChains-NG 官方的 README 文件中 Known Problems 一节读到。

https://github.com/rofl0r/pro...

由于关闭 SIP 可能带来的安全问题,以及要在 Recovery 模式下运行命令来关闭,略显繁琐,所以并不是很想关闭 SIP。就在以为无路可走必须关闭 SIP 才能继续的情况下,v2ex 大佬的一句话指明了道路:

简单的解决方法是不用系统自带的任何命令行工具(网络相关的)…… curl, wget, ssh, python 啥的统统 homebrew 安装就好了。

https://www.v2ex.com/t/204725...

这意味着 SPI 仅会影响系统自带的命令,但不会影响应用带代理的启动,这也是为什么 curl 无法正常返回代理地址的原因。

命令行启动 Dropbox

抱着试一试的心态带着代理命令行启动了 Dropbox:

cd /Applications/Dropbox.app/Contents/MacOS
proxychains4 ./Dropbox

结果就是 Dropbox 带着代理信息成功启动起来了,在启动信息里就可以看到加载了 ProxyChains-NG 设置的代理。在 Dropbox 首选项设置好代理之后,退出再正常打开,终于可以使用了。

相关推荐