shadowsocks多用户科学上网并实现流量控制

目录
    本文上次更新于 1822 天前,其内容可能已经过时,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

    操作系统:Debain 7


    2018-12-30更新,每天每隔6小时重启shadowsocks


    2018-10-1更新,增加对ipv6的支持


    首先,你得有一台能访问外网的vps,假设你已经有了。如果没有的话,可以看这里,然后安装上操作系统。然后,安装python-pip

    su root
    输入密码
    apt-get install python-pip
    pip install shadowsocks

    小提示:在国内使用pip时可以使用

    pip install -i 国内源(如http://pypi.douban.com/simple/)模块名

    加速下载。如果提示需要升级,则根据提示的命令升级即可,如果此过程有其它错误,可上网搜一下解决方案。然后在/etc/目录下新建一个shadowsocks.json文件

    vim /etc/shadowsocks.json

    里面填入下面的内容

    {
        "fast_open": "false", 
        "local_address": "127.0.0.1", 
        "local_port": 1080, 
        "method": "rc4-md5", 
        "port_password": {
            "8381": “passwd1”, 
            "8382": "passwd2"
        }, 
        "server": "xxx.xxx.xxx.xxx", 
        "timeout": 300
    }

    xxx.xxx.xxx.xxx为你服务器的ip,如果只需要一个账号,把8382那行删除,并且把上一行最后面的逗号删除,如果需要添加多个账号,在8382后面添加上逗号(注意中英文),并在8382下面一行以同样的方式添加一行,注意最后一个不需要逗号。8381,8382是自己设置的端口,可以自己随便换,但是范围要在1024-65535,1024以下的默认是给系统用的,但是也最好别和这些相同 。然后让这段程序在后台执行。

    ssserver -c /etc/shadowsocks.json -d start

    如果启动失败,请仔细检查shadowsocks.json里面的内容是否写错。如果此过程如果报错信息跟下面类似

    INFO: loading config from ss.json   
    2016-12-14 22:47:50 INFO loading libcrypto from libcrypto.so.1.1   
    Traceback (most recent call last):   
    File “/usr/local/bin/sslocal”, line 11, in   
    sys.exit(main())   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/local.py”, line 39, in main   
    config = shell.get_config(True)   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 262, in get_config   
    check_config(config, is_local)   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py”, line 124, in check_config   
    encrypt.try_cipher(config[‘password’], config[‘method’])   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 44, in try_cipher   
    Encryptor(key, method)   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 83, in init   
    random_string(self._method_info[1]))   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py”, line 109, in get_cipher   
    return m[2](method, key, iv, op)   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py”, line 76, in init   
    load_openssl()   
    File “/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py”, line 52, in load_openssl   
    libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)   
    File “/usr/lib/python2.7/ctypes/init.py”, line 375, in getattr   
    func = self.getitem(name)   
    File “/usr/lib/python2.7/ctypes/init.py”, line 380, in getitem   
    func = self._FuncPtr((name_or_ordinal, self))   
    AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup 

    请参考这里。然后,我们把上面那个命令加入到开机自启中。我介绍两种方法。其中一种就是往/etc/rc.local这个文件中写入开机需要执行的命令。但是有可能在/etc/下面并没有rc.local这个文件。我们可以手动添加。(Debian 7有而Debian 9没有,大多数最新的发行版都没有了rc.local这个文件,而稍微老一点的都有这个文件)

    cd /etc/
    vim rc.local

    然后添加下面的内容

    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    exit 0

    再给它增加可执行的权限

    chmod a+x /etc/init.d/rc.local

    启动

    systemctl daemon-reload
    systemctl start rc-local

    如果提示conmand not found,执行

    apt-get install systemd

    Debian默认是没有sudo的,为此,我们可以安装sudo

    apt-get install sudo

    然后在rc.localexit 0前面写入

    sudo /usr/local/bin/ssserver -c /etc/shadowsocks.json -d start

    另一种方法是:将shadowsocks脚本放到/etc/init.d/下,并在开机时自动启动。

    vim /etc/init.d/shadowsocks

    里面加入下面内容

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          shadowsocks
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: start shadowsocks 
    # Description:       start shadowsocks
    ### END INIT INFO
    
    start(){
        sudo /usr/local/bin/ssserver -c /etc/shadowsocks.json -d start
    }
    
    stop(){
        sudo /usr/local/bin/ssserver -c /etc/shadowsocks.json -d stop
    }
    
    case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
         stop
         start
         ;;
    *)
        echo "Usage: $0 {start|reload|stop}"
        exit 1
        ;;
    esac
    
    

    增加执行权限

    chmod a+x shadowsocks

    然后执行

    cd /etc/init.d/
    update-rc.d shadowsocks defaults

    如果没错误的话,在/etc/init.d/rc3.d/应该有一个以S开头,含有shadowsocks的文件。现在,开机应该会自动启动shadowsocks,我们可以重启之后使用

    ssserver -c /etc/shadowsocks.json -d start

    查看是否开机自启了。注意:请用sudo,或者su的身份执行上面的命令。如果出现

    ERROR       already start at pid xx

    则说明shadowsocks已经开机自启了。


    2018-12-30更新 每隔6小时重启shadowsocks,避免由于开机无法自己启动,以管理员权限编辑/etc/crontab文件

    vim /etc/crontab

    在里面加入如下内容

    0 0 * * * root ssserver -c /etc/shadowsocks.json -d resrart
    0 6 * * * root /usr/local/bin/ssserver -c /etc/shadowsocks.json -d resrart
    0 12 * * * root /usr/local/bin/ssserver -c /etc/shadowsocks.json -d resrart
    0 18 * * * root /usr/local/bin/ssserver -c /etc/shadowsocks.json -d resrart

    2018-10-1更新

    对于教育网用户来说,通常只是对ipv4流量收费,每个月20G看看直播就没了,而ipv6免费,因此我们可以用我们的服务器(要有ipv6地址)进行中转,进而实现校园网免流。这是利用ss中转实现免流的原理(见part0部分)。首先,测试你的网络是否支持ipv6。如不支持,那么这部分对你而言就没有什么用处了。其次,需要vps要有ipv6地址,对于搬瓦工而言,kvm架构的是没有ipv6地址的,可以按这个教程让搬瓦工具有ipv6地址。最后,只需要将上文配置文件中的

    "server":"xxx.xxx.xxx.xxx",

    改为

    "server":"::",

    即可,就能实现同时对ipv4和ipv6同时监听,然后重启ss

    ssserver -c /etc/shadowsocks.json -d restart

    要使用ipv6访问我们的服务器,从而实现免流,我们只需要将后面配置文件中的ipv4地址改为ipv6地址即可,若是手机版的shadowsocks,若需要访问纯ipv6网站(如北邮人,六维空间不支持国外ipv6访问)还要将ipv6路由勾上,并将路由改为全局。


    接下来就是多用户流量管理,首先查看是否安装了git

    git --version

    如果没有

    apt-get install git

    安装bsp

    git clone https://github.com/edboffical/bsp.git
    cd bsp
    chmod 775 install
    ./install

    运行 bsp --version,显示版本号,则安装成功。接下来,修改配置文件

    vim /etc/byte/byte_ss.json

    里面的内容如下

    {
        "port_limit": {
            "8381": "1000", 
            "8382": "1000"
        }, 
        "ress_cmd": "ssserver -c /etc/shadowsocks.json -d restart", 
        "ssconf_path": "/etc/shadowsocks.json", 
        "update_time": "3600"
    }

    很容易看出 ssserver -c /etc/shadowsock.json -d restart 就是重启shadowsocks的命令,/etc/shadowsocks.json就是配置文件所在位置。上述意思就是当端口8381的流量或者8382的流量超过1000m时,自动执行shadowsocks重启命令,并会删除配置文件shadowsocks.json中的8381,8382两个端口所在那一行,每隔3600s执行一次检测,这样,便实现了多用户流量控制。请务必至少保留一个端口。然后,启动

    bsp -r 
    bsp --start

    可以先把限制设置小一点,测试是否有效果,如果没有效果,试试在配置文件中的ssserver前面加入sudo试试,然后把这个动作写到开机启动中。

    vim /etc/rc.local

    sudo /usr/local/bin/ssserver -c /etc/shadowsocks.json -d start后面加入

    sudo bsp -r
    sudo bsp --start

    本人在测试时将bsp -r 删掉,发现开机时无法执行bsp --start这条命令
    这时服务器上的工作基本就算完了,接下来就是在客服端做相关配置。

    shadowsocks下载地址
    安卓
    windows
    ios
    图形化的设置很简单,不多说了,可以参考这里
    说一下,Linux下的配置,同服务器一样,安装好shadowsocks,将

    sslocal -s xxx.xxx.xxx.xxx-p 8382 -k "passwd" -l 1080 -t 600 -m rc4-md5

    写到一个脚本里面,并增加执行(x)权限,请将上面的换相关的东西换成你自己的配置。加入到rc.local中或者在图形界面设置里面找到开机自启项,将这个脚本添加到里面。

    最后是Linux浏览器的设置,在chrome里面,先找一个免费的vpn挂上,搜索插件SwitchyOmega
    设置如下rules list url :https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

    然后点击Download Profile Now,再Applay changes即可,上网时选择Auto-Switch即可实现自动翻墙

    如果在这个过程中遇到了其它问题,欢迎在评论区留言,或者Google一下,也欢迎把具体的解决方法留在评论区,以供后来者参考

    欢迎转载,不需注明出处,就说是你写的

    参考:

    如果在这个过程中遇到了其它问题,欢迎在评论区留言,如果你已解决,也欢迎把具体的解决方法留在评论区,以供后来者参考
    ×

    感谢您的支持,请扫码打赏

    微信打赏 支付宝打赏
    guest
    5 评论
    内联反馈
    查看所有评论
    ThomastwicE

    Приветик всем, я тут новенький “352”

    BillyJuilt

    всем привет 789

    rardSmuff

    hi 🙂 bross 🙂

    rardSmuff

    i am from Italy hello. Can you help me translate? /rardor