你的电脑/手机
│
├─── 订阅更新 (HTTP) ───→ Server1:18088 ← Python 服务,提供订阅文件
│
├─── 代理流量 ──────────→ Server1:18444 ← Xray Shadowsocks
└─── 代理流量 ──────────→ Server2:18444 ← Xray Shadowsocks
协议:Shadowsocks(chacha20-ietf-poly1305)
- 支持 TCP + UDP
- 简单可靠,国内链路稳定
- 资源占用极低,适合 1C1G 机器
支持客户端:
- macOS / Windows:Clash Verge(订阅
clash.yaml) - iOS:Spectre(订阅
ss.txt)
| 脚本 | 用途 | 在哪里运行 |
|---|---|---|
setup_xray.sh |
安装 Xray,生成 Shadowsocks 配置 | Server1、Server2 各一次 |
setup_sub_server.sh |
部署订阅 HTTP 服务,生成订阅文件 | 只在 Server1 |
uninstall.sh |
卸载全部服务 | 需要清理的服务器上 |
在开始部署前,先把端口打开。
导航路径:
- 登录 cloud.oracle.com,点左上角 ≡ 菜单
- 网络 (Networking) → 虚拟云网络 (Virtual Cloud Networks)
- 点击你的 VCN 名称
- 左侧「资源」栏 → 安全列表 (Security Lists) → Default Security List for...
- 点击 添加入站规则 (Add Ingress Rules)
每条规则填写方式:
| 字段 | 值 |
|---|---|
| 无状态 | 不勾 |
| 源类型 | CIDR |
| 源 CIDR | 0.0.0.0/0 |
| 源端口范围 | 留空 |
| 目标端口范围 | 填对应端口 |
需要添加的规则(共 3 条):
| 在哪台添加 | IP 协议 | 目标端口 | 说明 |
|---|---|---|---|
| Server1、Server2 都加 | TCP | 18444 |
Xray Shadowsocks |
| Server1、Server2 都加 | UDP | 18444 |
Xray Shadowsocks UDP |
| 只在 Server1 加 | TCP | 18088 |
订阅服务 |
如果两台服务器在不同区域,VCN 是分开的,需要分别进各自的 VCN 操作。
在本机执行(替换实际 IP):
# 上传到 Server1
scp setup_xray.sh setup_sub_server.sh uninstall.sh ubuntu@<Server1_IP>:~/
# 上传到 Server2
scp setup_xray.sh uninstall.sh ubuntu@<Server2_IP>:~/ssh ubuntu@<Server1_IP>
sudo bash ~/setup_xray.sh输出示例,记下 PASSWORD:
============================================================
安装完成!复制以下参数备用
============================================================
IP 1.2.3.4
PORT 18444
PASSWORD xxxxxxxxxxxxxxxxxxxxxxxx
CIPHER chacha20-ietf-poly1305
============================================================
参数随时可查:
cat /etc/xray/node_params.env验证服务:
systemctl status xray # 应显示 active (running)ssh ubuntu@<Server2_IP>
sudo bash ~/setup_xray.sh同样记录输出的 PASSWORD。
ssh ubuntu@<Server1_IP>
sudo bash ~/setup_sub_server.sh按提示输入两台服务器的参数:
=== 请输入节点参数 ===
节点数量: 2
--- 节点 1 ---
备注名 (如 OCI-Osaka): OCI-Osaka-1
服务器 IP: <Server1_IP>
端口 (默认18444): 18444
密码 (SS_PASSWORD): xxxxxxxxxxxxxxxxxxxxxxxx
--- 节点 2 ---
备注名 (如 OCI-Osaka): OCI-Osaka-2
服务器 IP: <Server2_IP>
端口 (默认18444): 18444
密码 (SS_PASSWORD): yyyyyyyyyyyyyyyyyyyyyyyy
完成后输出两个订阅地址:
============================================================
订阅服务部署完成!
============================================================
Clash Verge 订阅 URL:
http://1.2.3.4:18088/<token>/clash.yaml
Spectre (iOS) 订阅 URL:
http://1.2.3.4:18088/<token>/ss.txt
============================================================
两个 URL 也保存在 Server1 的 /var/www/sub/sub_url.txt:
cat /var/www/sub/sub_url.txt验证订阅服务可访问(在本机执行):
curl http://<Server1_IP>:18088/<token>/clash.yaml- 打开 Clash Verge → 左侧 配置
- 右上角点 新建 → 类型选 远程
- 粘贴
clash.yaml那条 URL → 保存 - 点击配置卡片的 激活 按钮
左侧 代理 页面可以看到 ⚡ 自动最优 分组,两个节点测速有延迟数值即表示连通。
- 打开 Spectre → 右上角 + → 添加分享的链接
- 粘贴
ss.txt那条 URL → 完成
添加成功后可以看到 OCI-Osaka-1 和 OCI-Osaka-2 两个节点。
需要完全重装时(换服务器、系统重装、排查问题等):
两台服务器各自执行卸载:
sudo bash ~/uninstall.sh然后从第二步开始重新执行即可。 脚本均为幂等设计,重复执行不会产生冲突。
在需要清理的服务器上执行:
sudo bash ~/uninstall.sh脚本自动检测并清理:
- Xray 服务、二进制、配置文件、iptables 规则(18444 TCP+UDP)
- 如果是 Server1(检测到订阅服务),同时清理订阅服务、文件、iptables 规则(18088)
OCI 控制台「安全列表」中的入站规则需手动删除。
systemctl status xray # 两台都有
systemctl status sub-server # 仅 Server1systemctl restart xray
systemctl restart sub-servercat /etc/xray/node_params.envcat /var/www/sub/sub_url.txt # 在 Server1 上执行journalctl -u xray -f # 实时
journalctl -u xray -n 50 # 最近 50 条两层保护:
| 层级 | 保护内容 | 机制 |
|---|---|---|
| 第一层 | 订阅文件 | URL 中含随机 token,他人无法猜到地址 |
| 第二层 | 代理本身 | Shadowsocks 用随机密码鉴权 |
换掉 token,旧 URL 立即失效:
ssh ubuntu@<Server1_IP>
sudo rm /var/www/sub/.token
sudo bash ~/setup_sub_server.sh脚本生成新 token,重新录入节点参数(密码不变,从 node_params.env 查看)。完成后在 Clash Verge / Spectre 中更新订阅 URL。
需要在两台服务器上重新生成密码:
# 每台服务器上执行
sudo rm /etc/xray/config.json
sudo bash ~/setup_xray.sh记录新密码后,在 Server1 重新运行 setup_sub_server.sh 更新订阅。
Q: 节点显示 Timeout?
- 确认 OCI 控制台安全列表已放行 18444 TCP+UDP
- 确认 Xray 运行正常:
systemctl status xray - 测试端口连通性:
nc -zv <服务器IP> 18444
Q: 订阅 URL 无法访问?
- 确认 OCI 控制台安全列表已放行 TCP 18088
- 确认订阅服务运行:
systemctl status sub-server - 确认 URL 完整正确:
cat /var/www/sub/sub_url.txt
Q: 重装系统后如何恢复?
执行重新部署流程:uninstall.sh → setup_xray.sh(两台)→ setup_sub_server.sh(Server1)→ 客户端更新订阅。