此前写过一个「CentOS6零基础配置shadowsocks服务端完整教程」,但随着软件更新与完善以及某些干扰的加剧,原教程已不再适用,为避免原来那篇一些过时的操作影响需要教程辅助安装的朋友,在此做一些更新。此外,由于博主已从CentOS切换到Debian,以及CentOS操作对新手不甚友好,本教程以bandwagonhost最小安装的Debian8为例,同时补充CentOS对应步骤操作,因CentOS一些软件包的版本较旧可能会撞坑,欢迎在评论中提出以完善教程。
出于安全性考虑,本教程只基于官方教程补充一些细节帮助理解,不会涉及任何一键包。
另外不建议使用一键脚本安装,除非你自己能维护其功能,否则安装时若出了问题很难查,而且现在有不少不明来历的一键脚本内嵌后门程序。
此教程为单用户版,配置最为简单,适合个人用户。本教程包含部分教程忽略的性能优化、自启动、更新服务端内容,欢迎有需要的用户浏览。
ShadowsocksR是@breakwa11基于原版协议fork,增加了流量混淆功能降低流量特征以获得更好的稳定性(注意不是加速),该服务端兼容原版协议,混淆模式在各个平台上已有较全面支持,推荐开启混淆选项。
项目主页:https://github.com/shadowsocksr-backup/
各平台客户端:
Android:SSR-android;iOS :Shadowrocket;
Windows:shadowsocksr-csharp;macOS:ShadowsocksX-NG、ShadowsocksX-R
此处只会涉及一些适合个人使用的服务商(美国服务器推荐选西海岸城市机房),线路质量可能较差,如果对线路质量与安全性有较高要求,可考虑使用Azure国际版,当然使用成本也比较高了。此外,目前中国电信限制了家庭宽带用户的国际出口,如果对速度有较高要求,推荐办理联通宽带(实在不行移动也行)。
Linode:https://www.linode.com/
即博主博客使用的服务商,随着竞争激烈曾经高高在上的Linode价格也被拉下,老东京机房KDDI线路表现不错但经常没货,新加坡机房电信表现一般,支持Paypal。
bandwagonhost:https://bandwagonhost.com/
俗称搬瓦工官网已被认证,国内访问可使用镜像域名 https://bwh1.net/,线路质量一般但胜在便宜,支持Paypal与支付宝付款。
BudgetVM:https://www.budgetvm.com/
常年有便宜的OpenVZ VPS销售,时不时还有实惠的优惠券,支持Paypal与支付宝付款。
DigitalOcean:https://www.digitalocean.com/
曾经号称Linode的挑战者,新加坡机房电信速度较慢,支持Paypal。
OneAsiaHost:https://www.oneasiahost.com/
新加坡服务商,仅限OVZ SSD VPS值得购买,PCCW连国内表现不错,支持Paypal。
接下来开始正式开始教程了_(:з」∠)_
以下步骤均以root用户执行,非root用户可su root或在命令前加“sudo ”执行。
一、准备工作
1、从服务商获取服务器IP、SSH端口(默认为22,部分服务商如板瓦工为随机端口)、root密码(部分服务商如Azure不提供root用户登陆)。
2、下载SSH客户端如putty连接所购买VPS,具体操作可自行搜索。
3、执行以下命令(一行一行执行,复制命令后在putty窗口中鼠标右键即可粘贴)先更新一下以免出错,再安装git。
Debian/Ubuntu:
apt-get update apt-get install git
CentOS/RHEL:
yum update all yum install git
二、获取源代码
通过git获取ShadowsocksR源代码:
git clone -b manyuser https://github.com/shadowsocksr-backup/shadowsocksr.git
执行完毕后当前目录会出现一个shadowsocksr目录,其中根目录的是多用户版(即数据库版,个人用户请忽略这个),子目录中的是单用户版(即shadowsocksr/shadowsocks,即本次教程所讲的地方)。若当前在/root目录内,则根目录为 /root/shadowsocksr 子目录为 /root/shadowsocksr/shadowsocks。
如果不确定当前在什么目录的话可以通过“pwd”命令查看当前路径,比方说以下情况:
root@SS-LA5:~# pwd /home/q1ngyang
大致界面如上,可得知当前在/home/q1ngyang目录,则根目录为 /home/q1ngyang/shadowsocksr 子目录为 /home/q1ngyang/shadowsocksr/shadowsocks
三、服务端配置
1、进入根目录初始化配置(假设根目录在/root/shadowsocksr,如果不是,命令需要适当调整):
cd /root/shadowsocksr //进入根目录 bash initcfg.sh //初始化配置
2、[可选]开启FastOpen性能优化
开启FastOpen可以获取更好性能,此步骤使用OpenVZ虚拟技术的VPS请忽略,上面列举服务商中Linode和DigitalOcean用户使用最新版本系统可考虑开启。
使用“uname -a”命令查看内核版本,需要Linux内核版本3.7.1以上,低于该版本无法开启。
root@SS-LA5:~# uname -a //查看内核版本 Linux SS-LA5 4.9.0-x86_64-linode79 #1 SMP Mon Dec 12 13:17:30 EST 2016 x86_64 GNU/Linux
创建/etc/sysctl.d/local.conf文件并编辑
touch /etc/sysctl.d/local.conf //创建文件 vi /etc/sysctl.d/local.conf 编辑文件
将以下内容粘贴到刚刚创建的文件中,vi按“i”进入编辑模式,编辑完成后按“Esc”退出编辑模式,按“Shift”和“:”键进入命令模式,输入“wq”即可保存退出(“q!”为不保存退出)。
# max open files fs.file-max = 51200 # max read buffer net.core.rmem_max = 67108864 # max write buffer net.core.wmem_max = 67108864 # default read buffer net.core.rmem_default = 65536 # default write buffer net.core.wmem_default = 65536 # max processor input queue net.core.netdev_max_backlog = 4096 # max backlog net.core.somaxconn = 4096 # resist SYN flood attacks net.ipv4.tcp_syncookies = 1 # reuse timewait sockets when safe net.ipv4.tcp_tw_reuse = 1 # turn off fast timewait sockets recycling net.ipv4.tcp_tw_recycle = 0 # short FIN timeout net.ipv4.tcp_fin_timeout = 30 # short keepalive time net.ipv4.tcp_keepalive_time = 1200 # outbound port range net.ipv4.ip_local_port_range = 10000 65000 # max SYN backlog net.ipv4.tcp_max_syn_backlog = 4096 # max timewait sockets held by system simultaneously net.ipv4.tcp_max_tw_buckets = 5000 # turn on TCP Fast Open on both client and server side net.ipv4.tcp_fastopen = 3 # TCP receive buffer net.ipv4.tcp_rmem = 4096 87380 67108864 # TCP write buffer net.ipv4.tcp_wmem = 4096 65536 67108864 # turn on path MTU discovery net.ipv4.tcp_mtu_probing = 1 # for high-latency network # net.ipv4.tcp_congestion_control = hybla # for low-latency network, use cubic instead # net.ipv4.tcp_congestion_control = cubic
执行以下命令,使配置生效
sysctl --system
3、编辑配置文件
执行以下“ls”命令查看目录内文件,可以看到配置文件“user-config.json”
root@SS-LA5:~/shadowsocksr# ls CHANGES config.json mujson_mgr.py tail.sh CONTRIBUTING.md configloader.py mysql.json tests Dockerfile db_transfer.py run.sh user-config.json LICENSE debian server.py userapiconfig.py MANIFEST.in importloader.py server_pool.py usermysql.json README.md initcfg.bat setup.py utils README.rst initcfg.sh shadowsocks apiconfig.py logrun.sh stop.sh asyncmgr.py mudb.json switchrule.py
使用vi编辑配置文件
vi user-config.json
参考//后注释编辑配置文件,vi按“i”进入编辑模式,编辑完成后按“Esc”退出编辑模式,按“Shift”和“:”键进入命令模式,输入“wq”即可保存退出(“q!”为不保存退出)。
{ "server": "0.0.0.0", "server_ipv6": "::", "out_bind":"0.0.0.0",//输入服务器IPV4地址,只有一个可留空此行 "out_bindv6":"::",//输入服务器IPV6地址,只有一个或没有IPV6地址可留空此行 "server_port": 1984,//服务器端口,根据需要在1-65535之间选择即可 "local_address": "127.0.0.1", "local_port": 1080, "password": "q1ngyang",//输入想要的加密密码 "method": "rc4-md5",//推荐使用rc4-md5,速度较快 "protocol": "auth_sha1_v4_compatible",//推荐,末尾“_compatible”为开启原版协议兼容 "protocol_param": "", "obfs": "tls1.2_ticket_auth_compatible",//推荐,末尾“_compatible”为开启原版协议兼容 "obfs_param": "", "speed_limit_per_con": 0, "speed_limit_per_user": 0, "additional_ports" : {}, // only works under multi-user mode "timeout": 120, "udp_timeout": 60, "dns_ipv6": false,//优先使用IPV6,若需要则改为true "connect_verbose_info": 0, "redirect": ["amazon.com", "incapsula.com:443"],//连接参数不正确时重定向,避免服务器被认证 "fast_open": false//若通过之前步骤开启了fastopen,则改为true }
以上为最基本的配置方式,如有更多需求,可以参照以下页面修改:
ShadowsocksR 协议插件文档:https://github.com/breakwa11/shadowsocks-rss/blob/master/ssr.md
配置文件各项说明:https://github.com/breakwa11/shadowsocks-rss/wiki/config.json
四、运行服务端
1、前往子目录/root/shadowsocksr/shadowsocks
cd /root/shadowsocksr/shadowsocks
2、操作ShadowsocksR命令
python server.py //在前台运行(一般不这么用) python server.py -d start //后台启动 python server.py -d stop //停止运行 python server.py -d restart //重新启动
五、更新服务端
ShadowsocksR会定期更新一些新特性或修复BUG,如果当前使用遇到问题或者想体验新功能,可以定期手动更新服务端。
cd /root/shadowsocksr //进入主目录 git pull //更新文件,成功后重启服务端 python /root/shadowsocksr/shadowsocks/server.py -d restart //重启服务端
至此,ShadowsocksR服务端部署常规部分完毕,通过以上教程可正常使用。如果觉得上述命令太麻烦或者每回都要开机启动不方便的话可进行以下步骤。
六、添加开机自启动
以下启动脚本均假定Python port of ShadowsocksR安装于/root/shadowsocksr目录,配置文件为/root/shadowsocksr/user-config.json,请按照实际情况自行修改。
先关闭ShadowsocksR,然后创建/etc/init.d/shadowsocks文件并编辑
python /root/shadowsocksr/shadowsocks/server.py -d stop //关闭ShadowsocksR touch /etc/init.d/shadowsocks //创建文件 vi /etc/init.d/shadowsocks //编辑文件
使用以下SysVinit启动脚本,适合CentOS/RHEL6系以及Ubuntu 14.x,Debian7.x以上版本。
#!/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/shadowsocksr/shadowsocks/server.py SSPY=server.py conf=/root/shadowsocksr/user-config.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
保存后执行以下命令:
Debian/Ubuntu:
chmod 755 /etc/init.d/shadowsocks ; update-rc.d shadowsocks defaults ; service shadowsocks start
CentOS/RHEL:
chmod 755 /etc/init.d/shadowsocks && chkconfig --add shadowsocks && service shadowsocks start
执行成功后可以开机自起,不用每次都手动启动服务端。
此外,还可以通过以下命令,在任意目录中操作ShadowsocksR
service shadowsocks start //启动 service shadowsocks stop //停止 service shadowsocks restart //重启 service shadowsocks status //查看状态
文章评论