科学上网

最近GFW抽风,去Google Scholar看篇文献费死劲,于是自己打了个梯子。为了方便自己和有需求的朋友们,写篇博文记录下。

首先看看需要什么

  • 联通的网络(电信、移动的自带墙就老老实实买ss吧)
  • VPS一台
  • 配置服务器/客户端Shadowsocks(梯子必须)
  • 配置服务器/客户端Finalspeed(加速器)

VPS

服务商选择

因为只是为了科学上网,我选择搬瓦工bandwagon,一年只要20美刀,流量够用、速度快、稳定。怎么买网上有很多教程就不多说了。我的机房选择洛杉矶,速度很快了。

系统选择

Ubuntu和CentOS均可,看自己喜好。我使用的是CentOS6 x86,因此下面配置针对CentOS讲(Ubuntu可以看官方教程,但是除了装库文件之外没什么区别)。

配置Shadowsocks

提醒!

搬瓦工支持一键ss,非常不推荐用,因为很可能无法使用。

配置

Shadowsocks有很多版本,我选择的是ShadowsocksR官方文档在这里。

基本库安装

1
yum install m2crypto git

为了使用高效的chacha20加密协议,安装libsodium

1
2
3
4
5
6
yum -y groupinstall "Development Tools"
wget https://github.com/jedisct1/libsodium/releases/download/1.0.8/libsodium-1.0.8.tar.gz
tar xf libsodium-1.0.8.tar.gz && cd libsodium-1.0.8
./configure && make -j2 && make install
echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig

获取源码

1
git clone -b manyuser https://github.com/breakwa11/shadowsocks.git

执行完毕后此目录会新建一个shadowsocks目录,其中根目录的是多用户版(即数据库版,个人用户请忽略这个),子目录中的是单用户版(即shadowsocks/shadowsocks)。

根目录即./shadowsocks

子目录即./shadowsocks/shadowsocks

服务器配置

建立配置文件 vi /etc/shadowsocks.json

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"server": "0.0.0.0",
"server_ipv6": "::",
"server_port": 8388,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "mypassword",
"timeout": 120,
"method": "aes-256-cfb",
"protocol": "auth_sha1_compatible",
"protocol_param": "",
"obfs": "tls1.0_session_auth_compatible",
"obfs_param": "",
"redirect": "",
"dns_ipv6": false,
"fast_open": false,
"workers": 1
}

一般情况下,只需要修改以下五项即可:

1
2
3
4
5
"server_port":8388,        //端口
"password":"password", //密码
"protocol":"origin", //协议插件
"obfs":"http_simple", //混淆插件
"method":"aes-256-cfb", //加密方式

如果要多个用户一起使用的话,请写入以下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"server":"0.0.0.0",
"server_ipv6": "[::]",
"local_address":"127.0.0.1",
"local_port":1080,
"port_password":{
"80":"password1",
"443":"password2"
},
"timeout":300,
"method":"aes-256-cfb",
"protocol": "auth_sha1_compatible",
"protocol_param": "",
"obfs": "tls1.0_session_auth_compatible",
"obfs_param": "",
"redirect": "",
"dns_ipv6": false,
"fast_open": false,
"workers": 1
}

Shadowsocks开启/停止

开始

1
python server.py -c /etc/shadowsocks.json -d start

如果要停止/重启:

1
python server.py -c /etc/shadowsocks.json -d stop/restart

为了方便在~/.bashrc写入别名,其中pwd

1
2
3
alias sstart='python pwd/server.py -c /etc/shadowsocks.json -d start'
alias sstop='python pwd/server.py -c /etc/shadowsocks.json -d stop'
alias srestart='python pwd/server.py -c /etc/shadowsocks.json -d restart'

自动开机脚本

以下启动脚本均假定shadowsocks-rss安装于/root/目录,配置文件为/etc/shadowsocks.json,请按照实际情况自行修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/sh
# chkconfig: 2345 90 10
# description: Start or stop the Shadowsocks R server
#
### BEGIN INIT INFO
# Provides: Shadowsocks-R
# Required-Start: $network $syslog
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start or stop the Shadowsocks R server
### END INIT INFO

# Author: Yvonne Lu(Min) <min@utbhost.com>

name=shadowsocks
PY=/usr/bin/python
SS=/root/shadowsocks/shadowsocks/server.py
SSPY=server.py
conf=/etc/shadowsocks.json

start(){
$PY $SS -c $conf -d start
RETVAL=$?
if [ "$RETVAL" = "0" ]; then
echo "$name start success"
else
echo "$name start failed"
fi
}

stop(){
pid=`ps -ef | grep -v grep | grep -v ps | grep -i "${SSPY}" | awk '{print $2}'`
if [ ! -z $pid ]; then
$PY $SS -c $conf -d stop
RETVAL=$?
if [ "$RETVAL" = "0" ]; then
echo "$name stop success"
else
echo "$name stop failed"
fi
else
echo "$name is not running"
RETVAL=1
fi
}

status(){
pid=`ps -ef | grep -v grep | grep -v ps | grep -i "${SSPY}" | awk '{print $2}'`
if [ -z $pid ]; then
echo "$name is not running"
RETVAL=1
else
echo "$name is running with PID $pid"
RETVAL=0
fi
}

case "$1" in
'start')
start
;;
'stop')
stop
;;
'status')
status
;;
'restart')
stop
start
RETVAL=$?
;;
*)
echo "Usage: $0 { start | stop | restart | status }"
RETVAL=1
;;
esac
exit $RETVAL

请将上述脚本保存为/etc/init.d/shadowsocks
并执行

1
chmod 755 /etc/init.d/shadowsocks && chkconfig --add shadowsocks && service shadowsocks start

客户端配置

打开服务器设定

1

添加服务器填写服务器ip、端口和密码,选择加密协议(和在服务器配置匹配)

2

配置Finalspeed

服务器

注意

如果修改了ssh默认端口,先开发ssh端口。方法如下:

1
2
3
4
service iptables start
iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 端口号 -j ACCEPT
service iptables save

安装

1
2
3
4
rm -f install_fs.sh
wget http://fs.d1sm.net/finalspeed/install_fs.sh
chmod +x install_fs.sh
./install_fs.sh 2>&1 | tee install.log

启动/停止

启动

1
sh /fs/start.sh

停止

1
sh /fs/stop.sh

开机自启

/etc/rc.local加入sh /fs/start.sh

1
2
chmod +x /etc/rc.local
vi /etc/rc.local

客户端

客户端

配置

  1. 运行FinalSpeed客户端,填写服务器地址。

  2. 点击添加,增加加速端口,加速端口为ss端口8989,如果为其他端口,请相应修改,本地端口任意,这里是2000。

  3. 打开ss客户端,添加服务器,服务器IP为127.0.0.1,服务器端口为加速端口对应的本地端口,这里是2000,然后设置你的ss密码,加密方式。

  4. 确定保存,选择使用刚添加的服务器,并设置浏览器代理,成功连接后,FinalSpeed状态栏会出现”连接服务器成功”提示。

    3

    4

关于UDP和TCP

为了方便小白稍微解释一下。

  1. UDP和TCP尽量选TCP,因为UDP容易被服务商给限制,TCP长久使用质量更好。但是,搬瓦工的服务器因为架构的原因只能选择UDP。
  2. Mac端双击打开客户端的方式只能使用UDP,想要使用TCP需要超级权限,即在命令行进入客户端目录,使用命令sudo java -jar finalspeed_client.jar