用 Agent 快速搭建专享高速海外节点——跨境出海从业者必看

Danny · 2026年9月20日 · 15 分钟阅读

跨境出海业务需要一条稳定的海外线路。这篇教程用一台 CN2 GIA VPS、一个 Cloudflare 域名和一份 SOP.md,让 Agent 完成服务器初始化、Xray 安装、TLS 配置和 VLESS 节点创建,你只需要提供凭据并把提示词交给它。

本文是一篇操作型教程,目标是通过 VPS、Cloudflare 和 Agent 自动化流程,快速搭建属于自己的海外节点。相比多人共享节点,专属 VPS 节点拥有独立服务器和独立公网 IP,更适合作为长期稳定的海外业务网络基础。

整条链路里需要你手工完成的只有购买和授权,服务器初始化、Xray 安装、TLS 证书配置、VLESS 节点创建都交给 Agent 按 SOP 执行。相比之前手搓版的 用 CN2 GIA 搭建专享高速海外节点,这篇新版本流程方便你更省心和高效搭建节点和后续维护。

第一步:准备工具

开始之前把下面几样东西准备好,缺一个都会卡在半路。

  • 一台海外 VPS,本文用的是 BandwagonHost CN2 GIA 线路
  • 一个域名,用于节点域名解析和后续的 TLS 配置。
  • 一个 Cloudflare 账号,用于管理 DNS 和创建 API Token。
  • 一个 Agent 工具,例如 Claude Code、Codex CLI、Zcode 等等都可以。

第二步:购买 BandwagonHost CN2 GIA VPS

整套方案最终落在一台 VPS 上,本节的操作都在 BandwagonHost 官网完成。

什么是 CN2 GIA

CN2 GIA 是中国电信推出的国际精品网络线路,全称 China Telecom Next Carrier Global Internet Access,属于 CN2 体系中质量最高、延迟最低的一档,主要面向政企客户和国际专线业务。落到实际体感上,就是访问海外站点时延迟更低、丢包更少,比多人共享的节点稳定得多。

  1. 登录 BandwagonHost 官网,在菜单栏找到 CN2 GIA 入口。BandwagonHost 官网菜单
  2. 在产品页面选择 Los Angeles CN2 GIA/CTGNet VPS。选择洛杉矶 CN2 GIA 套餐
  3. 配置和期限按下表选择。
使用场景推荐配置说明
个人使用20GB SSD单人日常办公和测试够用
2-5 人工作室40GB SSD多人同时使用,需要留出余量
企业更高配置按实际并发和用途选择

期限方面,建议直接选 1 年,性价比最高,BandwagonHost 提供 30 天内的退款保障。

CN2 GIA 套餐下单页面

  1. 点击 Checkout 完成购买。

第三步:获取 VPS 登录信息

购买成功后返回官网,登录信息都在 KiwiVM 控制面板里。

  1. 点击 Client Area。BandwagonHost 客户中心
  2. 进入 Services → My Services。我的服务列表
  3. 找到刚购买的 VPS。打开 KiwiVM 控制面板
  4. 进入 KiwiVM Admin Controls。
  5. 点击 Root Password Reset。
  6. 点击 Generate & Set New Root Password。生成新的 Root 密码

把下面三项保存到本地,后续 Agent 会用到它们来连接服务器。

  • VPS Public IP 地址
  • SSH Port
  • Root Password
PRO TIP 换成 SSH Key 登录

如果你特别在意安全,可以把登录方式改成 SSH key,具体做法看这篇 如何为电脑创建 SSH 登录密钥并设置服务器别名

第四步:配置 Cloudflare 域名

节点需要一个域名来承载 TLS 证书。先把域名买好并把 DNS 托管到 Cloudflare,具体操作见 为什么资深开发者更倾向于把域名 DNS 托管到 Cloudflare?

  1. 登录 Cloudflare,点击左侧边栏 Domains → Overview,选择你的域名,下文以 example.com 举例。
  2. 创建节点子域名,例如 gia.example.com。
  3. 点击左侧边栏 DNS → Records,点击 Add Record 添加一条 A 记录,字段这样填:
    • Type:A
    • Name:gia
    • IPv4:你的 VPS IP
    • Proxy Status:DNS Only

    填完点击 Save 保存记录。

  4. 创建 API Token:点击左侧边栏的 Quick Search,输入 API Token,选择 Account API Tokens,点击创建 Token。
  5. 权限选 Edit Zone DNS,Token Expiration 选 No Expiration,Client IP Address Filtering 填两个地址:BandwagonHost 服务器的 IP,以及运行 Agent 的那台机器的 IP(本机、云电脑或者主机都可以)。
  6. 点击 Review Token,再点击 Create Token 完成创建。
WARNING API Token 只显示一次

创建成功后会弹出提示框,把 Account ID 和 API Token 都保存下来。API Token 只会显示一次,遗失之后只能重新生成。

第五步:准备 Agent 自动部署环境

新建一个项目目录,把凭据和部署要求分成两个文件放进去,目录结构是这样:

vps-node-agent/
├── .env
└── SOP.md

.env 存连接凭据,按这个格式填:

VPS_IP=
SSH_PORT=
ROOT_PASSWORD=
DOMAIN=
CF_TOKEN=
CF_ACCOUNT_ID=

.env 里放的都是敏感凭据,不要提交到任何代码仓库。

SOP.md 存完整的部署要求,Agent 每一步动作都由它决定。写的时候把要装什么、装到什么程度、怎么算通过都写清楚,Agent 执行起来会稳定很多。

下面是完整的 SOP.md,可以整段复制保存成文件直接使用:

# VLESS 节点搭建 SOP(2026 现行方案,可人工执行 / 可交给 AI Agent 执行)

适用场景:Bandwagon / 任意 KVM VPS(Debian 12+),从零搭建个人自用节点。
操作环境:**MacBook Terminal** 或 **Windows PowerShell**(Win10 1809+ 自带 OpenSSH 客户端)。
除 SSH 登录和客户端安装外,所有命令都在 VPS(Debian)上执行,两个平台完全一致。

> 本文档既可以人工逐步执行,也可以整份交给 AI 编码代理(Codex / Claude Code / ZCode 等)
> 自动执行,只需提前在代理环境中配好 SSH 连接。所有敏感值(API Token、面板密码、UUID)
> 都在执行过程中现场生成或输入,不要写进文档。
>
> 全文占位符:
> - `gia.yourdomain.com` → 你的子域名(示例:`gia` + `yourdomain.com`)
> - `1.2.3.4` → VPS 的 IP

## 架构总览

| 组件 | 选型 | 说明 |
|---|---|---|
| 节点主用 | VLESS + WS + TLS(443) | 客户端兼容性最好;标准 HTTPS 端口,IP 被墙可切 Cloudflare CDN 救活 |
| 节点备用 | VLESS + Vision + REALITY(2053) | 免证书、抗主动探测;需要较新内核的客户端 |
| 面板 | 3x-ui(持续维护) | 端口 8443,随机路径 + 域名证书 HTTPS |
| 证书 | acme.sh + Cloudflare DNS API | ECC 证书,cron 自动续期 |
| 加速 | 内核 BBR(sysctl) | 不再用第三方加速脚本 |

端口规划:`443` WS+TLS 主用 / `2053` REALITY 备用 / `8443` 面板 / `80` 保留(证书 HTTP 验证备用)。

---

## Step 1 购买 VPS 并重装系统

1. Bandwagon 购买 CN2 GIA 套件;进 KiwiVM 面板。
2. `Root password - generate` 保存 root 密码;记下 SSH 端口(默认 22)。
3. `Install new OS` → 选 `debian-12-x86_64` → 等待完成。
4. 记下 IP:即 `1.2.3.4`。

## Step 2 SSH 连接(本机操作)

Mac Terminal 和 Windows PowerShell 命令相同:

```bash
ssh root@1.2.3.4
# 首次连接输入 yes 确认指纹,然后输入 root 密码
```

## Step 3 系统初始化 + BBR(VPS 上执行)

```bash
apt update && apt upgrade -y
apt install -y curl socat

# 内核 BBR(Debian 12 内核原生支持,无需任何脚本)
cat > /etc/sysctl.d/99-bbr.conf <<'EOF'
net.ipv4.tcp_congestion_control=bbr
net.core.default_qdisc=fq
EOF
sysctl --system
sysctl net.ipv4.tcp_congestion_control   # 应输出 bbr
```

## Step 4 Cloudflare 配置(浏览器操作)

### 4.1 子域名 A 记录

1. Cloudflare → `yourdomain.com` → DNS → Add record:
   - Type: `A`,Name: `gia`,IPv4: `1.2.3.4`
   - **Proxy status: 关闭(灰云 DNS only)** ← 必须灰云,否则节点直连不通
2. 保存后本机验证解析生效(Mac/Win 通用,PowerShell 用 `Resolve-DnsName gia.yourdomain.com`):

```bash
dig +short gia.yourdomain.com    # 应返回 1.2.3.4
```

### 4.2 创建 API Token(供 VPS 签发/续期证书)

1. Cloudflare 右上角头像 → My Profile → API Tokens → Create Token。
2. 模板选 **Edit zone DNS**:
   - Zone Resources: Include → Specific zone → `yourdomain.com`
   - Continue → Create,复制 Token(只显示一次)。
3. 记下 Account ID(域名概览页右下角)。
4. **关键:IP 白名单**。编辑这个 Token → Client IP Address Filtering → 添加 VPS 出口 IP:

```bash
# VPS 上查询自己的出口 IP
curl -s https://api.ipify.org
```

   不加白名单会在签发时报错:`Cannot use the access token from location: x.x.x.x`。
   注意:证书续期是在 VPS 上跑的,所以白名单里必须永远是 VPS 的 IP。

## Step 5 签发证书(VPS 上执行)

```bash
curl https://get.acme.sh | sh -s email=你的邮箱
source ~/.bashrc

export CF_Token="粘贴API_Token"
export CF_Account_ID="粘贴Account_ID"
acme.sh --set-default-ca --server letsencrypt

# DNS 验证签发 ECC 证书
acme.sh --issue --server letsencrypt --dns dns_cf -d gia.yourdomain.com --keylength ec-256
```

安装到固定路径(续期后自动同步 + 重启面板):

```bash
mkdir -p /root/cert
acme.sh --install-cert -d gia.yourdomain.com --ecc \
  --fullchain-file /root/cert/fullchain.pem \
  --cert-file /root/cert/cert.crt \
  --key-file /root/cert/private.key \
  --reloadcmd "systemctl try-restart x-ui || true"
chmod 644 /root/cert/fullchain.pem /root/cert/cert.crt
chmod 600 /root/cert/private.key

# 验证
openssl x509 -in /root/cert/fullchain.pem -noout -subject -enddate
```

说明:`CF_Token` 会被 acme.sh 存进 `/root/.acme.sh/account.conf` 供续期使用,这是官方标准做法。

## Step 6 安装 3x-ui 面板(VPS 上执行)

```bash
bash <(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/main/install.sh)
```

交互向导逐项选择:

| 提示 | 选择 |
|---|---|
| 数据库 | `1` SQLite |
| 自定义面板端口? | `y` → 输入 `8443` |
| 自定义 WebBasePath? | `y` → 输入随机路径,如 `/8fk2mq0xza/`(**必须以 / 开头结尾**,记下来) |
| 用户名/密码 | 自己设置强密码(10 位以上随机字符) |
| SSL Certificate Setup | 选**跳过**(证书下一步手动指定) |

装完会回显面板信息,确认服务在跑:`systemctl is-active x-ui`

## Step 7 面板挂上证书(VPS 上执行)

```bash
/usr/local/x-ui/x-ui setting -webCert /root/cert/fullchain.pem -webCertKey /root/cert/private.key
x-ui restart
```

浏览器打开 `https://gia.yourdomain.com:8443/8fk2mq0xza/` 登录,地址栏应为有效证书(锁标志)。
**以后只通过这个域名+路径访问面板,路径不要外传。**

## Step 8 添加主节点:VLESS + WS + TLS(面板 UI 操作)

面板 → 入站列表 → **+ 添加入站**:

1. Remarks: `ws-tls-443`;端口: `443`;协议: `vless`。
2. 客户端:Email `ws-user`,ID 自动生成,Flow 留空。
3. 传输: `ws`;安全: `tls`。
4. TLS:证书选**指定文件路径**:
   - Public Key: `/root/cert/fullchain.pem`
   - Private Key: `/root/cert/private.key`
   - SNI/Server Name: `gia.yourdomain.com`;ALPN: `http/1.1`
5. WS Settings:Path 自定义如 `/ws5f8d2k1q`(不要和面板路径相同);Host: `gia.yourdomain.com`。
6. 保存。

## Step 9 添加备用节点:VLESS + Vision + REALITY(面板 UI 操作)

再点 **+ 添加入站**:

1. Remarks: `reality-2053`;端口: `2053`;协议: `vless`。
2. 客户端:Email `reality-user`,ID 点自动生成,**Flow 选 `xtls-rprx-vision`**。
3. 传输: `tcp`;安全: `reality`。
4. REALITY 参数:
   - Dest/Target: `www.microsoft.com:443`
   - SNI(Server Names): `www.microsoft.com`
   - 密钥对:点 **Get New Cert / 生成密钥对**,自动填入 Private Key 和 Public Key
   - Short ID: 点生成按钮填入一个
   - Fingerprint: `chrome`;SpiderX: `/`
5. 保存。

## Step 10 验证

VPS 上确认监听:

```bash
ss -tlnp | grep -E ':(443|2053|8443)\b'
```

本机验证 TLS(Mac 用 openssl;Windows 可用 Git Bash 的 openssl 或直接浏览器):

```bash
# 主用 WS 节点(443):应返回 Let's Encrypt 签给你的域名证书
echo | openssl s_client -connect gia.yourdomain.com:443 -servername gia.yourdomain.com 2>/dev/null | openssl x509 -noout -subject -enddate

# 备用 REALITY(2053):对伪装 SNI 应返回 www.microsoft.com 的真证书
echo | openssl s_client -connect gia.yourdomain.com:2053 -servername www.microsoft.com 2>/dev/null | openssl x509 -noout -subject
```

Windows 替代(PowerShell):浏览器打开 `https://gia.yourdomain.com:443`,点地址栏锁查看证书颁发者为 Let's Encrypt 即可(页面报协议错误属正常)。

## Step 11 客户端导入

面板里每个入站 → 二维码/链接按钮可导出 `vless://` 链接。

- **Windows:v2rayN**(GitHub Releases 下载带核心的 zip)→ 服务器 → 从剪贴板导入批量 URL → 粘贴链接 → 托盘右键「自动配置系统代理」。
- **macOS:V2Box**(App Store)或 FoXray → 从剪贴板导入链接 → 开启 VPN/代理。
- 日常用 WS+TLS 443 主节点;REALITY 2053 留给支持它的客户端。

---

## 日常维护

```bash
x-ui                 # 管理菜单(查看端口/路径、重置账号等)
systemctl status x-ui
x-ui update          # 面板升级
acme.sh --list       # 证书与续期时间
tail /var/log/x-ui/access.log    # xray 访问日志(按上文开启后)
cp /etc/x-ui/x-ui.db /root/x-ui-backup.db   # 配置备份(所有入站/账号都在里面)
```

## 故障排查

| 现象 | 处理 |
|---|---|
| 客户端连不上 REALITY | VPS 上 `ss -tlnp \| grep 2053` 有监听 → 检查客户端 pbk/sid/sni/fingerprint 是否与面板一致(fingerprint 必须非空),flow 是否 xtls-rprx-vision,设备时间偏差需 <2 分钟;服务端日志 `/var/log/x-ui/error.log` 出现 `authentication failed` 即客户端握手参数问题 |
| 连不上 WS 节点 | 域名是否灰云直连;path/host 是否一致;`journalctl -u x-ui -n 50` 看证书报错 |
| 面板打不开 | 端口 8443、路径末尾斜杠、`systemctl is-active x-ui` |
| 证书续期失败 | 多为 CF token 过期或 IP 白名单变动:重新 `export CF_Token=...` 后 `acme.sh --renew -d gia.yourdomain.com --ecc --force` |
| 证书到期前突然续期失败,`user/tokens/verify` 返回 `Invalid API Token` | 不一定是 IP 白名单问题,也可能是 CF Token 本身已过期/被撤销(即便用 Token 原本绑定的 IP 测试也会报同样的错)。需要重新在 Cloudflare 后台生成新 Token 并按 Step 4.2 重新设置 IP 白名单。 |
| VPS IP 被墙 | Cloudflare 把 `gia` 记录开橙云 → 主用 WS 节点(443)经 CDN 立即可用(面板 8443 同理),REALITY 备用节点此时失效 |
| 链式代理(proxy chain)测速正常但网站全部不通(客户端端口确认无误) | 常见于把本节点当"入口"、再接一个 SOCKS5 落地代理(比如 [IPRoyal](https://iproyal.com) 的 ISP Proxy)做"出口"的用法:设备 → 入口节点 → SOCKS5 落地(出口) → 目标网站。排查顺序:<br>**1. 先排除入口端口填错**:客户端里链式代理的入口端口必须是 443,不是 8443(面板端口);`journalctl -u x-ui --since '10 min ago' \| grep 'bad certificate'` 能看到误填 8443 的痕迹。<br>**2. 端口确认无误仍不通,问题大多在落地代理本身,不在本节点。** 直接在 VPS 上用 Python 原始 socket 模拟 SOCKS5 握手 + CONNECT 目标域名(绕开入口层单独测落地代理),按 RFC1928 发认证包后发 CONNECT 请求,看返回的 REP 码:`0x00`=放行,`0x02`=落地代理自己按规则拒绝了这个目标。<br>**3. 如果用的是 IPRoyal 这类 ISP/住宅代理,单个出口端口会随时间偶发劣化失效**(这是该类服务已知的稳定性特征,不是配置问题),到账号后台换一个该套餐下的其他端口/IP 通常就能立刻恢复,不需要重新折腾入口节点或反复更换 VPS 的 IP(换 IP 大多是徒劳的,因为问题根本不在入口这一侧)。 |

## 安全要点

- 面板随机路径 + 强密码;3x-ui 内置登录限速(5 次失败锁 15 分钟)。
- CF API Token 只给单域名 DNS 编辑权限,且锁定 VPS IP 白名单。
- 重装系统后 IP 可能变化:需同步更新 A 记录和 token 白名单。
- 定期 `x-ui update`;长时间不用建议关机停用。
- 交给 AI Agent 执行时:Token/密码通过交互输入或受保护的密钥文件传入,不要让 Agent 写进日志、文档或对话记录。

## 与旧版教程的差异

| 旧文章(2023) | 本 SOP(2026) |
|---|---|
| freessl.cn 手工 EAB 签证书 | acme.sh + CF DNS API,自动续期 |
| slobys/x-ui(已停更) | 3x-ui(持续维护,内置限速/fail2ban) |
| 单一 VLESS+WS+TLS | WS+TLS 443 主用(可切 CDN)+ REALITY 2053 备用 |
| Linux-NetSpeed 脚本装 BBR | 内核原生 sysctl,两条配置 |
| iptables 手工放行端口 | 默认无防火墙,仅在有防火墙的环境放行 443/2053/8443/80 |
| IP 登录面板(HTTP) | 域名 + 随机路径 + 有效证书 HTTPS |

> 免责声明:本文仅用于技术学习与个人合法用途,请遵守所在地区法律法规及 VPS 服务商条款。

第六步:使用 Agent 执行 VPS 节点部署

进入项目目录:

cd vps-node-agent

启动 Agent,让它读取当前目录里的 SOP.md。可以直接把这段提示词交给它:

请读取当前目录中的 SOP.md,并按照文档完成 VPS 节点部署。要求:
1. 连接 VPS
2. 初始化服务器环境
3. 安装所需组件
4. 配置 Xray
5. 配置 TLS
6. 创建 VLESS 节点
7. 输出客户端配置链接
8. 所需凭据见 .env,绝对不可明文输出
9. 创建并维护任务的 CLAUDE.md(或 AGENTS.md)及 PROGRESS.md

Agent 跑完之后会输出 VLESS URI 和节点信息。

第七步:验证节点

部署完成后会拿到一条 VLESS 链接,形如 vless://xxxx,导入客户端就能使用。

  • macOS:Shadowrocket
  • Windows:Clash Verge、v2rayN

导入后实际打开几个海外站点,确认节点能正常连接,再往下做扩展配置。

完整流程回顾

从买服务器到拿到可用节点,整个流程可以压成七步。

完整流程:七步

01

准备工具

VPS、域名、Cloudflare、Agent

02

购买 VPS

选 CN2 GIA 套餐下单

03

获取登录信息

KiwiVM 里取 IP、端口、密码

04

配置域名

DNS 解析加 API Token

05

准备部署环境

写好 .env 和 SOP.md

06

Agent 执行部署

从初始化到创建节点

07

验证节点

导入客户端确认连通

后续扩展:ISP Residential Proxy 链式代理

节点解决的是入口速度,出口 IP 决定平台把你当成哪个地区的用户。这套环境如果只是用来查资料、跑业务系统,到这里就够用了;如果还要运营海外社媒账号,需要在节点后面再接一层 ISP 住宅代理,最终结构是这样:

链式代理的连接顺序

你的电脑

本地客户端

VLESS 节点

负责入口速度

住宅代理

ISP Residential Proxy

目标平台

TikTok、Facebook 等

下一步是给这条链路加上出口:在 IPRoyal 买一个长期固定的 ISP 住宅 IP,之后再讲怎么用 Shadowrocket 和 Clash Verge 把链式代理配起来。

更多类似指南,
每周四送达。

主机评测、建站对比、性能优化技巧和插件推荐 — 每周为 WordPress 站长和建站者精选。