前言:Shadowsocks-libev是一款安全、轻量和快速的代理协议。它是由clowwindy发明,后同很多技术大牛一起开发,原作者被喝茶以后,因为项目是开源的,所以很多人fork后继续开发,现在主要由madeye负责更新维护。shadowsocks注重加密,数据包几乎没有特征,而shadowsocksr注重混淆,倾向无加密化,现在已经停更,所以不再推荐使用。之前的simple-obfs插件已经弃更,在github项目里也被标识为不推荐使用,转之项目维护者推荐使用shadowsocks-libev+v2ray-plugin插件。
本文会知无不言地介绍一下使用秋水逸冰为之制作的docker镜像快速部署shadowsocks-libev+v2ray-plugin,主要介绍ws和ws+tls模式。
说明:本文使用到的各种资源都是各位技术大牛们敲代码洒下汗水一点点换来的,在此对各位用爱发电的大佬们表示感谢!
条件准备:
- 一台墙外VPS
- 一台安装好SSH客户端的PC电脑
- 只用ws就不用域名,加tls就需要准备一个域名
- 注册好Cloudflare账号
- 一位会使用基本的Linux命令的自然人
一、安装docker
1.1 以root用户登录,执行一键脚本安装docker
1
2
3apt-get update && apt-get install -y wget vim //以Debian系为例,升级源并安装软件
wget -qO- get.docker.com | bash //执行此命令等候自动安装docker
说明:推荐使用KVM架构的VPS,OpenVZ架构的VPS不支持安装docker,另外CentOS8好像还不受此脚本支持来安装docker。
1.2 对docker的一些命令操作
1 | docker version //查看docker安装版本等信息 |
二、用docker部署shadowsocks-libev+v2ray-plugin(ws类型,不用域名)
2.1 创建配置文件
1 | mkdir /etc/shadowsocks-libev //在/etc目录下创建shadowsocks-libev目录 |
说明:
server
后面默认填0.0.0.0
,请不要修改。关于更多参数用法和说明请参考:这个链接
值得注意的是:如果你配置文件里
"plugin_opts":"server;mux=0"
这样配置,那么你可以使用Quantumult X来添加节点使用。2.2 用docker结合上面的配置文件创建并启动容器
1
docker run -d --name ss-libev --restart always -p 9000:9000 -p 9000:9000/udp -v /etc/shadowsocks-libev:/etc/shadowsocks-libev teddysun/shadowsocks-libev
docker run:开始运行一个容器
-d 参数:容器以后台运行并输出容器ID
—name 参数:给容器分配一个识别符,方便将来的启动,停止,删除等操作
—restart 参数:配置容器启动类型,always即为docker服务重新启动时自动启动本容器
-p 参数:容器的9000端口映射到本机的9000端口。默认是TCP映射,当需要UDP映射时候,那就再追加一次UDP的映射。冒号后面是容器端口,冒号前面是宿主机端口,可以写成一致,也可以写成不一致
-v 参数:挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径,可以写成一致,也可以写成不一致
teddysun/shadowsocks-libev:这是从docker拉取回来的镜像路径
2.3 后期容器处理常用命令
记前面
docker run
后面--name ss-libev
中的ss-libev
为$name
,其代表容器识别符,也就是$name=ss-libev
。1
2
3
4
5
6
7
8
9
10
11docker ps -as //查看容器在线状态及大小,在这里你一般可以看到$name=ss-libev
docker logs $name //查看此容器的运行输出日志
docker restart $name //重新启动容器,一般在修改除端口外的配置后使用使修改生效
docker stop $name //停止此容器的运行
docker rm $name //移除此容器
docker stats --no-stream //查看docker容器占用CPU,内存等信息
三、用docker部署shadowsocks-libev+v2ray-plugin(ws+tls类型,需要域名)
3.1 用acme.sh脚本申请证书
关于这个,之前专门水过一篇文章:用acme.sh脚本申请证书并自动续更 ,还请麻烦前往查看,下面默认你已经获取到Clouflare api key
,并且也已经安装好acme.sh
脚本。
3.2 安装证书到放置ss配置文件的目录
假设你的是域名是mydomain.me
,且已经在Cloudflare
上设置好A记录解析
1 | kdir /etc/ssplugin && cd /etc/ssplugin //创建目录并切换至此 |
3.3 创建配置文件
1 | cd /etc/ssplugin //其实上一步之后应该就是在这个目录里了 |
说明:server后面的 0.0.0.0 不要修改,plugin_opts后面的证书位置配置也不要修改,尽管你证书明明是放在 /etc/ssplugin 目录下,尽管你宿主机里没有创建 /etc/shadowsocks-libev 目录,这里cert和key的路径是写死的,当然证书名是要根据你上一步生成的。
3.4 用docker配合配置文件创建并启动容器
1 | docker run -d --name ss-plugin --restart always -p 9000:9000 -p 9000:9000/udp -v /etc/ssplugin:/etc/shadowsocks-libev teddysun/shadowsocks-libev |
- docker run:开始运行一个容器
- -d 参数:容器以后台运行并输出容器ID
- —name 参数:给容器分配一个识别符,方便将来的启动,停止,删除等操作
- —restart 参数:配置容器启动类型,always即为docker服务重新启动时自动启动本容器
- -p 参数:容器的9000端口映射到本机的9000端口。默认是TCP映射,当需要UDP映射时候,那就再追加一次UDP的映射。冒号后面是容器端口,冒号前面是宿主机端口,可以写成一致,也可以写成不一致
- -v 参数:挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径,可以写成一致,也可以写成不一致
- teddysun/shadowsocks-libev:这是从docker拉取回来的镜像路径
3.5 后期docker容器常用处理命令
记前面docker run
后面--name ss-plugin
中的ss-plugin
为$name
,其代表容器识别符,也就是$name=ss-plugin
。1
2
3
4
5
6
7
8
9
10
11docker ps -as //查看容器在线状态及大小,在这里你一般可以看到$name=ss-plugin
docker logs $name //查看此容器的运行输出日志
docker restart $name //重新启动容器,一般在修改除端口外的配置后使用使修改生效
docker stop $name //停止此容器的运行
docker rm $name //移除此容器
docker stats --no-stream //查看docker容器占用CPU,内存等信息
四、用docker部署shadowsocks-libev+v2ray-plugin(ws+caddy提供的tls,可选套cdn)
4.1 证书安装情况跟上面一致
这种方式是受推荐使用的,也是借鉴v2ray安装ws+tls而来。其中申请证书什么的跟上面一致,请参考:这个链接。
基于此,下面默认你已经为mydomain.me
申请好证书放置在/root/.acme.sh
内部目录下,但还没安装证书到哪个位置。
4.2 创建ss的配置文件
1 | mkdir /etc/ssplugin && cd /etc/ssplugin //创建目录并切换至此 |
说明:因为要监听本地,所以server后面地址填127.0.0.1,所以9000端口不对外开放,此处只是在ws的配置上加了个path参数,tls要由后面的caddy来支持。
4.4 安装caddy
执行下面一条命令安装caddy
,也就是以个人身份申请使用caddy
的二进制,并把它放到/usr/local/bin
目录下
1 | cd /root //切换到/root目录 |
说明:如果你用的Centos7安装到这一步了,执行完上面的命令会有报错,你可以先 ls /usr/local/bin
先查看下caddy的二进制有没有下载到本地了,如果有的话,那么执行下caddy你可能会遇到command not found
的反馈结果,原因应该是上面这个安装脚本在Centos7下没法把caddy所在的路径/usr/local/bin
加入到环境变量里,那么解决办法有两个。
1 | 第一:在4.7使用 nohup /usr/local/bin/caddy -conf /root/caddy/Caddyfile & 避免报错。 |
4.5 配置caddy证书
1 | mkdir caddy && cd caddy //在/root目录下创建caddy目录并切换至此 |
4.6 创建caddy主配置文件Caddyfile
1 | vim Caddyfile //创建文件并开始编辑 |
说明:此处只需要关注路径和端口号,9000
是你/etc/ssplugin/config.json
目录下配置的,/ray
是你这个文件内plugin_opts
后面的path=/ray
,请注意替换。
4.7 让caddy搭配Caddyfile文件运行起来
1 | nohup caddy -conf /root/caddy/Caddyfile & //让caddy在后台运行起来 |
4.8 开启Cloudflare的CDN保护,开启SSL/TLS的Full模式
值得注意的是:使用ss-libev+ws+tls
,能否套CDN
并不依赖web
服务器,就像如果是第二种配置,没有使用caddy,配置文件里直接配置证书和key路径的那种,你可以设置特殊端口,比如443和8443,这些端口的https流量是可以经cloudflare转发的。但是使用web服务器也可以套CDN,而且伪装的比较好,可能就是稍微有些麻烦吧。
五、客户端配置
5.1 Win端
先到这个链接下载v2ray-plugin-windows-amd64的包
下载完成后解压到shadowsocks-windows的目录下
重命名为v2ray-plugin.exe文件
插件程序:v2ray-plugin
如果选的是第一种,
v2ray-plugin
的ws类型,插件选项这里可以留空如果选的是第二种,v2ray-plugin的
ws+tls
类型,插件选项这里填tls;host=mydomain.me
如果选的是第三种,v2ray-plugin的
ws+caddy
提供的tls类型,插件选项这里填tls;host=mydomain.me;path=/ray
。第三种配置建议是开启CDN,然后本地配置两个节点,服务器那里写IP就是
ss+ws+tls
,写域名就是ss+ws+tls+cdn
。值得注意的是:如果你这么设置
"plugin_opts":"server;mux=0"
,你就可以使用Quantumult X来使用这个节点,但win端不能直接使用了。5.2 Android端
先到这个链接下载插件并安装
其余的配置都跟上面win端一致5.3 ios端
请使用
Shadowrocket
,也就是俗称的小火箭,配置添加使用。
原文链接:https://ssu.tw/index.php/archives/31/
参考链接:
github上shadowsocks-libev项目开源地址
github上v2ray-plugin插件项目开源地址
github上simple-obfs插件项目开源地址
github上docker项目开源地址
github上Neilpang关于acme.sh证书申请脚本项目开源地址
秋水逸冰“介绍几款Docker镜像”文章
秋水逸冰发布shadowsocks-libev docker镜像地址
shadowsocks官网地址介绍
V2Ray白话文配置教程