使用 Docker 快速部署 Shadowsocks-libev + v2ray-plugin

本文参考:

毕世平:使用 Docker 快速部署 Shadowsocks-libev + v2ray-plugin

秋水逸冰:使用 Docker 快速部署 Shadowsocks-libev + v2ray-plugin

前期准备

  • 一台VPS root登录
  • 只用ws就不用域名,加tls就需要准备一个域名
  • 注册好Cloudflare账号

安装docker

一键安装docker

# Debian
apt-get updatee && apt-get install -y wget vim
wget -qO- get.docker.com | bash

# CentOS
yum update
curl -fsSL https://get.docker.com/ | sh

#安装完成后启动
systemctl start docker
systemctl enable docker

常用命令

docker常用命令可以参考

https://www.jianshu.com/p/adaa34795e64

用 Docker 部署 Shadowsocks-libev + v2ray-plugin over websocket (HTTP)

创建配置文件

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

mkdir /etc/shadowsocks-libev

切换目录至 /etc/shadowsocks-libev

cd /etc/shadowsocks-libev

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

vim 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 改为

"plugin_opts":"server;mux=0"

后就可以用 Quantumult X。

用 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 hub 下载回来的镜像完整路径名

用 Docker 部署 Shadowsocks-libev + v2ray-plugin over websocket (HTTPS)

用 acme.sh 脚本申请 SSL 证书

此处需要用到一个你拥有的域名。

参考:用 acme.sh 脚本申请 SSL 证书并自动更新: 用 acme.sh 脚本申请 SSL 证书并自动更新或者这篇文章

下面默认你已经获取到 Clouflare API key,并且也已经安装好 acme.sh 脚本。

创建配置文件

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

mkdir /etc/shadowsocks-libev

切换目录至 /etc/shadowsocks-libev

cd /etc/shadowsocks-libev

创建 config.json 的配置文件

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 后面的配置除了域名外也不要修改

安装证书到 Shadowsocks-libev 配置文件的目录 /etc/shadowsocks-libev

假设你的是域名是 mydomain.me,且已经在 Cloudflare 上设置好 A 记录解析
CF_Key 的值替换成你自己的 Cloudflare API Key

export CF_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxx"

CF_Email 的值替换成你自己的 Cloudflare 注册邮箱账号名

export CF_Email="[email protected]"

用 acme.sh 脚本申请证书

acme.sh --issue --dns dns_cf -d mydomain.me -k ec-256

安装证书到 Shadowsocks-libev 配置文件的目录 /etc/shadowsocks-libev

acme.sh --installcert -d mydomain.me --fullchain-file /etc/shadowsocks-libev/plugin.crt --key-file /etc/shadowsocks-libev/plugin.key --ecc

用 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 部署 Shadowsocks-libev + v2ray-plugin over websocket (HTTP) + TLS + caddy + CDN

申请 SSL 证书以及安装证书

参考上面章节。

创建配置文件
在 /etc 目录下创建 shadowsocks-libev 目录

mkdir /etc/shadowsocks-libev

切换目录至 /etc/shadowsocks-libev

cd /etc/shadowsocks-libev

创建 config.json 的配置文件

vim config.json

以下为配置文件内容示例,添加后保存并退出

{
"server":"127.0.0.1",
"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;path=/ray"
}

说明:因为要监听本地,所以 server 后面地址填 127.0.0.1, 9000 端口不对外开放,此处只是在 websocket 的配置上加了个 path 参数(后面的值可以更改,比如可以改为 path=/teddysun),tls 则要由 caddy 来提供。

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

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

说明:此处不用端口映射,直接使用

--net host

参数配置,让容器跟宿主机共用网络。

安装 caddy

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

wget -qO- https://getcaddy.com | bash -s personal

配置 caddy 目录

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

cd /root && mkdir caddy && cd caddy

安装证书和 key 到 /root/caddy 目录下

acme.sh --installcert -d mydomain.me --fullchain-file /root/caddy/caddy.crt --key-file /root/caddy/caddy.key --ecc

创建编辑 caddy 配置文件示例,添加后保存并退出

vim caddy.conf

mydomain.me:443 {
  gzip
  tls /root/caddy/caddy.crt /root/caddy/caddy.key
  log /root/caddy/caddy.log
  proxy / https://www.baidu.com
  proxy /ray 127.0.0.1:9000 {
    websocket
    header_upstream -Origin
  }
}

说明:此处只要关注路径和端口号,9000 是 /etc/shadowsocks-libev/config.json 里配置的,/ray 是配置文件内 plugin_opts 后面的 path=/ray,请注意替换。另 caddy 需要监听 443 端口,请确保 VPS 的 443 端口没有被占用。

运行 caddy

后台运行 caddy

nohup caddy -conf /root/caddy/caddy.conf &

可以查看 caddy 运行产生的日志

cat /root/caddy/caddy.log

确认 caddy 运行状态,下面的命令有输出则表示正常

ps -ef | grep -v grep | grep caddy

有其他后台运行方法,忘记了之后补上

开启 Cloudflare 的 CDN 保护,开启 SSL/TLS 的 Full 模式

如下图所示,第 1 步,开启 CDN

开启cdn

如下图所示,第 2 步,开启 Full 模式

开启Full 模式

客户端配置

Windows 客户端

先到这个链接下载 v2ray-plugin-windows-amd64 的安装包,下载完成后解压到 shadowsocks-windows 的安装目录下,并重命名为 v2ray-plugin.exe 即可。

选项说明:

插件程序:v2ray-plugin

如果选的是第一种,Shadowsocks-libev + v2ray-plugin over websocket (HTTP),插件选项这里可以留空

如果选的是第二种,Shadowsocks-libev + v2ray-plugin over websocket (HTTPS),插件选项这里填 tls;host=mydomain.me

如果选的是第三种,Shadowsocks-libev + v2ray-plugin over websocket (HTTP) + TLS + caddy + CDN,插件选项这里填 tls;host=mydomain.me;path=/ray

值得注意的是:如果你把 plugin_opts 改为

"plugin_opts":"server;mux=0"

后就可以用 Quantumult X 来使用这个节点,但 Windows 客户端不能直接使用了。

Android 客户端

先到这个链接下载插件并安装,其余的配置都跟上面 Windows 客户端一致。

iOS 客户端

请使用 Shadowrocket,也就是俗称的小火箭,添加如下配置使用。
填写服务器,端口,密码,选择算法,插件选择 v2ray-plugin

IOS客户端设置

点击插件 v2ray-plugin

IOS客户端设置

设置插件 v2ray-plugin,开启 TLS,填写路径,服务器则填写你的域名

IOS客户端设置