用Caddy配合Docker搭建V2Ray的(vmess+ws)+tls,可选套Cloudflare cdn

前言:V2Ray是一代新的网络协议构建平台,隶属于Project V项目,而vmess是属于V2Ray的自研协议,改正了shadowsocks一些已有的缺点,更难被墙检测。

本文以Debian系系统为例,主要介绍用Docker方式搭建V2Ray,配合Caddy服务器反向代理,可选套CDN,这样不暴露自己的ws端口,可以利用path分流进行流量转发。如果你听不懂,那没关系,请往下看,我会尽我可能说清楚,你按照步骤做就是。

撰写本文参考了很多网上的相关教程,使用的资源也依赖各路大神,在此表示深深的敬意。

一、前期准备

  • 一位不怕麻烦、很有耐心的自然人
  • 一台 墙外的VPS
  • 一台可SSH的电脑,鼠标,键盘……
  • 一个域名(推荐付费购买,也很便宜)
  • 注册Cloudflare账号,并将域名添加至Cloudflare并解析至VPS IP,先不要开启CDN

二、安装Docker

2.1 以root用户操作,先升级系统并安装必要软件

apt-get update && apt-get -y install screen lsof wget socat vim

2.2 安装docker

wget -qO- get.docker.com | bash

2.3 查看docker运行状态并将docker加入开机自启动

docker -v 或者 docker version //查看docker安装版本等信息

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

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

三、用acme.sh脚本给你的域名申请证书

3.1 下载脚本并安装到本地

wget -qO- get.acme.sh | sh

3.2 检测80端口有没有被占用,如果有kill掉

lsof -i:80 //如果没有程序跑在80端口,那么返回值是空;如果有,留意它的PID编号

kill -9 PID //终止占用80端口的进程

3.3 使用acme.sh脚本给域名申请ECC证书,假定域名是mydomain.me,且已经在Cloudflare设置解析并生效

/root/.acme.sh/acme.sh --issue -d mydomain.me --standalone -k ec-256

说明:生成的证书存放都放在/root/.acme.sh/mydomain.me_ecc/ 目录下,然后我们后面需要用到的是/root/.acme.sh/mydomain.me_ecc/fullchain.cer 证书和/root/.acme.sh/mydomain.me_ecc/mydomain.me.key 私钥

四、配置V2Ray的配置文件,并创建启动V2Ray的docker容器

4.1 创建配置目录并切换至此

mkdir /etc/v2ray && cd /etc/v2ray

4.2 创建配置文件

    vim config.json
    {
      "inbounds":[
        {
          "port":10000,
          "listen":"127.0.0.1", //此处记得写127.0.0.1,只监听本地
          "protocol":"vmess",
          "settings":{
            "clients":[
              {
                "id":"888d163a-80d7-4495-b3d1-fcf61fc6b6ce", //此处的uuid建议自己到uuid generator网站在线生成
                "alterId":64
              }
            ]
          },
          "streamSettings":{
            "network":"ws",
            "wsSettings":{
            "path":"/ray"  //说明:此处请替换你想写的path分流路径,尽量复杂一些
            }
          }
        }
      ],
      "outbounds":[
        {
          "protocol":"freedom",
          "settings":{}
        }
      ]
    }

说明:因为tls是借助caddy的认证,所以此处只需要配置vmess+ws;建议复制上述配置文件示例,然后保存到本地为config.json,稍作修改,然后用winscp传输到vps上,就可以直接使用。

4.3 创建并启动V2Ray的容器

docker run -d --name v2ray --restart always --net host -p 127.0.0.1:10000:10000 -v /etc/v2ray:/etc/v2ray teddysun/v2ray

4.4 查看容器在线状态

docker ps -as 或者 docker container ls

4.5 查看容器运行并输出日志

docker logs v2ray

4.6 客户端配置V2Ray节点

服务器:IP或者mydomain.me //建议是配置两个,开了CDN以后,这里填IP就是ws+tls,这里填了域名,就是ws+tls+cdn
端口号:443
UUID:888d163a-80d7-4495-b3d1-fcf61fc6b6ce //这个建议自己去在线网站生成,保持服务端客户端一致
额外ID:64
加密类型:填Auto即可,V2Ray对加密要求不严格,客户端随便填,服务端自适应
传输协议:ws
TLS:开启
伪装类型:none
伪装域名:mydomain.me
路径:/ray
MUX:关闭

疑问:Quantumult好像配置上不能用报400错误,但Quantumult X、Kitsunebi和v2rayN就可以,好像是caddy支持的是http/2,Quantumult支持的是http/1.1
对了,到此处还不能用对吧,别急,因为Caddy还没配置好,请继续往下看。

五、安装配置Caddy

5.1 切换到/root路径,下载安装caddy

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

5.2 创建caddy的配置文件

5.2.1 创建存放caddy配置的文件夹并切换至此

mkdir /root/caddy && cd /root/caddy

5.2.2 创建caddy配置文件Caddyfile

vim Caddyfile
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:10000 {
    websocket
    header_upstream -Origin
  }
}

说明:这里tls手动指定的证书,caddy服务器只会占用443端口,如果填邮箱的话,会同时占用80端口,且会有http到https的重定向,那样如果套了CDN,会出现反代的网站无法打开的情况,估计套cdn的V2Ray也无法使用。

六、安装证书并启动Caddy服务器

6.1 安装证书

/root/.acme.sh/acme.sh --installcert -d mydomain.me --fullchainpath /root/caddy/caddy.crt --keypath /root/caddy/caddy.key --ecc

6.2 指定Caddyfile配置文件运行caddy(三选一)

6.2.1 用screen开窗口后台运行caddy

screen -S caddy //这是创建并切换到名为caddy的窗口

caddy -conf /root/caddy/Caddyfile //指定配置文件运行caddy服务

说明:顺利启动caddy服务后,要想退出但不停止caddy服务,此时要同时按着CTRL+A+D,后台挂起,此时就算断开ssh连接,caddy服务也会保持在后台运行。

6.2.2 使用 nohup command & 让程序保持后台运行

添加:经秋大点拨,让caddy服务保持在后台运行还有一种方法,不需要使用screen那么麻烦,直接 nohup caddy -conf /root/caddy/Caddyfile & ,只需要这一条指令即可,默认输出到nohup.out文件在当前文件夹作为日志便于查看,另外这样子可以通过程序名查程序是否在运行以及其占用的PID, ps -ef | grep caddy

6.2.3 注册 caddy.service 后台服务方便管理

cd /etc/systemd/system && vim caddy.service //切换到此目录下,创建并开始编辑服务文件

//以下是文件内容,请添加至文件
[Unit]
Description=Caddy Service
After=network.target

[Service]
ExecStart=/usr/local/bin/caddy -conf /root/caddy/Caddyfile
Restart=on-abort
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
//以上是文件内容,添加至文件

systemctl daemon-reload //重载服务
systemctl start caddy //启动caddy.service服务
systemctl status caddy //查看caddy服务运行状况
systemctl enable caddy //将此服务加入开机自启动

6.3 检验caddy服务情况

浏览器里打开你的域名, https://mydomain.me ,如果是你设置的反代网址,那就说明成功了,地址栏里加上/ray,如果出现Bad Request的返回界面,则代表搭建成功。

6.4 后续处理

screen -ls  //这是列举所有后台运行的窗口,你要留意caddy的PID编号

screen -r PID //这是恢复到这个窗口进程

kill -9 PID //这是中止这个窗口进程

screen -wipe PID //这是清理dead掉的窗口

lsof -i:443 //这是列出占用443端口号的程序,注意PID号

kill -9 PID //这是终止此进程

七、说明和总结

7.1 设置定时任务的事情

你可以安装crontab来设置定时将脚本定期生成的证书安装到caddy配置目录下。

7.2 开启CDN情况

到Cloudflare那里点亮云朵,到SSL/TLS-Overview选择Full模式,就是开启CDN了

7.3 还有些问题没搞清楚

比如在套了CDN,脚本申请证书问题,还需要去研究下,所以每三个月你可能要关闭下CDN然后去手动更新证书试试,可以查看这一篇文章解决:用acme.sh脚本申请证书并自动续更

7.4 总结

难免有疏漏,希望各位提出宝贵意见

八、致谢

谢谢各路大神给出的教程,才得以完成这篇水文。。

秋水逸冰(秋大)docker教程: https://teddysun.com/536.html
秋水逸冰(秋大)V2Ray-docker镜像地址: https://hub.docker.com/r/teddysun/v2ray
白话文配置V2Ray教程: https://toutyrater.github.io/advanced/wss_and_web.html

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片