Mac操作系统上的ss客户端:ShadowsocksX-NG

一直以来我使用的ss客户端都是ShadowsocksX,设置比较简单,功能也很稳定。没有想过要换。
但是GFW砌墙技术日新月异,ss的开发者们想必也没有闲着,ShadowsocksX却很久很久都没有更新过了,这让我很没有安全感。

后来在GitHub上一找,才发现原作者@clowwindy停止更新ShadowsocksX之后,其他开发者用Swift重写了一版ShadowsocksX-NG,之后都在NG版本进行更新。
但是我下载X-NG之后,经过简单的配置,却无法像X那样开始使用。于是开始(瞎jb)排查问题。


以下这些操作我在单独执行每一步的时候都没有作用。直到我把它们全都做过一遍之后,我的X-NG才开始正常工作。
所以把它们记录下来,希望有人能用得上。


首先需要知道,这版X-NG会把自己的log文件:ss-local.log
保存在路径:~/Library/Logs
所以这个log文件的地址为:~/Library/Logs/ss-local.log

通过log文件的error记录,可以看到一些错误提示

例如上图中,我的error是:address已被占用。

查看了一下端口监听状况,问题在于,我在偏好设置中,把本地的「Socks5监听端口」和「HTTP代理监听端口」设置成了同一端口。导致http代理先启动而占用了端口,Socks代理就启动失败了。

⬆️随便把它们改成不同的值即可解决问题。

 

另外一种常见问题是,ss-local服务启动失败
(log里的记录为:ShadowsocksX-NG Start ss-local failed.
这可能是ss-local没有执行权限导致的。

GitHub上有一种说法是删除软件重新安装可以解决。但是……???重装这种操作真的是程序员解决问题的思路吗…………………………

我参考了另外的做法,
cd /Applications/ShadowsocksX-NG.app/Contents/Resources

ss-local赋予执行权限:
chmod +x ss-local
然后,重启电脑。
(我还发现另外有个地方也有ss-local文件:/Users/godlike/Library/Application Support/ShadowsocksX-NG/ss-local-3.0.5   不知道影不影响)

 

我还看到有人的做法是把这个文件的读写权限赋给所有用户⬇️,我也照做了。虽然我感觉这项并不影响它的运行。

如果你曾经安装过另外的ss客户端,前往文件夹:
~/Library/Application Support/
删除其他的SS文件夹 ,只留一个
因为可能是ss-local冲突(虽然我觉得这种说法很没有道理)

 

最后,可以用这个命令来检查一下端口监听状况:
lsof -iTCP -sTCP:LISTEN -n -P
我这里,正常运行的ShadowsocksX-NG会有图示的4个进程:

其中,privoxy监听了我设置的HTTP代理端口,ss-local监听了我设置的Socks5代理端口。而两个Shadowsoc如果没跑起来,你就翻不了墙。

下面的命令可以用来验证Socks代理是否成功转发你的流量
curl --socks5 127.0.0.1:1086 http://cip.cc


我的服务器在日本,所以可以看到这个网站返回的我的IP是东京的地址。
当然,其实你用浏览器开个google就知道代理是否运行成功了。


PS. 如果你像我一样,之前对别的软件做过代理设置(例如Dropbox的「网络」-「代理服务器」,我之前设置了本机的Socks5代理)
你需要根据新的Socks5监听端口对它们进行修改。
因为老版本的ShadowsocksX默认监听在1080端口,而ShadowsocksX-NG则默认监听1086端口。


附赠:《科学上网漫游指南》
我觉得上面的信息挺有用的

深入理解GFW:内部结构