使用文档

🔓 公开文档 · 无需登录 管理台 文档

WARP 代理池 · 使用文档

一台服务器 = 多个独立出口 IP 的自动维护代理池。面向业务程序提供 SOCKS5 代理提取,免登录、公开可读;文中所有示例命令中的服务器地址均自动替换为当前访问地址,复制即用。

文档权限公开 · 免登录
服务地址正在读取…
API 鉴权IP 白名单
代理模式白名单免密 / 账密

🚀 快速开始(3 步)

# 第 1 步:把调用方 IP 加入白名单(只需一次;服务器本机执行任意一条) curl -X POST {{API_BASE}}/api/whitelist -H "Content-Type: application/json" -d '{"add":"你的IP"}' # 第 2 步:提取 5 个代理(txt 格式,每行一个 ip:port,轮换出口) curl -s "{{API_BASE}}/api/proxies?num=5&type=txt" # 第 3 步:白名单内的机器直接免密使用(白名单端口 = 实例端口 + 1000) curl -s --proxy "socks5://{{HOST}}:11010" https://api64.ipify.org
不需要登录:本页无需任何账号/凭据即可阅读;调用 API 也不需要 API Key,只要来源 IP 在白名单内(或服务器本机)即可。未在白名单时调用 API 会返回 401 A0001,响应里附带了加入白名单的命令。

🔑 两种接入方式

方式适用对象连接方式调用 API
白名单免密 白名单内的来源 IP 白名单端口 = 实例端口 +1000(如 10010 → 11010),不需要账密 免任何凭据
账号密码 任意 IP(未加白名单) 连实例端口(10010 起):socks5://warpuser:密码@服务器IP:端口 需先加入白名单
一句话记忆:在白名单里 → 用 +1000 的端口免密;不在白名单 → 用账号密码连原端口。账密模式可随时关闭/开启,密码可在管理台「账密模式」页修改。

🔄 提取代理

每次提取自动轮换一个出口 IP(Round-Robin,IPv6 出口每实例唯一)。选择 ip4 时,批量接口默认按公网 IPv4 去重;由于 IPv4 是共享 NAT 池,实际返回数量可能少于请求数量。

GET/api/pool/acquire原始提取接口,返回结构化 JSON(含出口 IP 详情)

参数(query):

参数说明必选
session_id粘性会话 ID:相同 ID 重复调用返回同一代理
minutes粘性时长(1~1440 分钟,默认 10),别名 sticky_minutes
ip_mode出口协议:ip6(默认,独立 IPv6)或 ip4(共享 IPv4 NAT)
# 普通提取(默认 IPv6) curl -s "{{API_BASE}}/api/pool/acquire?ip_mode=ip6" # IPv4 提取 curl -s "{{API_BASE}}/api/pool/acquire?ip_mode=ip4"
GET/api/proxies商用批量提取(CliProxy 风格),txt / json 两种格式
参数说明必选
num提取数量(1~20)否(默认 1)
typetxt(默认,每行 ip:port)/ json(含账密与出口 IP)
formattxt 行分隔符:n(默认 \n)/ rn(\r\n,方便 Windows)
sid粘性会话 ID:相同 sid 总是拿到同一个出口 IP
time粘性时长(分钟,1~1440,默认 10)
ip_mode出口协议:ip6(默认,独立 IPv6)/ ip4(IPv4 NAT)
# 提取 5 个(txt,白名单端口) curl -s "{{API_BASE}}/api/proxies?num=5&type=txt" # → {{HOST}}:11010 # → {{HOST}}:11011 # → … # 提取 5 个 IPv4 代理(JSON,默认去重) curl -s "{{API_BASE}}/api/proxies?num=5&type=json&ip_mode=ip4" # IPv4 按实例提取,允许重复出口 IP curl -s "{{API_BASE}}/api/proxies?num=5&type=json&ip_mode=ip4&unique_ip=0" # 提取 5 个 IPv6 代理(TXT) curl -s "{{API_BASE}}/api/proxies?num=5&type=txt&ip_mode=ip6" # JSON 中每项包含 ip_mode 与 ipv4 字段

📌 粘性会话(固定出口一段时间)

sid 提取后,同一 sid 在有效期内始终拿到同一出口 IP,适合登录态、需要多次请求保持同 IP 的业务。超时未使用自动释放,也可主动释放。

# 提取固定出口(30 分钟内此 sid 始终拿到同一出口) curl -s "{{API_BASE}}/api/proxies?num=1&type=json&sid=account-001&time=30" # 用完主动归还(可选,避免占用到超时) curl -s -X POST {{API_BASE}}/api/pool/release \ -H "Content-Type: application/json" -d '{"session_id":"account-001"}'
POST/api/pool/release释放粘性会话,归还实例
参数说明必选
session_id要释放的粘性会话 ID
result本次业务实际 HTTP 状态码(如 403),顺带上报用于统计

🏠 长效静态 IP(固定绑定)

把某个实例独占绑定给你:它的 IPv6 出口长期不变,不参与轮换、豁免自动换 IP,直到显式解绑。绑定状态持久化,服务器重启自动恢复。

POST/api/pool/dedicated/bind绑定:自动挑选可用实例,或指定实例,可批量
参数说明必选
name指定实例(如 warp-0);不传则自动挑选空闲健康实例
count自动挑选数量(1~20)
remark备注(如业务名)
curl -s -X POST {{API_BASE}}/api/pool/dedicated/bind -H "Content-Type: application/json" -d '{"remark":"订单业务"}' # → data.items[0] 里含 name / ip / proxy_auth / proxy_whitelist,可长期保存使用 # 查看绑定列表 / 修改备注 / 解绑 curl -s {{API_BASE}}/api/pool/dedicated curl -s -X POST {{API_BASE}}/api/pool/dedicated/remark -H "Content-Type: application/json" -d '{"name":"warp-0","remark":"新备注"}' curl -s -X POST {{API_BASE}}/api/pool/dedicated/unbind -H "Content-Type: application/json" -d '{"name":"warp-0","force":true}' # force=true 时解绑后立即换 IP(该 IP 已被独占使用过)
GET/api/pool/dedicated/history绑定/解绑历史记录
注意:固定的是每实例唯一的 IPv6 出口;IPv4 出口是共享 NAT 池动态轮换,无法固定(WARP 架构决定的)。

🔄 换 IP 与状态上报

POST/api/pool/rotate换 IP = 停止进程 → 重新注册账号 → 轮换接入点 → 重启。异步任务,返回 jobId
参数(body)说明必选
pool_key换指定实例(纯实例索引,如 "0");固定绑定实例需 force=true
session_id换该会话对应的实例
(空 body)换全部实例(固定绑定实例自动排除)
force对固定绑定实例强制换 IP(换后仍保持绑定)
# 换所有实例(常见:想换一批新出口时) curl -s -X POST {{API_BASE}}/api/pool/rotate # → {"code":"00000","data":{"jobId":3}} ← 用 jobId 轮询进度 curl -s {{API_BASE}}/api/job/3 # → {"code":"00000","data":{"id":3,"status":"running","current":0,"total":20,"logs":[...]}}
POST/api/pool/report上报业务方真实 HTTP 状态码(SOCKS5 层读不到 HTTPS 状态码,用于 403 统计与自动换 IP)
参数(body)说明必选
session_id会话 ID
result真实 HTTP 状态码(数字,如 403)
curl -s -X POST {{API_BASE}}/api/pool/report \ -H "Content-Type: application/json" -d '{"session_id":"account-001","result":403}'

自动换 IP 规则:检测次数 ≥ cf_min_check_count(默认 3)且 403 率 ≥ cf_403_threshold(默认 50%)时自动重新注册账号换出口;健康巡检发现实例异常也会自动重建。固定绑定实例豁免所有自动换 IP。

GET/api/pool/status代理池整体状态:总数 / 可用 / 使用中 / 不健康 / 固定绑定 + 每实例明细
curl -s {{API_BASE}}/api/pool/status # → data: { total:20, available:20, in_use:0, unhealthy:0, dedicated:0, # instances:[{ pool_key, port, ip, health, status, proxy, proxy_auth, proxy_whitelist, ... }] }

⚙️ 实例管理(运维)

这些接口用于运维管理,管理台页面已封装,一般接入业务用不到。

接口方法参数说明
/api/containersGET-全部实例状态(port / ip / endpoint / health / pool_status / ip_risk / dedicated)
/api/checkGET-服务与关键依赖检查(sing-box/wgcf 是否存在、池容量、可用数)
/api/statsGET-实例统计汇总
/api/createPOST{"count":N}创建 N 个新实例
/api/deletePOST{"name"} 或 {"names":[]}删除实例(固定绑定需 force=true)
/api/rebuildPOST{"name"} 或 {"names":[]}重建实例(重新注册账号 + 轮换接入点)
/api/startPOST{"name"} 或 {"names":[]}启动实例
/api/stopPOST{"name"} 或 {"names":[]}停止实例
/api/job/:idGET-查询创建/重建/换 IP 任务的进度与日志

🛡️ 白名单与账密

GET/POST/api/whitelist白名单查询 / 增删(改动后自动热更新全部实例,出口 IP 不变)
# 查询(含每个条目的归属地) curl -s {{API_BASE}}/api/whitelist # 添加(可带备注)/ 批量添加 / 删除 curl -s -X POST {{API_BASE}}/api/whitelist -H "Content-Type: application/json" -d '{"add":{"ip":"1.2.3.4","remark":"公司出口"}}' curl -s -X POST {{API_BASE}}/api/whitelist -H "Content-Type: application/json" -d '{"add":["1.2.3.5","10.0.0.0/24"]}' curl -s -X POST {{API_BASE}}/api/whitelist -H "Content-Type: application/json" -d '{"remove":"1.2.3.4"}'
本机特权:服务器本机(127.0.0.1/::1)始终放行,即使白名单为空也可调用全部 API。白名单为空时,外部 IP 调用 API 一律返回 401 A0001
POST/api/creds/set修改全局代理账密(用户名/密码),热更新全部实例,出口 IP 不变
POST/api/creds/reset重置全部账密(随机生成新密码)
curl -s -X POST {{API_BASE}}/api/creds/set \ -H "Content-Type: application/json" -d '{"username":"warpuser","password":"MyNew-Pass-123"}' # 密码仅允许字母数字/下划线/连字符;改后立即生效,旧密码全部失效

📐 配置管理

GET/POST/api/config查看 / 修改运行配置(team_token 仅显示前 6 位)
# 查看配置 curl -s {{API_BASE}}/api/config # 修改常用项(保存即生效) curl -s -X POST {{API_BASE}}/api/config -H "Content-Type: application/json" \ -d '{"resident_count":20, "sticky_minutes":10, "cf_403_threshold":50}' # 常用白名单字段:resident_count / sticky_minutes / auto_rebuild_on_unhealthy / # auto_rotate_on_high_403 / cf_403_threshold / cf_min_check_count / # ip_risk_check / ip_risk_threshold / rate_limit_per_minute / proxy_auth_enabled / team_token 等

🗺️ 服务区配置(出口地区)

出口 IP 的地区由服务器就近接入的 Cloudflare 边缘节点(colo)决定,与实例数、账号数、隧道协议均无关。换服务区 = 换机房部署,无法在服务器内切换地区。

值(当前实测)
边缘节点LAX(洛杉矶)
IPv4 出口104.28.195.186/187104.28.227.186/187(节点 NAT 池,4 个)
IPv6 出口2a09:bacx::/29(每实例唯一)
可用 endpoint188.114.96.1188.114.97.1188.114.96.2188.114.96.3(UDP 2408)

工作原理:服务启动时对内置 endpoint 列表做 UDP 连通性探测,剔除不可用项;实例按索引轮询分配 endpoint(idx % 列表长度),换 IP 时轮换到下一个 endpoint,避免同端点换 IP 后出口仍相同。出口位置无法在本机内切换。

需求做法
保持当前地区无需配置,默认就近接入
更换出口地区在目标地区的机房部署一台新服务器(不同机房 → 不同边缘节点 → 不同出口地区,且每台额外贡献 4 个 IPv4 出口)
自定义 endpoint 列表修改 server.jsWARP_ENDPOINTS 常量后重启(新端点需实测确认能承载流量)
提示:N 台不同地区服务器 = 4N 个 IPv4 出口 + 20N 个 IPv6 出口,是增加出口地区与 IPv4 数量的唯一途径。

🔢 推荐实例数(按服务器配置)

每个实例是一个独立的 sing-box run 进程,实测内存约 15MB/实例,CPU 空闲占用很低。单机实例数上限 max_instances=200

服务器配置推荐实例数说明
1 核 1G20最小可用(当前生产即此规模)
2 核 2G50常规够用
2 核 4G100中大规模
4 核 8G200系统上限
估算依据:实例内存约 15MB/个 + 系统与 sing-box 基础开销,建议为服务器预留 30%~50% 内存余量;CPU 主要消耗在批量创建/重建与高并发转发,日常巡检空闲占用低。
# 常驻实例数(管理台「配置」或 API 修改,保存即生效,自动补齐/缩容) curl -s -X POST {{API_BASE}}/api/config \ -H "Content-Type: application/json" -d '{"resident_count":50}'

扩缩容注意:批量创建/重建会触发 Cloudflare 注册 API 429 限流(内置退避重试,建议 max_concurrent_create 默认 3 控制并发);缩容从端口最大的实例开始删除,固定绑定实例自动排除;单机达 200 上限后仍需更多出口,请部署多台服务器。

📊 用量统计

GET/api/usage每日提取/粘性/释放/上报/换IP/绑定次数(数据概览图表的来源)
curl -s "{{API_BASE}}/api/usage?days=30" # → data: { days:[{ date:"2026-08-18", acquires:0, sticky:0, releases:0, # reports:0, rotates:0, binds:0, unbinds:0, total:0 }, ...] }

🖥️ 管理台操作

管理台入口为 /,文档入口为 /docs。管理台按功能分为数据概览、流量代理、长效静态 IP、白名单管理和实例管理。

页面主要用途常用操作
数据概览查看容器、实例、可用数、使用中、不健康、独立 IP、固定绑定和活跃会话查看近 30 天用量;添加白名单或一键添加当前 IP;进入代理提取、静态 IP、白名单管理
API 白名单模式生成批量提取链接选择 txt/json、IPv4/IPv6、轮换/Sticky、数量和换行符;复制链接或直接打开;可切换白名单列表批量删除
账密模式使用代理账号密码连接实例端口查看/复制账密,修改密码,生成 HTTP(S)/SOCKS5 示例和代理列表(1~200 条)
长效静态 IP管理长期固定的 IPv6 出口绑定、搜索、复制、编辑备注、导出、批量解绑;切换使用记录/历史记录;可重置全部账密
白名单管理管理 API 免 Key 和白名单端口来源支持 IPv4、IPv6、CIDR;搜索、编辑备注、批量删除、查看归属地、一键添加当前 IP
实例管理管理 WARP 实例生命周期调整实例数、粘性时长、403 自动换 IP、账密开关;创建/重建、启停、删除、换 IP、查看任务日志
端口规则:实例主端口从 base_port(默认 10010)开始递增;白名单端口 = 主端口 + whitelist_port_offset(默认 1000)。白名单端口仅允许白名单来源且免密,主端口是否需要账密由账密模式开关决定。

🔐 管理台登录与鉴权

管理台页面公开可打开,但管理接口需要登录。点击右上角「登录」,使用配置中的 API Key 换取会话 Token;登录成功后会话默认有效 30 天,浏览器会保存登录状态。

POST/api/loginAPI Key 换取管理台会话 Token
curl -s -X POST {{API_BASE}}/api/login \ -H "Content-Type: application/json" -d '{"key":"你的API Key"}' # 成功返回 data.token;expires_in 为有效秒数,api_key_hint 仅显示脱敏提示

注意:管理台登录 Token 只用于管理接口,不会替代代理提取接口的来源 IP 白名单。外部调用 API 仍需把调用方 IP 加入白名单;服务器本机 127.0.0.1 / ::1 始终放行。

登录保护:API Key 连续输错 5 次会锁定当前来源 60 秒。不要把 API Key 写入前端代码、公开脚本或代理列表。

🧰 高级配置与自动维护

常用配置

配置默认值说明
resident_count5常驻实例数;保存后自动补齐或缩容
max_instances200单机实例上限
min_available5可用实例不足时触发补充
max_concurrent_create3创建/重建并发数,降低 Cloudflare 429 风险
health_check_interval600 秒健康巡检间隔;配合自动重建使用
auto_rebuild_on_unhealthytrue实例异常时自动重建;最多由 max_rebuild_attempts 控制
auto_rotate_on_high_403true403 统计达到阈值后自动换 IP
cf_403_threshold / cf_min_check_count50 / 3403 比例阈值与最少统计次数
ip_risk_check / ip_risk_thresholdtrue / 70使用 Scamalytics 风控检测,达到阈值自动换 IP
rate_limit_per_minute60代理池及管理操作的接口限流
proxy_auth_enabledtrue主端口是否启用用户名密码;切换会热更新实例且不改变出口 IP

WireGuard 与 MASQUE

warp_transport 默认为 wireguard;设置为 masque 时使用 usque 引擎,通过本机独立 SOCKS 端口承载 WARP 流量,适合服务器 UDP/WireGuard 受限的网络。masque_http2 可启用 HTTP/2 传输;修改后需重建或重启相关实例。

Teams Token

team_token 中填写 WARP Teams Token 后,新注册账号会按 Teams 方式创建(用于团队/无限流量场景)。GET 配置接口只返回 Token 前 6 位;不要在文档、日志或截图中暴露完整 Token。

固定绑定影响:长效静态 IP 实例会从普通代理池中排除,并豁免自动换 IP和自动重建;如需更换其出口,必须显式传 force=true,换 IP 后仍保留绑定关系。

⚠️ 统一响应格式与错误码

所有 JSON 接口统一返回 { "code": "00000", "msg": "", "data": {} }code 为 5 位错误码,00000 代表成功。

code含义(HTTP)怎么办
00000成功
A0001来源 IP 不在白名单(401)按响应中的 hint 命令把 IP 加入白名单
A0002请求过于频繁(429)稍后再试(默认限 60 次/分钟,可调)
P0001无可用代理实例可能都在恢复/被绑定,稍等或到管理台查看
S0001会话不存在或已过期重新提取一次
D0001实例被固定绑定保护确认要操作就传 force=true
I0001 / I0002参数错误 / 资源不存在检查参数拼写与数值范围
R0001实例操作失败查看任务日志(/api/job/:id)定位原因
99999系统内部异常查看服务端日志

💻 代码示例

Python(requests + pysocks):

import requests # 1) 提取代理(普通轮换:每次调用换出口) r = requests.get("http://SERVER:4433/api/pool/acquire", timeout=10) proxy = r.json()["data"]["proxy"] # 如 socks5://IP:10010 print("出口代理:", proxy) # 2) 走 SOCKS5 发起业务请求 resp = requests.get( "https://api64.ipify.org", proxies={"http": proxy, "https": proxy}, # 需要 pip install pysocks timeout=15, ) print("出口 IP:", resp.text) # 3) 粘性会话:多次请求同一出口 IP sess = requests.get("http://SERVER:4433/api/proxies?num=1&type=json&sid=task-01&time=30", timeout=10) p = sess.json()["data"]["proxies"][0] proxies = {"http": p["proxy"], "https": p["proxy"]} for i in range(3): ip = requests.get("https://api64.ipify.org", proxies=proxies, timeout=15).text print(f"第{i+1}次出口: {ip}") # 3 次都是同一个 IP

命令行批量提取后逐个使用:

# 提取 10 个 txt,然后循环使用 curl -s "{{API_BASE}}/api/proxies?num=10&type=txt&format=n" > proxies.txt while IFS= read -r line; do curl -s --max-time 15 --proxy "socks5h://$line" "https://api64.ipify.org" echo " <- $line" done < proxies.txt

❓ 常见问题

Q:调用 API 提示 401 / A0001 怎么办?
来源 IP 不在白名单。SSH 到服务器执行响应信息里给出的 curl 命令添加,或让白名单内的人帮你在管理台「白名单管理」页添加(会自动识别归属地)。
Q:文档需要登录吗?
不需要。本页是公开页面,任何人都能直接打开阅读;文中示例已自动替换成当前访问的服务器地址,复制即可用。
Q:账号密码在哪里看?
管理台 → 账密模式。一套账密(默认用户名 warpuser)适用于所有端口,密码可修改或重置,改后立即生效。
Q:怎么让某个业务一直用同一个 IP?
短期(分钟级)用粘性会话 sid;长期用「长效静态 IP」绑定,IPv6 出口固定到解绑为止。
Q:粘性会话和长效静态 IP 有什么区别?
粘性会话是临时固定(默认 10 分钟、最长 1440 分钟,超时自动释放);长效静态 IP 是独占绑定、长期不变,直到手动解绑。前者适合短任务,后者适合长期固定出口。
Q:能选国家/地区吗?
不能。出口位置由服务器就近的 Cloudflare 节点决定(当前为 LAX 洛杉矶)。换地区需要在不同机房部署新服务器,每台还能额外增加 4 个 IPv4 出口。
Q:IPv4 和 IPv6 出口有什么区别?
每个实例有唯一的 IPv6 出口(对外按 IP 轮换就是靠它);IPv4 出口是边缘节点共享的 NAT 池,同一服务器固定 4 个、动态轮换,无法作为大量唯一 IP 使用。目标站支持 IPv6 时优先走唯一 IPv6 出口。
Q:能过 OpenAI 网页/注册吗?
不能。WARP 出口是数据中心 IP(AS13335),会被 Cloudflare 质询拦截(403)。但 api.openai.com、Grok、Anthropic、DeepSeek、OpenRouter 等大模型 API 全部可用——已注册 Key 的 API 调用不受影响。
Q:提取后出口 IP 偶尔相同?
Round-Robin 按实例轮换,20 个实例就有 20 个唯一 IPv6 出口,正常情况下连续提取不相同;若部分实例正在恢复/重建,可用池变小,循环一圈后可能重复,稍后再提取即可。