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

操作系统: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一下,也欢迎把具体的解决方法留在评论区,以供后来者参考

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

参考:

5 thoughts on “shadowsocks多用户科学上网并实现流量控制

发表评论

电子邮件地址不会被公开。

*

code