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 正統了。 ↩︎