cmatrixprobe

发呆业务爱好者

Caddy2+WebSocket+TLS搭建v2ray

2020/8/22

最近发现caddy镜像小版本更新导致Caddyfile配置无效,为避免版本迭代造成不必要的麻烦,直接指定tag为2.0.0

2020/5/4

突然在Github上发现了v2ray配置脚本,能满足绝大部分需求,不过不是基于docker的,不能同时部署多种服务

bash <(curl -s -L https://git.io/v2ray.sh)

最近我经常看视频,感觉买的梯子满足不了自己需求了,于是准备租个VPS搭v2ray,就此做个笔记方便以后cv

VPS选购

VPS我选了vultr,新用户点链接注册送50刀,如果有信用卡可以白嫖,或者用支付宝也是支持的

因为家境贫寒,就直接选了最低配的Cloud Compute,每月5刀能用挺久,如果还有其他需求直接上High Frequency,价格多了1刀性能还是提高不少的

机房可以分别试一下比较速度,按小时付费可以随时destroy

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli

./speedtest

系统建议Debian9或Ubuntu19.10以上版本,我这里选了今天刚刚支持的Ubuntu20.04,默认开启BBR加速,

vultr的vps信息

也可以选择BBRplus加速

wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh"
chmod +x tcp.sh
./tcp.sh

基于TCP的v2ray配置

接下来就可以进行配置了,先装个docker

apt install -y docker.io

v2ray配置文件config.json是必须的,我直接用Xftp放到了/etc/v2ray目录下

{
  "log": {
    "loglevel": "warning",
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log"
  },
  "inbounds": [
    {
      "port": 9706,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "d86d3a42-25db-4f51-81b8-88c4043caa94",
            "alterId": 64
          }
        ]
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

id可以直接在uuidgenerator生成一个,相当于vmess的认证机制

端口和id与客户端保持一致,客户端的afterId需要小于等于服务端(建议32-100之间),其他默认就可以

然后启动v2ray容器

docker run -d --name v2ray --restart always \
-v /etc/v2ray:/etc/v2ray -p 9706:9706 \
v2ray/official v2ray -config=/etc/v2ray/config.json

最后放行相应的配置端口,这样其实基于tcp协议的v2ray就搭建完成了,客户端按默认的TCP配置

TCP相对来说会更快,日常使用足矣。不过这样隐匿性不高,去年11月份大规模被墙的时候只有WS+TLS依然坚挺,伪装流量效果还是不错的

基于Caddy 2实现WebSocket+TLS

之所以选择Caddy而不是Nginx和Apache是因为它会根据配置的域名自动签发证书,部署起来很方便

前提条件是有一个属于自己的域名xxx.domain.com,将VPS的ip地址添加到A记录

并在VPS防火墙安全组里把80和443端口放行

然后修改一下v2ray的配置文件

{
  "inbounds": [
    {
      "port": 9706,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "d86d3a42-25db-4f51-81b8-88c4043caa94",
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/ray"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

以及Caddyfile,配置域名和反向代理,这里注意caddy 2和1.0版本配置文件差别还是挺大的

xxx.domain.com
{
  log ./caddy.log
  reverse_proxy /ray v2rays:9706 {
    header_up -Origin
  }
}

其中/ray和9706分别为v2ray配置文件config.json中的path和port,v2ray为docker容器名,注意修改域名


创建网络用于v2ray和caddy通信

docker network create v2raynet

启动v2ray容器

docker run -d --name v2rays --restart always \
-v /etc/v2ray:/etc/v2ray --net v2raynet \
v2ray/official v2ray -config=/etc/v2ray/config.json

以及caddy容器

docker run -d --name caddy --restart always --net v2raynet -p 80:80 -p 443:443 \
-v /site:/usr/share/caddy -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
-v caddy_data:/data -v caddy_config:/config caddy:2.0.0

客户端配置

windows下配置v2rayN客户端

v2ray客户端配置

服务器迁移

打一个快照即可,如果IP被封了可以基于快照再重开一个服务器,只需要修改v2ray客户端或者DNS中的IP地址

红黑树的深入理解与实现 | 递归插入及删除

上一篇
评论
头像 发表评论 说点什么
  • 大佬,Caddyfile里怎么增加本地站点,或者增加一个默认反代网址?

    • 如果是用docker的话先把宿主机中静态文件目录映射到容器的/usr/share/caddy,然后在Caddyfile中配置
      localhost {
        root * /usr/share/caddy
        file_server
      }
      curl https://localhost/xxx.html
      反向代理可以这样配置
      reverse_proxy * ip:80
      reverse_proxy /ray ip:81
      默认就是localhost/xxx反代到ip:80/xxx
      localhost/ray会反代到ip:81/ray

4676
3