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:内部结构


[2020.5.11 Update] 目前 Shadowsocks 已经不稳定,不建议继续使用 ss 做科学上网工具了。我个人已经切换到 V2Ray 。继续向我询问 ss 相关问题我也不见得能解决。

16 Replies to “Mac操作系统上的ss客户端:ShadowsocksX-NG”

    1. 不好意思,我前段时间比较忙就没看这边。不知道你的问题解决了没有。
      也许你需要先确认SS的执行权限是否设置正确?有按上面说的去查看错误日志吗。

    1. 字面上只能看出服务器无响应。也许你需要确认一下远端代理服务器是否在正常工作中。

  1. ERROR: remote_recv_cb_recv: Connection reset by peer
    mac切换了几个服务器都显示这个错误,无法连接,请问这个错误该如何解决?查了很久,感觉也没看到有实际解决的办法

  2. 其他一切正常,就是在使用telegram的时候设置proxy为socks5的时候,始终无法连接

  3. 帅哥你好,我想要一个shadowsocksx-ng-r8的dmg,哪里都下不到,自己电脑上都也忽然都没了。方便share一份吗?无意中走到这里都,留个言试试,万分感谢。🙏

    1. 我不知道你所说的-r8版本是什么意思,ShadowsocksX-NG的所有历史发布版本都可以在这里找到:https://github.com/shadowsocks/ShadowsocksX-NG/releases

  4. 楼主您好,
    请教一下,换了一台Mac,并且把所有设置和软件迁移过后,就不能科学上网了。。。
    PAC自动模式运行下的ShadowsocksX-NG只有两个进程
    Shadowsoc 1150 Han 12u IPv4 0x7c69ebbb01df657f 0t0 TCP 127.0.0.1:8090 (LISTEN)
    Shadowsoc 1150 Han 15u IPv6 0x7c69ebbafb01907f 0t0 TCP [::1]:8090 (LISTEN)

    Google也打不开,不知道哪里设置出了问题,旧电脑和手机端的SS同样的服务器设置和地址都是好好的。。。多谢楼主!

    1. 是否有按上文介绍的内容检查日志log和软件运行权限?

      Shadowsoc两个进程存在的话,
      看起来代理本身是有运行起来的,
      但另外两个进程负责接收本机的输入——例如系统流量经过socks5端口传给shadowsocksX-NG,它再发给远端服务器。
      那两个进程没有运行。

      可以往软件启动的方向追追看。看下在启动阶段的日志里有没有记录异常。

  5. 您好,我检查了监听端口,同样没有shadowsoc的两个进程,取而代之的是两个rapportd进程(privoxy、ss-local和odfs-loca进程都有)。
    请问这个是什么情况呢?

  6. 「您好,我检查了监听端口,同样没有shadowsoc的两个进程,取而代之的是两个rapportd进程(privoxy、ss-local和odfs-loca进程都有)。
    请问这个是什么情况呢?」
    而且检查log一直报错ERROR: Invalid config path.也给ss-local赋予执行权限了。只是没找到有Application Support的文件夹及里面的ss-local文件。
    请问这个配置是哪里出问题了呢?

    1. 先解决ERORR,最后再去检查各个进程是否正常运行。

      这里这个ERROR,是配置文件读取错误,找不到config file/没有权限读取config文件。
      你能找到自己的config文件在哪吗?如果能找到,确保权限是所有用户可读。

      我个人理解:是ss-local在读config文件,失败了。这个操作的失败与ShadowsocksX-NG没什么关系,如果ss-local都配置出错,那你换其他ss客户端也会表现出问题。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.