使用声明

本文仅用于网络技术学习与个人自用测试,禁止用于违法活动、非法传播或商业用途。请遵守所在地法律法规及相关服务商的使用规定。

这次我把自用代理搭在了 VPS 上,再接入购买的静态出口。电脑、手机连接自己的节点后,需要代理的请求就从这个出口访问网站。

下面按实际搭建顺序来做。教程以 3x-ui v3.11.0、Xray 26.10.29、Mihomo 1.19.32 为配置参考,服务器采用全新的 Ubuntu 24.04。图中均为原理与字段示意,不是面板截图。

1. 为什么要自己搭

我主要想解决两件事:

  • 自己管理节点和订阅:配置放在哪里、什么时候更新,由自己控制。
  • 固定最终出口:前面的连接线路可以调整,目标网站看到的出口尽量保持不变。

因此,这次把 VPS 当作入口,把静态代理当作最终出口。这里说的“梯子”,具体是 VLESS + REALITY 代理服务。

2. 先看懂这条链路

客户端连接 VPS 的 REALITY 入站,VPS 再经静态 SOCKS5 出口访问网站;订阅只负责向客户端提供配置

实线是访问链路,虚线是配置下载。订阅链接不负责转发上网流量。

几个名词各管一件事:

  • VPS:运行服务的远程电脑,通常带机房公网 IP。
  • Xray:实际接收、转发连接的程序。
  • 3x-ui:管理 Xray、用户和订阅的网页面板。
  • 节点:服务器地址、端口、协议和认证参数的组合。
  • 订阅:让客户端下载、更新节点配置的链接。
  • 静态出口:网站最终看到的对外地址,本次通过 SOCKS5 接入。

静态、独享、家宽是三个属性。

地址固定,不代表独享,也不代表真实家庭宽带。本文“家宽”沿用购买时的商品描述;这次验证的是代理链路和出口地址,没有独立验证背后的物理接入线路。

3. 准备材料与成本

我这次的支出如下,人民币折算按购买时约定的金额计算:

项目 费用
静态家宽 IP ¥30 / 月
VPS $20 / 年,约 ¥133
一年合计 约 ¥493
平均每月 约 ¥41

准备好:

  1. 一台 VPS:公网 IPv4、Ubuntu 24.04、SSH 登录权限。
  2. 静态代理信息:SOCKS5 服务器地址、端口、用户名、密码。
  3. SSH 工具:macOS 的终端或 Windows 的 PowerShell 即可。
  4. 客户端:Clash Verge Rev,本文使用 Mihomo 内核。

本教程使用 IP 证书,不要求另买域名。选服务器时,先确认本地能连接它的 SSH 和代理端口,且 VPS 能连接购买的静态代理。

后面区分两个地址,别填反:

VPS_IP       = 自己 VPS 的公网 IPv4
SOCKS_HOST   = 商家提供的静态代理服务器地址

VPS_IP 是客户端连接的入口;SOCKS_HOST 用在服务器的出站配置里,实际出口地址以商家分配和实测为准。


4. 开始搭建:按这八步操作

4.1 登录 VPS,放行端口

在自己的电脑上打开终端。把 VPS_IP 替换为真实地址:

ssh root@VPS_IP

如果 SSH 不是默认的 22 端口,使用 ssh -p 实际端口 root@VPS_IP。非 root 用户登录后,先执行 sudo -i。

下面的命令都在 VPS 上执行:

apt update
apt install -y curl ca-certificates socat openssl ufw

先到服务商控制台的防火墙或安全组放行以下 TCP 端口,再配置系统防火墙:

端口 用途
实际 SSH 端口,默认 22 远程登录
80 申请、续期 IP 证书
443 REALITY 节点
2053 3x-ui 管理页面
2096 HTTPS 订阅

以下假设 SSH 使用 22。若不是,先改第一条命令中的端口:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 2053/tcp
ufw allow 2096/tcp
ufw enable
ufw status

云平台防火墙和 ufw 是两层配置,两边都要允许连接。启用 ufw 前必须先放行自己的 SSH 端口。

4.2 安装 3x-ui

为方便对照,下面固定安装本次使用的 v3.11.0,而不是跟随最新版:

curl -fL \
  https://raw.githubusercontent.com/MHSanaei/3x-ui/v3.11.0/install.sh \
  -o /root/3x-ui-install.sh

bash /root/3x-ui-install.sh v3.11.0

跟随安装提示设置管理员用户名、密码和面板访问路径。面板端口使用 2053;如果安装器自动生成了信息,先保存输出,随后运行 x-ui,按菜单名称进入 修改端口 / Modify Port 调整。

保留这四项:

管理员用户名
管理员密码
面板端口:2053
面板访问路径:安装器生成的路径

安装后检查:

systemctl is-active x-ui

看到 active,继续下一步。后面随时可以运行 x-ui 回到管理菜单。

4.3 配置 HTTPS,不用购买域名

如果安装器已经申请了 IP 证书并配置好面板 HTTPS,直接核对下方证书路径、续期任务和访问地址,不必重复申请。

运行:

x-ui

在 v3.11.0 的菜单中依次选择:

20. SSL Certificate Management
  └─ 6. Get SSL for IP Address

按下面填写:

  1. 公网 IPv4:核对自动识别的地址,必须是自己的 VPS_IP。

  2. IPv6:本文不使用,直接回车跳过。

  3. HTTP-01 监听端口:使用默认的 80。确认没有其他服务占用它。

  4. 是否把证书用于面板:输入 y,等待面板重启。

脚本会申请短期 IP 证书,并安装到:

证书:/root/cert/ip/fullchain.pem
私钥:/root/cert/ip/privkey.pem

这是 3x-ui 该版本管理脚本提供的 IP 证书流程。证书约 6 天有效,需要保留自动续期任务和公网 80 端口的可达性。检查当前 root 用户的定时任务:

crontab -l

应能找到 acme.sh 的续期检查任务;如果没有,先修复证书安装,不要把这张短期证书当成长期可用。

然后在自己的电脑浏览器打开安装输出的完整地址:

https://VPS_IP:2053/自己的面板路径/

保留路径两侧的 /。能通过正常证书校验并打开登录页,再登录面板。

同一 VPS 的 2053 端口用于管理,2096 用于下载订阅,443 用于连接节点;80 端口用于证书验证

四个端口各有用途。面板和订阅使用 IP 证书,REALITY 入站使用自己的密钥参数。

4.4 创建 VLESS + REALITY 入站

打开面板的 入站 / Inbounds → 添加 / Add,按表填写:

字段 填写内容
备注 自用静态出口
协议 VLESS
监听地址 留空,使用默认监听
端口 443
传输 TCP / RAW
安全 REALITY
目标地址 Dest / Target www.microsoft.com:443
服务器名称 SNI / Server Names www.microsoft.com
公钥、私钥 点击面板的生成按钮
Short IDs 点击生成按钮
指纹 Fingerprint chrome
最小、最大客户端版本 留空,避免额外限制第三方客户端

这里采用官方 REALITY 文档中的目标示例。先在 VPS 上检查它是否能完成 TLS 1.3、HTTP/2 协商:

openssl s_client -connect www.microsoft.com:443 \
  -servername www.microsoft.com -tls1_3 -alpn h2 </dev/null

输出应包含 TLS 1.3 和 ALPN protocol: h2。若失败,换用自己从 VPS 和客户端都能正常访问、满足要求的目标站点,并同时修改 Target 与 SNI。

保存入站,记下其实际 Tag。如果表单支持自定义 Tag,可以设为 vless-static-443;否则使用面板生成的值,后面的路由要与它一致。

REALITY 参数对应关系:客户端服务器地址对应 VPS 公网 IP,UUID 对应用户,SNI 对应目标域名,public-key 对应服务端生成的公钥,short-id 对应服务端 Short ID;私钥留在服务端

手动核对时看这张图。HTTPS 证书私钥和 REALITY 私钥不是同一份东西。

4.5 添加一个自用用户

进入 用户 / Clients → 添加 / Add:

  1. 用户标识 Email:填写 owner,这里只作内部标识。

  2. UUID:点击生成,保持独立。

  3. Flow:选择 xtls-rprx-vision。

  4. 关联入站:选择刚建的 443 入站。若页面从入站内部添加用户,确认关联已经选中。

  5. 总流量、到期时间:自用且不设限制时,按界面保持不限额、无到期;关闭自动续期和定期重置。

保存后,确认用户已启用、关联了入站,并且有一个 Sub ID。它稍后用于生成个人订阅。

如果要了解额度和到期字段,参见该版本用户说明。

4.6 绑定静态 SOCKS5 出口

进入 Xray 设置 / Xray 配置,先备份现有配置。这里改的是出站和路由,不是刚才的 REALITY 入站。

在 outbounds 数组中新增下面这个对象,把占位内容替换成商家提供的信息:

{
  "tag": "static-exit",
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "SOCKS_HOST",
        "port": 443,
        "users": [
          {
            "user": "SOCKS_USERNAME",
            "pass": "SOCKS_PASSWORD"
          }
        ]
      }
    ]
  }
}
  • address:商家的代理服务器地址,不是自己的 VPS。
  • port:这里的 443 是示例,改成商家实际端口。
  • user、pass:静态代理的认证信息。

接着,在 routing.rules 数组中增加:

{
  "type": "field",
  "inboundTag": ["vless-static-443"],
  "outboundTag": "static-exit"
}

把 vless-static-443 换成 4.4 中记录的实际入站 Tag。这条规则放在现有 api → api 规则之后、其他可能匹配该入站的通用规则之前。

两处是“追加”,不是整份替换。

保留原有的 API 出站、直连、阻断及管理路由。数组中相邻的对象用逗号分隔,最后一个对象后不加逗号。static-exit 的拼写必须前后一致。

保存并应用配置、重启 Xray。确认面板显示核心运行正常;这时指定入站的流量才会进入静态代理。相关字段可以对照 Xray SOCKS 出站和 3x-ui 出站与路由说明。

4.7 开启 HTTPS 订阅与最小分流

打开面板的 订阅设置,按表配置:

字段 填写内容
启用订阅 开启
监听端口 2096
TLS 证书路径 /root/cert/ip/fullchain.pem
TLS 私钥路径 /root/cert/ip/privkey.pem
Clash / Mihomo 输出 开启

保存、重启面板。面板能用 HTTPS,不代表订阅也自动启用了 HTTPS,订阅自己的证书字段同样要填写。

在 Clash / Mihomo 的自定义路由区域开启路由配置,填入下面的 YAML。对应的设置字段是 subClashEnableRouting 与 subClashRules:

proxy-groups:
  - name: PROXY
    type: select
    include-all: true

rules:
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,PROXY

这份规则只做一件事:本机、内网直连,其余进入 PROXY 组。它是可以独立使用的最小示例,不依赖之前的机场订阅,也不等于完整的国内外分流。

保存后,回到 owner 用户的订阅入口,选择 Mihomo 格式并复制完整 HTTPS 地址。在这个版本中,明确的格式入口形如:

https://VPS_IP:2096/mihomo/自己的SubID

用实际生成的链接为准。正常下载的内容应包含 proxies、proxy-groups、rules,而不只是几行 vless://。格式与路径见该版本订阅说明。

4.8 导入 Clash Verge Rev,确认出口

回到自己的电脑:

  1. 打开 Clash Verge Rev 的 订阅 → 新建,类型选远程订阅,粘贴刚复制的 HTTPS 链接,保存并更新。

  2. 激活新订阅。若以前用过全局扩展脚本,检查它有没有改写新配置;初次测试先不要套用旧机场专用的包装逻辑。

  3. 进入 代理 页面,使用 规则模式,在 PROXY 组中选择自己的节点。

  4. 开启 系统代理。这一步先验证走代理的请求,暂时不用叠加 TUN。

本次版本组合的 REALITY 节点需要包含:

client-fingerprint: chrome
reality-opts:
  public-key: 服务端生成的REALITY公钥
  short-id: 服务端生成的ShortID
  support-x25519mlkem768: true

3x-ui v3.11.0 的原生 Mihomo 订阅会生成相应兼容项。如果使用旧文件或其他转换工具,核对是否遗漏;修正配置来源后重新更新订阅,避免只改临时文件。

最后在电脑终端执行。把 7897 改成 Clash 设置中显示的实际混合端口:

curl --noproxy "" --proxy socks5h://127.0.0.1:7897 \
  --max-time 20 https://api.ipify.org
echo

curl --noproxy "" --proxy socks5h://127.0.0.1:7897 \
  --max-time 20 https://checkip.amazonaws.com

两个结果都应是商家分配给你的同一个静态出口 IP,而不是 VPS 的机房 IP。再刷新一次订阅、重复检查,确认配置更新后仍可用。

到这里,自用节点、订阅和静态出口就串起来了。手机安装支持相同协议的客户端,导入这份个人订阅即可;本文的检查覆盖这两次 HTTPS 代理请求,不代表已测试所有应用和 UDP。