Featured image of post 科学上网:用 Caddy 反向代理 VLESS

科学上网:用 Caddy 反向代理 VLESS

Caddy 的自动 TLS 用起来简直不要太爽。

上一篇文章提到,我搭建了一个基于 Aria2 的 BT 离线下载服务器。为了用 Caddy 反向代理部署好的容器,我把原来偷懒用一键脚本部署的 Trojan 给卸载了,问就是因为这脚本把 80 和 443 端口都占用了,不卸载掉根本没法继续。

于是离线下载服务器是搭建好了,可时不时需要的代理却不得不下线。仔细一想,之前看到过有人 Cloudflare + V2Ray + WS 复活被墙的 VPS,既然是 WebSocket,还能用 Cloudflare 反代,那用 Caddy 反代又有何不可呢?况且 Caddy 还有自动 TLS,比起 Nginx + Certbot 的组合配置起来肯定更简单。只要配置成功,我就可以在为 Caddy 留住 443 端口的同时跑代理了。

安装 VLESS 和 Caddy

安装VLESS 可以直接使用 v2fly/fhs-install-v2ray 一键脚本:

1
2
# 安裝執行檔和 .dat 資料檔
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)

Caddy 的安装请参考官方教程,例如,我使用 Debian 12,则使用以下命令:

1
2
3
4
5
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

配置 VLESS

编辑/usr/local/etc/v2ray/config.json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
    "log": {
        "access": "/var/log/v2ray/access.log",
        "error": "/var/log/v2ray/error.log",
        "loglevel": "warning"
    },
    "inbounds": [
        {
            "port": 1234,  //任意端口
            "listen": "127.0.0.1",
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "super-random-uuid",  //随机生成一个 UUID 替换即可
                        "level": 0,
                        "email": "example@example.com"
                    }
                ],
                "decryption": "none"
            },
            "streamSettings": {
                "network": "ws",
                "security": "none",
                "wsSettings": {
                    "path": "/"  // 需要与之后的 Caddy 配置保持相同
                }
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}

编辑完成后保存退出即可。

配置 Caddy

在你喜欢的位置创建一个 Caddyfile,或者编辑已有的 Caddyfile,加入如下内容,反向代理刚才在 VLESS 配置文件中设置的端口:

1
2
3
4
5
6
7
8
9
yourdomain.com {
        # 用一个 Matcher 匹配所有指定路径的 Websocket 请求
        @websockets {
                path /      # 与前面 VLESS 的 path 保持一致
                header Connection Upgrade
                header Upgrade websocket
        }
        reverse_proxy @websockets :1234
}

至此,服务端所有配置文件都编辑完毕。

启动服务

启动 VLESS,并设置开机自启动:

1
systemtcl enable v2ray && systemctl start v2ray

启动 Caddy/更新 Caddy 配置:

1
2
caddy start
caddy reload  # 更新配置用

以上操作全部完成后,Caddy 反向代理 VLESS 就完成了。

客户端设置

客户端方面需要手动设置:

  • 地址是绑定给 VLESS 的域名。
  • 端口是 443
  • TLS 打开
  • 传输方式选择 websocket
  • UUID 是之前填入 VLESS 配置文件的 UUID

Shadowrocket 设置

所有的客户端设置大同小异,至于 Clash 的配置文件,可以参考 Mihomo 文档1,以下是我的示例配置文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
proxies:
  - name: "A Random Name"
    type: vless
    server: yourdomain.com
    port: 443
    udp: true
    uuid: super-random-uuid
    flow: xtls-rprx-vision
    packet-encoding: xudp

    tls: true
    servername: yourdomain.com
    alpn:
      - h2
      - http/1.1
    skip-cert-verify: false

    network: ws

    smux:
      enabled: false

需要生成 Clash 配置文件可以使用 V2RaySE 提供的工具

完成

好了,现在我们已经拥有了一个 VLESS 服务器,Caddy 会自动为我们申请和维护 TLS 证书,非常好用。

只需要这么小小折腾一下,我仿佛又找到了当年用一键脚本搭建 SSR 时的愉悦,好好享受这种能顺利打开 google.com 时的兴奋吧。

TODO List

  • 基本搭建
  • 伪装

  1. 毕竟继承 Clash Meta 衣钵的 Mihomo 也算是 Clash 正统了。 ↩︎

Licensed under CC BY-NC-SA 4.0