网络代理 xray

背景

客户端: ClashX

服务端: xray

部署

创建目录并增加 docker compose 文件

1
2
mkdir -p apps/xray
vim apps/xray/docker-compose.yml

文件内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
services:
  xray:
    image: ghcr.io/xtls/xray-core:25.10.15
    container_name: xray
    user: root
    restart: unless-stopped
    command: ["run", "-c", "/usr/local/etc/xray/config.json"]
    volumes:
      - ./config.json:/usr/local/etc/xray/config.json:ro
    network_mode: host

增加配置文件 vim config.json

配置文件中几个动态参数需要替换一下。

生成 UUID 和随机前缀,注意这两个参数不能泄露!!!

1
uuidgen

执行两次,分别作为 id 和前缀,替换以下配置中的动态参数

 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
{
  "log": {
    "loglevel": "info"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 6000,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "[填写 UUID]"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "ws",
        "security": "none",
        "wsSettings": {
          "path": "/[随机前缀]"
        }
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "freedom",
      "settings": {}
    }
  ]
}

执行启动命令

1
docker compose up -d

可以检查容器是否启动成功,接下来做个反向代理。

反向代理

反向代理可以用 Nginx,Caddy2,Trarfik 等等,这里使用 Trarfik 完成反向代理。

第一步搞定域名解析。

创建目录和 compose 文件

1
2
mkdir -p apps/traefik
vim apps/traefik/docker-copmose.yml

写入以下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
services:
  traefik:
    image: traefik:v3.2
    container_name: traefik
    restart: unless-stopped
    network_mode: host
    volumes:
      - ./traefik.yml:/etc/traefik/traefik.yml:ro
      - ./config:/config:ro
      - ./letsencrypt:/letsencrypt
    environment:
      - TZ=Asia/Shanghai

编辑配置 vim traefik.yml,这里有个动态参数,填写你的邮箱

 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
api:
  dashboard: false

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
  websecure:
    address: ":443"

certificatesResolvers:
  letsencrypt:
    acme:
      email: [邮箱]
      storage: /letsencrypt/acme.json
      httpChallenge:
        entryPoint: web

providers:
  file:
    filename: /config/dynamic.yml
    watch: true

log:
  level: INFO

编辑反向代理配置

1
2
mkdir -p app/traefik/config
vim app/traefik/config/dynamic.yml

写入以下内容,这里有 2 个动态参数,填入第一步操作的域名,以及在 xray 配置中填写的前缀

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
http:
  routers:
    # Xray WebSocket 代理
    xray:
      rule: "Host(`域名`) && PathPrefix(`/[前缀]`)"
      service: xray
      tls:
        certResolver: letsencrypt
      entryPoints:
        - websecure
  services:
    # Xray 服务
    xray:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:6000"

执行启动命令,检查是否成功,服务端就部署完毕了。

ClashX

进入 「配置」-「打开配置文件夹」,快键键是 CMD+O

创建配置文件,比如 my.yaml,写入以下内容,这里有 3 个动态参数,替换域名,前缀,UUID,必须跟之前在服务端配置相同的参数。

保存并切换此配置,重载配置文件,上网试试。

 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
proxies:
  - name: "xx"
    type: vless
    server: [域名]
    port: 443
    uuid: [UUID]
    tls: true
    network: ws
    ws-opts:
      path: "/[前缀]"
      headers:
        Host: "[域名]"
    udp: true
    skip-cert-verify: false

proxy-groups:
  - name: "PROXY"
    type: select
    proxies:
      - "xx"
      - "DIRECT"

rules:
  - "GEOIP,CN,DIRECT"
  - "MATCH,xx"

规则

可以从其他配置中拷贝规则,并替换匹配的 name 即可。

意外

最开始在容器里面监听了 443 端口,启动后提示以下错误 listen tcp 0.0.0.0:443: bind: permission denied, 给 compose 增加 user: root 后解决。

当然现在的版本已经不使用 443 端口了,同样 compose 里的相关配置可以删掉。

image-20251119120956819

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy