macOS 下解决新安装 Dropbox 后无法设置代理的问题
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 首选项设置好代理之后,退出再正常打开,终于可以使用了。