介绍

Shadowsocks Logo
嗯…SS这种东西我就不需要过多介绍了,实际上我自己也在提供网络加速服务,想看关于这个工具的介绍请自行百度、谷歌或者看官网

背景

之前我就我的SS因被用来发垃圾邮件导致被列入黑名单这个问题研究了好久(发的都是英文的垃圾邮件,应该是某个用户电脑中毒了),最后还是决定自己来魔改原版的shadowsocks-rm manyuser,毕竟自己动手风衣足食嘛。

与原本的Py版多用户SS的区别

  • SS-panel V3完全兼容,意味着支持:
    • API (MU V2)端口数据统计与监控
    • 自定义加密方式
    • 实际上API功能接近于Shadowsocks-Go Manyuser,但是有更多的实用功能。
  • 支持One Time Auth(OTA,一次性认证,大部分客户端都有这个功能但是原版已经移除)
  • 修复了db loop的问题(实际上我还是接受之前一个人的建议直接去掉了这个东西,用来替代的是info级别的db downloaddb upload并且这两个东西只有开了啰嗦模式才会输出到日志)。
  • 更改了一些日志输出数据,更加直观,可以直接看出某个连接是由哪个用户哪个IP发起的
  • 增加了封禁IP功能(实际上原本就有,不过mengskysama没有继续做而已)
  • 增加了端口封禁功能,禁止连接某个端口。(譬如禁止连接22以防爆破)
  • 增加了跳过监听端口的功能,可以指定不监听某个端口,给别的程序腾出端口(譬如HTTP:80 和 HTTPS:443)
  • 可定义度非常高,你甚至可以调你的日志的日期格式和输出信息格式
  • 还有就是对原版的一些小修复,精简了一些无用的代码
  • 跟随原版的脚步,支持AEAD算法比如aes-X-gcm与chacha20-ietf-poly1305,比无验证的流算法(aes-X-ctr之类的)有着更高的安全系数

源码仓库

GitHub: https://github.com/fsgmhoward/shadowsocks-py-mu

感谢的人

  1. @clowwindy(没这位dalao就没有现在我们用来上网的工具了)
  2. @mengskysama(貌似这位dalao好久没出现过了?最后一次对ss的commit也是在3月多
  3. @zuoruizhi(实际上API和OTA的功能都是这位dalao写的)
  4. 各位提交Pull Request的大佬们,不一一列出来了。

最后再说几句

我fork这个repo纯粹是为了娱乐顺带练手,我不对任何人使用这个工具做出的任何行为负责,我也不保证能够回答所有的issue但我会在我能力范围内尽力回复。如果你喜欢或者对你有帮助的话,请给我点一个星星:)

为了方便集中回答,如果有任何问题请到Gayhub Github提交issue,不要在这篇博文回复问我问题…

    • 无法关闭一次验证,但是你可以选择是否强制开启一次验证。

      默认情况下是兼容模式,就是客户端有没有开一次验证都可以连接服务器。你可以在配置文件里面改成强制启用,那样没开OTA的用户会没法连接服务器,开了的才可以。

      详细如何配置请参考config_example.py这个文件里面的注释。

    • 看你怎么用而已,至少按照当前的代码,使用数据库驱动的时候只提交总流量。使用API的话可以做到分节点流量控制/流量比例、服务器状态(CPU负载、在线用户数等)报告等额外的功能。

      使用的API接口是当前ss-panel V3的API接口。

      关于API如何使用请参照ss-panel V3源码。如何配置API客户端(即这个服务端)请参照config.py里面的注释。

    • 不是有个范例么…..

      比如你面板地址是http://example.com,那API地址应为http://example.com/mu。注意,HTTP和HTTPS要明确,用了301强制HTTPS的话务必在地址那填写HTTPS的地址。

      • 运行后出现
        Aug 27 06:16:26 INFO Now using MultiUser API as the user interface
        Aug 27 06:16:26 INFO Now starting manager thread…
        Aug 27 06:16:31 INFO Now starting user pulling thread…
        Aug 27 06:16:31 ERROR Except thrown while pulling user data:No JSON object could be decoded

        这个。。
        好像没有mu这个文件夹吧。。

        • MU不是个文件夹啊

          你目录下不是只有个index.php和downloads文件夹么,不存在的文件都重写给了index.php进行处理。

          检查伪静态是否正常。你可以用浏览器访问一下<你的站>/mu/users?key=<API KEY>进行测试。假如这都没法输出用户资料的话建议去SS-Panel的repo提交一个issue问一下。

          P.S. 注意一下,在config.py里面的API地址的mu后面是没有斜线的。就是只是http://example.com/mu而不是http://example.com/mu/

  1. Sep 16 14:51:30 INFO —————————————–
    Sep 16 14:51:30 INFO Multi-User Shadowsocks Server Starting…
    Sep 16 14:51:30 INFO Current Server Version: 3.1.1-12-g43249c6

    Sep 16 14:51:30 INFO Now using MySQL Database as the user interface
    Sep 16 14:51:30 INFO Now starting manager thread…
    Sep 16 14:51:35 INFO Now starting user pulling thread…
    Sep 16 14:51:35 INFO Server Added: P[1025], M[rc4-md5], E[[email protected]]
    Sep 16 14:51:36 INFO Server Added: P[1026], M[rc4-md5], E[[email protected]]
    Sep 16 14:51:40 INFO Now starting user pushing thread…

    您好 ,到执行python servers.py这里时,就一直停在 Sep 16 14:51:40 INFO Now starting user pushing thread…这一步不动了,请问这是什么原因?

  2. 用了CloudFlare的免费CDN,连接报错……

    Oct 09 09:02:49 INFO —————————————–
    Oct 09 09:02:49 INFO Multi-User Shadowsocks Server Starting…
    Oct 09 09:02:49 INFO Current Server Version: 3.1.1
    Oct 09 09:02:49 INFO Now using MultiUser API as the user interface
    Oct 09 09:02:51 ERROR db thread except:[Errno socket error] [Errno 1] _ssl.c:510: error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

    • 这个issue我看到了但是因为我暂时没时间去研究,所以没有回复。

      我这个后端是根据我当前用的SS-Panel的API进行编写的,我不清楚新版本的SS-Panel有何变化,正常按照兼容性来说SS-Panel作者(orvice)不应该对已有字段进行改动。这阵子比较忙没时间看,等我11月底有空了再看一下最近SS-Panel的commit。

  3. mengskysama 2年前的原版我还在用,但是那个版本有个很蛋疼的问题,在锐速加速后,cpu占用非常高,在你的最新版本下没有出现这个问题,我准备直接fork他的代码再去改,因为数据库结构不想更新到你的新版了。。。。不知道你是改了哪一块的代码修复的?

    • 我没变过数据库结构啊….
      我好像没修复过这个问题,说实在的我也不记得我改了哪些代码了不过核心那些代码我基本没怎么动过啊…你可以查一下我的commit历史。
      我从shadowsocks/shadowsocks更新过核心的代码,可能是原仓库修复了这些问题吧。
      我以前也用Mengskysama的原版,但是我好像没发现CPU占用高的问题。当前版本倒是有内存占用高的问题(AEAD那些代码有内存泄露)。

发表评论