使用docker快速部署shadowsocks-libev+v2ray-plugin代理 多种方法/域名 TLS CDN自己决定

搬瓦工机场JMS

前言: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

apt-get update && apt-get install -y wget vim //以Debian系为例,升级源并安装软件
yum -y install wget  // Centos 7命令

wget -qO- get.docker.com | bash //执行此命令等候自动安装docker

说明:推荐使用KVM架构的VPS,OpenVZ架构的VPS不支持安装docker,另外CentOS8好像还不受此脚本支持来安装docker。

1.2 对docker的一些命令操作

docker version //查看docker安装版本等信息

systemctl start docker //启动docker服务

systemctl status docker //查看docker运行状态

systemctl enable docker //将docker服务加入开机自启动

二、用docker部署shadowsocks-libev+v2ray-plugin(ws类型,不用域名)

2.1 创建配置文件

mkdir /etc/shadowsocks-libev //在/etc目录下创建shadowsocks-libev目录

cd /etc/shadowsocks-libev //工作空间切换至此

vim config.json //创建并开始编辑名为config.json的配置文件

//下为配置文件示例,请添加至文件
{
"server":"0.0.0.0",
"server_port":9000,
"method":"aes-256-gcm",
"timeout":300,
"password":"password0",
"fast_open":false,
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp",
"plugin":"v2ray-plugin",
"plugin_opts":"server"
}
//上为配置文件示例,添加至文件后保存并退出

说明:server后面默认填0.0.0.0,请不要修改。
关于更多参数用法和说明请参考:这个链接
值得注意的是:如果你配置文件里"plugin_opts":"server;mux=0"这样配置,那么你可以使用Quantumult X来添加节点使用。

2.2 用docker结合上面的配置文件创建并启动容器

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

docker 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记录解析

mkdir /etc/ssplugin && cd /etc/ssplugin //创建目录并切换至此

export CF_Key="slfjksjffjfhfhkjhfksjf" //此处替换成你自己的Key
export CF_Email="[email protected]" //此处填写你注册Cloudflare使用的邮箱账号

acme.sh --issue --dns dns_cf -d mydomain.me -k ec-256 //用脚本申请证书

acme.sh --installcert -d mydomain.me --fullchain-file /etc/ssplugin/plugin.crt --key-file /etc/ssplugin/plugin.key --ecc //安装证书到/etc/ssplugin目录下

3.3 创建配置文件

cd /etc/ssplugin //其实上一步之后应该就是在这个目录里了

vim config.json //创建并开始编辑配置文件

//下面是配置文件示例
{
"server":"0.0.0.0",
"server_port":9000,
"password":"password0",
"timeout":300,
"method":"aes-256-gcm",
"fast_open":false,
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp",
"plugin":"v2ray-plugin",
"plugin_opts":"server;tls;host=mydomain.me;cert=/etc/shadowsocks-libev/plugin.crt;key=/etc/shadowsocks-libev/plugin.key"
}
//上面是配置文件示例,请添加至文件后保存并退出。

说明:server后面的 0.0.0.0 不要修改,plugin_opts后面的证书位置配置也不要修改,尽管你证书明明是放在 /etc/ssplugin 目录下,尽管你宿主机里没有创建 /etc/shadowsocks-libev 目录,这里cert和key的路径是写死的,当然证书名是要根据你上一步生成的。

3.4 用docker配合配置文件创建并启动容器

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

docker 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的配置文件

mkdir /etc/ssplugin && cd /etc/ssplugin //创建目录并切换至此

vim config.json //创建并开始编辑config.json配置文件

//下面是配置文件示例,请添加至文件
{
"server":"127.0.0.1",
"server_port":9000,
"method":"aes-256-gcm",
"timeout":300,
"password":"password0",
"fast_open":false,
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp",
"plugin":"v2ray-plugin",
"plugin_opts":"server;path=/ray"
}
//上面是配置文件示例,请添加至文件后保存并退出

说明:因为要监听本地,所以server后面地址填127.0.0.1,所以9000端口不对外开放,此处只是在ws的配置上加了个path参数,tls要由后面的caddy来支持。

4.3 用docker搭配配置文件创建并启动容器

docker run -d --name ss-plugin --restart always --net host -v /etc/ssplugin:/etc/shadowsocks-libev teddysun/shadowsocks-libev

说明:此处不用端口映射,直接使用–net host参数配置,让容器跟宿主机共用网络。

4.4 安装caddy

执行下面一条命令安装caddy,也就是以个人身份申请使用caddy的二进制,并把它放到/usr/local/bin目录下

cd /root //切换到/root目录

wget -qO- https://getcaddy.com | bash -s personal //下载caddy的二进制并放置在/usr/local/bin目录下

说明:如果你用的Centos7安装到这一步了,执行完上面的命令会有报错,你可以先 ls /usr/local/bin 先查看下caddy的二进制有没有下载到本地了,如果有的话,那么执行下caddy你可能会遇到command not found的反馈结果,原因应该是上面这个安装脚本在Centos7下没法把caddy所在的路径/usr/local/bin加入到环境变量里,那么解决办法有两个。

第一:在4.7使用 nohup /usr/local/bin/caddy -conf /root/caddy/Caddyfile & 避免报错。

第二:这一步就开始把/usr/local/bin加入$PATH的取值内,具体操作步骤如下:

vim /root/.bash_profile

PATH=$PATH:/usr/local/bin //加入此行,文件内应该是有 export PATH这一行的。

source /root/.bash_profile //使环境变量生效

4.5 配置caddy证书

mkdir caddy && cd caddy //在/root目录下创建caddy目录并切换至此

acme.sh --installcert -d mydomain.me --fullchain-file /root/caddy/caddy.crt --key-file /root/caddy/caddy.key --ecc //安装证书和key到/root/caddy目录下

4.6 创建caddy主配置文件Caddyfile

vim Caddyfile //创建文件并开始编辑

//下面是caddy配置文件示例,请添加至文件
mydomain.me:443 {
  gzip
  tls /root/caddy/caddy.crt /root/caddy/caddy.key
  log /root/caddy/caddy.log
  proxy / https://baidu.com
  proxy /ray 127.0.0.1:9000 {
    websocket
    header_upstream -Origin
  }
}
//上面是配置文件示例,请按照实际情况替换填写

说明:此处只需要关注路径和端口号,9000是你/etc/ssplugin/config.json目录下配置的,/ray是你这个文件内plugin_opts后面的path=/ray,请注意替换。

4.7 让caddy搭配Caddyfile文件运行起来

nohup caddy -conf /root/caddy/Caddyfile & //让caddy在后台运行起来

//直接回车让caddy服务后台挂起

cat nohup.out //可以查看输出的日志

cat /root/caddy/caddy.log //可以查看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

如果选的是第一种,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,也就是俗称的小火箭,配置添加使用。

六、总结

到此即介绍完所有我觉得要介绍到的地方,如果那里有介绍不对,欢迎留言批评指正。感谢各位大佬们用爱发电,感激他们的付出,我们才能走得更远。


参考链接:

未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » 使用docker快速部署shadowsocks-libev+v2ray-plugin代理 多种方法/域名 TLS CDN自己决定

赞 (1) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏