CryptoVpsHost 技术文档 - KVM VPS 离岸服务器设置与管理指南
五分钟 · 第一台服务器

快速开始

  1. 01

    创建账户

    只需邮箱和密码,无需手机号,无需身份证件。会话保持 30 天,可在设置中撤销。

    前往注册 →
  2. 02

    充值余额

    向一次性地址发送任意受支持的币种。资金确认时,我们按当时汇率以美元参考值入账。

    充值流程 →
  3. 03

    部署第一台服务器

    选择套餐、地区和操作系统镜像,粘贴 SSH 密钥。部署耗时 30–90 秒。

    打开配置器 →
  4. 04

    通过 SSH 连接

    默认仅支持密钥登录。从控制面板复制 IPv4 地址,以 root 身份登录,再按需修改配置。

    SSH 详情 →
01 · 入门

入门

从一无所有到拥有一台可以 SSH 登录的服务器,最短路径只有四步。每一步都无需与任何人交谈,也无需身份证件。

  1. 创建账户。邮箱和密码即可。邮箱仅用于数据泄露通知和金丝雀声明提醒——我们绝不会将其用于营销。
  2. 充值余额。我们不保存任何支付方式。你向一次性地址发送任意受支持的加密货币,待充值确认后,我们会以美元参考值将金额记入你的账户余额。
  3. 部署服务器。选择套餐、地区和操作系统镜像,粘贴 SSH 公钥。部署耗时 30–90 秒。
  4. 连接。通过 SSH 连接控制面板显示的 IPv4 地址,使用你上传的 SSH 密钥以 root 身份登录。
02 · 账户

账户

注册

邮箱加密码。密码使用 bcrypt 哈希(cost factor 为 12)。邮箱会被规范化为小写并哈希后用于查找,绝不会与明文存放在一起。除基本的语法检查外,我们不会验证邮箱是否“真实”——你可以使用任何你能控制的地址。

会话

登录会创建一个 30 天滚动有效的会话,该会话绑定到存放在 HttpOnly、Secure、SameSite=Lax Cookie 中的设备专属密钥。每个浏览器都是独立的会话;你可以在账户 → 安全中查看并撤销这些会话。

双因素认证

有两种方式:

  • TOTP——RFC 6238,30 秒时间窗口,SHA-1(兼容所有身份验证器应用)。恢复码仅在设置时生成一次,且只显示这一次。
  • WebAuthn(FIDO2)——硬件密钥、平台身份验证器(Touch ID、Windows Hello)。可注册多个密钥。

启用 2FA 后,登录、修改密码、创建 API 令牌和删除账户时都需要验证。而在已登录的会话中部署服务器时不需要——在这里拖慢你的操作并不合适。

删除账户

删除账户可在账户 → 安全 → 删除账户中自助完成。流程如下:

  1. 所有服务器都会被销毁(不可撤销,没有宽限期)。
  2. 剩余余额将作废(我们没有办法退还——加密货币退款需要一个经你验证的地址,而这本身就是一个 KYC 环节)。
  3. 账户记录会被替换为一块“墓碑”(ID 加删除时间戳)。邮箱哈希、密码哈希、会话、令牌、SSH 密钥:全部清除。
  4. 账单历史记录会保留 13 个月,用于欺诈对账,且不附带任何个人身份信息(PII)。
03 · 账单与余额

账单与余额

充值流程

在账户 → 账单 → 充值中:

  1. 选择币种和金额(以美元参考值计)。
  2. 我们会生成一个一次性收款地址,并将汇率锁定 30 分钟。
  3. 你发送资金,我们等待所需的确认数(见下表)。
  4. 确认后,你的账户余额按锁定汇率入账。超出部分按确认时的即期汇率入账。

支持的币种与确认数

币种最低充值额确认数典型等待时间
比特币(BTC)$102约 20 分钟
门罗币(Monero,XMR)$510约 20 分钟
莱特币(LTC)$56约 15 分钟
以太坊(ETH)$1530约 6 分钟
波场(TRX)$520约 1 分钟
USDT · ERC-20$1530约 6 分钟
USDT · TRC-20$1020约 1 分钟
索拉纳(Solana,SOL)$532约 1 分钟
比特币闪电网络(Lightning)$1不适用(链下)数秒

按周期预付模式

每台服务器都从账户余额中按周期预付,周期可选 1、3、6 或 12 个月,对应的折扣分别为 0%、25%、35% 和 50%。整个周期的费用在部署时一次性扣除,且不会自动续费。

  • 余额充足时,该周期的费用会立即扣除,服务器随即部署。余额不足时,部署会被拒绝,也不会扣除任何费用。
  • 如果在周期结束前你没有订购新周期,服务器就会到期:被标记为 suspended 并停止接收流量。
  • 你有 7 天时间订购新周期。7 天后,服务器将被销毁,其 IP 被释放,磁盘被擦除。

账单历史

每一笔明细都在账户 → 账单 → 账单历史中:充值、各服务器的周期扣费,以及适用时的 SLA 补偿。每一行都有固定的 ID 可供引用,并可导出为 CSV。

04 · 服务器生命周期

服务器生命周期

部署

在任意套餐上点击配置,或通过 API 部署。新服务器会依次经历以下状态:

  • provisioning——我们正在分配虚拟机。耗时 30–90 秒。
  • installing——正在写入操作系统镜像并运行 cloud-init。耗时 30–120 秒。
  • running——服务器已启动,可通过 SSH 访问。
  • stopped——已正常关机。服务器停止期间,已预付的周期仍在计时,磁盘和 IP 仍保持分配。
  • suspended——周期已结束,且未订购新周期。服务器已关闭,无法访问。销毁前有 7 天宽限期。

重启与重建

两个经常被混淆的操作:

  • 重启会向客户机发送 ACPI 关机信号,等待 30 秒后再重新开机。磁盘内容会被保留。在 API 调用中添加 ?hard=true(或在界面中开启“硬重启”开关)即可跳过 ACPI 步骤。
  • 重建会从头重新安装操作系统镜像。磁盘上的所有数据都会被销毁。Cloud-init 会再次运行。想要全新开始又不想重新创建服务器时,就用它(IPv4 和 IPv6 保持不变)。

救援模式

救援模式会从一个基于 Alpine 的小型 ISO 引导服务器,并运行在 4 GB 的 tmpfs 中。你的磁盘处于未挂载状态,可通过 /dev/vda、/dev/vdb 等访问。可用它来:

  • 恢复你把自己锁在外面的系统(忘记 root 密码、sudo 损坏等)。
  • 手动解锁经 LUKS 加密的根卷。
  • 对损坏的文件系统运行 fsck。
  • 为即将销毁的磁盘制作镜像转储。

执行一次重启即可退出救援模式。下次启动时会重新使用正常磁盘。

销毁

销毁不可撤销。磁盘会被零覆写,IPv4 在 24 小时冷却期后回到地址池(避免你可能已在 DNS 中发布的地址被立即复用),IPv6 /64 则立即回到地址池。由于不存在自动续订,服务器的周期会随之终止,之后不会再产生任何扣费。

05 · SSH 与访问

SSH 与访问

每台服务器开通时都只启用基于密钥的 SSH。我们提供的默认 sshd_config 已禁用密码认证;你可以自行重新启用,但我们强烈建议不要这样做。

SSH 密钥

在账户 → SSH 密钥中添加密钥,粘贴任意 OpenSSH 格式的公钥即可。我们接受:

  • ssh-ed25519——推荐。简短、快速、现代。
  • ssh-rsa——3072 位或更长。(更短的会被拒绝。)
  • ecdsa-sha2-nistp256 / nistp384 / nistp521——可接受,但不推荐。

每个账户可有多个密钥,每台服务器也可有多个密钥。服务器授权列表中的任意密钥都可以登录。

推荐的 ~/.ssh/config

~/.ssh/config
Host nokyc-*
    User root
    IdentityFile ~/.ssh/id_ed25519_nokyc
    IdentitiesOnly yes
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlPersist 10m
    ServerAliveInterval 60
    ServerAliveCountMax 3

然后,对于 IPv4 为 198.51.100.42 的服务器:

Host nokyc-edge
    HostName 198.51.100.42

之后直接运行 ssh nokyc-edge 即可。

救援模式下的 SSH

救援 ISO 在启动时会注入同一组 SSH 密钥。救援主机的指纹与你正常主机的指纹不同——这是正常现象,并非中间人攻击。救援指纹显示在控制面板的控制台中。

06 · 网络

网络

IP 地址

  • IPv4——每台服务器一个,已包含在套餐内。目前不单独出售额外的 IPv4(我们对 v4 地址的分配十分谨慎)。
  • IPv6——每台服务器一个已路由的 /64,免费。该前缀内的地址可随意使用;我们不会过滤你地址块内的源地址。
  • 所有地址在服务器的整个生命周期内保持不变。重建操作系统不会改变它们。

反向 DNS

在服务器 → 网络 → 反向 DNS 中设置,或通过 POST /servers/{id}/rdns。更改将在 5 分钟内生效。我们不会验证你是否真的控制对应的正向记录——rDNS 由你随意设置。

防火墙

分为两层:

  1. 边缘过滤器(可选,可按服务器单独配置)。有状态,默认丢弃,仅按你提供的规则放行。它运行在 hypervisor 上,能让客户机根本收不到被拦截的流量。适用于希望在客户机看到数据包之前就强制执行的第 4 层规则。
  2. 客户机防火墙(完全由你掌控)。nftables、iptables、pf,你的操作系统自带什么就用什么。我们不会去动它。

DDoS 防护

针对流量型攻击的缓解始终开启,部署在我们 PoP 的上游。无需任何启用操作。阈值如下:

  • < 10 Gbps:悄然吸收。
  • 10–100 Gbps:在传输(transit)运营商处清洗。你可能会看到短暂的延迟上升。
  • > 100 Gbps:通过 BGP 宣告到专用清洗路径。延迟上升更明显,但服务仍可访问。
  • 将某个 IP 做黑洞路由(null-route)这种“核选项”,只会用于威胁整个 PoP 的持续攻击。一旦发生,我们会在几分钟内通知你。
07 · 操作系统

操作系统

镜像目录会在上游每次发布小版本时刷新。最右列的 image_id 就是你传给 API 的值。

系列版本架构初始化image_id
Debian 11 (bullseye), 12 (bookworm), 13 (trixie) amd64, arm64 cloud-init debian-13-minimal
Ubuntu 20.04, 22.04, 24.04 LTS amd64, arm64 cloud-init ubuntu-24.04
Alpine 3.18, 3.19, 3.20 amd64, arm64 cloud-init(社区版) alpine-3.20
Arch 滚动更新(每周快照) amd64 cloud-init arch-rolling
Fedora 39, 40, 41 amd64 cloud-init fedora-41
Rocky 9(兼容 RHEL) amd64 cloud-init rocky-9
OpenBSD 7.4, 7.5 amd64 手动 / autoinstall openbsd-7.5
FreeBSD 13.3, 14.0 amd64 cloud-init freebsd-14
NixOS 24.05 amd64 nixos-rebuild nixos-24.05
自定义 任意(可上传 ≤ 4 GB 的 ISO) amd64, arm64 取决于你的 ISO custom

cloud-init user-data

任何标有“cloud-init”的镜像都可以在部署时接收 user-data 数据块,最大 64 KiB。以下示例用于一台安装 WireGuard 并设置主机名的 Debian 服务器:

user-data.yaml
#cloud-config
hostname: edge-paris
manage_etc_hosts: true

package_update: true
packages:
  - wireguard
  - nftables
  - mosh

write_files:
  - path: /etc/wireguard/wg0.conf
    permissions: '0600'
    content: |
      [Interface]
      PrivateKey = REDACTED
      Address    = 10.10.0.1/24
      ListenPort = 51820

runcmd:
  - systemctl enable --now nftables wg-quick@wg0
  - sed -i 's/#PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
  - systemctl restart ssh

自定义 ISO

通过 POST /images 上传(或在账户 → 镜像 → 上传中操作),最大 4 GiB。ISO 必须能以 BIOS 或 UEFI 模式启动(我们两种模式都提供)。上传后,镜像会获得形如 custom-9f4a2b1c 的 ID,并可在任何部署流程中选用。

08 · API 参考

API 参考

基于 HTTPS 的 REST。请求和响应均为 JSON。列表端点采用游标分页。所有 POST 请求都支持通过 Idempotency-Key 头传入幂等键。

基础 URL
https://api.cryptovpshost.com/v1
Tor 洋葱镜像
CryptoVpsHostapixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion/v1
TLS
最低 TLS 1.3。证书固定到我们的中间 CA——通过 TLSA 记录发布在 DNS 中。
接口描述
OpenAPI 3.1 规范位于 /v1/openapi.json

身份验证

Bearer 令牌,请求头为 Authorization: Bearer <token>。令牌在账户 → API 令牌中创建,可选三种权限范围之一:

  • read——对除账单外所有资源的只读访问。
  • write——读取,外加创建、更新和销毁。无法生成新的充值地址。
  • billing——write 能做的一切,外加账单相关端点。

令牌只会在创建时显示一次。我们在服务端只保存其 SHA-256 摘要;如果令牌丢失,请轮换它。

端点

方法路径说明
GET /servers 列出你的服务器(分页,基于游标)。
POST /servers 创建新服务器。立即返回处于 provisioning 状态的资源。
GET /servers/{id} 获取单个服务器;部署完成后会包含其 IP 地址。
DELETE /servers/{id} 销毁服务器。不可撤销。返回 202 Accepted。
POST /servers/{id}/reboot 软重启(ACPI)。如需断电重启(power-cycle),请使用 ?hard=true。
POST /servers/{id}/rebuild 从镜像重新安装。磁盘上的所有数据都会被销毁。
POST /servers/{id}/rescue 引导进入救援 ISO(基于 Alpine,4 GB tmpfs)。
POST /servers/{id}/rdns 为服务器的 IPv4 和/或 IPv6 设置反向 DNS。
GET /servers/{id}/console 返回 noVNC 控制台的一次性签名 URL(5 分钟内有效)。
GET /servers/{id}/metrics 过去 30 天的 CPU、RAM、磁盘和带宽汇总数据。
GET /images 列出可用的操作系统镜像,包括自定义上传的镜像。
POST /images 上传自定义 ISO。multipart/form-data,最大 4 GB。
GET /regions 列出各地区及其当前可用于新部署的情况。
GET /plans 列出 VPS 和独立服务器套餐及当前价格。
GET /billing/balance 以美元参考价值及各受支持币种显示的账户余额。
GET /billing/ledger 交易历史(充值、周期扣费、入账)。
POST /billing/topup 为指定币种生成一次性充值地址。
GET /ssh-keys 列出与账户关联的 SSH 密钥。
POST /ssh-keys 添加 SSH 密钥(解析 OpenSSH 格式)。
DELETE /ssh-keys/{id} 删除 SSH 密钥。
GET /account/tokens 列出 API 令牌。权限范围(scope):read、write、billing。
POST /account/tokens 创建新的 API 令牌。仅返回一次,之后不会再显示。

示例

创建服务器:

curlPOST /v1/servers
curl https://api.cryptovpshost.com/v1/servers \
  -H "Authorization: Bearer $NOKYC_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name":     "edge-paris",
    "plan":     "vps-s2",
    "region":   "par",
    "image":    "debian-13-minimal",
    "ssh_keys": ["k_5f3a8c91"],
    "user_data_b64": null
  }'

响应(HTTP 201 Created):

json响应
{
  "id":         "srv_8a1f2c34",
  "name":       "edge-paris",
  "status":     "provisioning",
  "plan":       "vps-s2",
  "region":     "par",
  "image":      "debian-13-minimal",
  "ipv4":       null,
  "ipv6":       null,
  "created_at": "2026-05-12T08:47:12Z",
  "ssh_keys":   ["k_5f3a8c91"]
}

重启它:

curl -X POST https://api.cryptovpshost.com/v1/servers/srv_8a1f2c34/reboot \
  -H "Authorization: Bearer $NOKYC_TOKEN"
# 202 Accepted

错误码

所有错误都以 JSON 形式返回,结构为 {"error": {"code": "...", "message": "...", "errors": [...]}}。

HTTP错误码含义
400 invalid_request 请求体或查询参数未通过校验。各字段的详细信息见 errors[]。
401 unauthenticated 缺少 Bearer 令牌,或令牌已过期。
403 forbidden_scope 该令牌不具备此端点所需的权限范围(scope)。
404 not_found 资源不存在,或对你的账户不可见。
409 conflict_state 资源当前所处状态不允许执行此操作(例如重建一台正在重建的服务器)。
422 unprocessable 请求体已解析,但语义校验失败(例如所选套餐在该地区不可用)。
429 rate_limited 超出速率限制窗口。响应中包含 Retry-After 头。
451 jurisdictional_block 该端点因法律原因被拒绝。公开的金丝雀声明已更新。
500 internal 服务器端错误。仅应重试幂等操作。
503 maintenance 计划维护窗口期间,该端点暂时不可用。

速率限制

每个令牌每分钟 60 次请求,允许 10 次请求的突发。令牌桶以每秒 1 次请求的速度补充。每个响应都会携带以下头部:

X-RateLimit-Limit:     60
X-RateLimit-Remaining: 57
X-RateLimit-Reset:     1747049892

如果超出限额,你将收到 HTTP 429,并附带以秒为单位的 Retry-After 头。部署类端点使用单独且更宽松的限额(200 次/分钟),因为它们天然具有突发性。

09 · 安全与隐私

安全与隐私

磁盘加密

我们不会替你加密磁盘。你可以在安装时通过 cloud-init 选择启用 LUKS(救援 ISO 会在每次启动时提示你输入口令)。我们不自动加密的原因:

  • 用我们持有的密钥进行自动加密只是作秀——一旦被迫,我们就能交出密钥。
  • 用你持有的密钥进行自动加密,会导致无人值守的重启无法进行。
  • 两种模式都可用;取舍由你来选。

金丝雀声明

我们每天签署并发布一份金丝雀声明,地址为 https://cryptovpshost.com/canary.txt,其分离式 PGP 签名位于 canary.txt.sig。声明包含:

  • 当前日期的时间戳。
  • 一条我们事先无法预料的当前新闻的标题(作为时效证明)。
  • 一份明确声明清单,列明我们没有收到的各类命令。

当其中某项声明将变为不实时,我们会选择让金丝雀声明停止更新。请把长时间的沉默(> 48 小时)视为一种信号。

Tor 洋葱镜像

网站和 API 都以 v3 洋葱服务(onion service)的形式提供镜像。其主机名以 TXT 记录的形式发布在 cryptovpshost.com 的 DNS 中,并每年轮换。通过 Tor 路由的客户端可这样查询:

dig +short TXT _onion.cryptovpshost.com
# "v3 CryptoVpsHost...........................................onion"
# "v3 CryptoVpsHostapi........................................onion/v1"

我们记录什么

简而言之:

数据保留期限用途
登录事件(时间戳、国家,粒度到城市)30 天用于入侵检测。仅记录国家,来源于 MaxMind GeoLite,不存储 IP。
API 请求日志行(方法、路径、状态码,不含请求体)7 天用于调试。7 天后轮转,不留存档。
账单历史13 个月用于对账。不附带个人身份信息。
每台服务器的网络探测数据(在线率、延迟)90 天用于 SLA 计算和公开状态页。
客户机 VM 流量(NetFlow、抓包)0这两者我们都不收集。
10 · 教程

教程

由真正在运行这些东西的人撰写。每篇都是一份可直接复制粘贴的完整流程——不会让你在五十个标签页的营销内容里绕来绕去。

11 · 故障排查

故障排查

我的部署已经处于“provisioning”状态超过 5 分钟

部署通常需要 30–90 秒,超过 3 分钟就不正常了。请先查看状态页,确认你所在地区是否有故障。如果状态页一切正常,最常见的原因是自定义 ISO 无法启动——请检查 noVNC 控制台。如果都没用:销毁后重新部署。部署失败不会向你收费。

我弄丢了 SSH 密钥

在控制面板中依次点击:服务器 → 恢复 → 进入救援模式。用你账户中任一有效密钥通过 SSH 登录救援系统。执行 mount /dev/vda1 /mnt,编辑 /mnt/root/.ssh/authorized_keys,然后重启。如果账户里一个密钥都没有,请先在控制面板中添加一个,再进入救援模式。

我的 IPv4 在一个国家能访问,在另一个国家却不能

请从两端分别做一次 traceroute。如果路由在到达我们的 PoP 之前就已分叉,问题出在我们的上游——你可以在 status.cryptovpshost.com 查看你所在地区 transit 的公开 smokeping。如果路由能到达我们但随后中断,那就是我们的问题,状态页应该已经有所反映。

我的 VPS 自己重启了

三种可能的原因,按可能性从高到低排列:(1) init 被 OOM 杀掉——请查看上一次启动的日志:journalctl -k -b -1。(2) 计划内维护——请查看控制面板中的通知。(3) hypervisor 故障——请查看状态页。如果三者都不是,请打开 noVNC 控制台查看启动日志。

我向充值地址转了加密货币,但没有任何反应

请先查看确认数。比特币需要 2 个,门罗币需要 10 个,等等(见支持币种表)。如果已确认但 30 分钟后仍未入账,请将交易哈希粘贴到账户 → 账单 → 找回充值中——我们人工复查后,几分钟内即可入账。

调用 API 时收到 429 Too Many Requests

你已用完该令牌的限额。请遵守 Retry-After 头。如果确有更高吞吐量的需求,请再创建一个令牌——速率限制按令牌计算,而大多数客户端只使用一个令牌。(不要在循环里反复轮换同一个令牌;我们仍会把它视为同一个令牌。)

noVNC 控制台显示空白屏幕

按任意键。许多客户机在闲置一段时间后会让帧缓冲(framebuffer)黑屏。如果按键没有任何反应,客户机很可能已卡死;请在控制面板中重启。控制台在 Linux 上也能捕获 SysRq 序列——这在调试无响应的内核时很有用。

12 · FAQ

FAQ

你们会要求提供身份证件吗?

不会。我们不索取,不接收,即使你发来,我们也不会保存。整个架构的设计目标,就是让我们手里没有可交出的身份信息。

为什么只收加密货币?

银行卡网络在设计上就强制要求 KYC——商户协议里有明文规定。加密货币则没有。引入法币就意味着引入支付处理商,而引入支付处理商就意味着把对方的合规部门纳入我们的信任边界。我们不想这样。

我可以有多个账户吗?

可以。我们不做指纹识别,不会跨账户用设备 Cookie 关联,我们并不在意。想用多少个邮箱地址都可以。

如果我的加密货币服务商要求我做 KYC,会怎样?

那是你和对方之间的事。我们不与加密货币交易所沟通,它们账面上只会看到一笔转往某个地址的提现。仅凭地址,它们无法判断这笔钱是转给我们的。

你们提供退款吗?

退到账户余额,可以;退回钱包,不可以——加密货币的转账不可逆,而退款需要我们确认某个地址属于你,这本身就是一个 KYC 环节。

VPS 和独立服务器有什么区别?

VPS = 共享 hypervisor 上的 KVM 虚拟机,支持热迁移,宿主机有冗余。独立服务器 = 一整台物理服务器,独占使用,不支持热迁移。对几乎所有人来说,VPS 都是正确的选择。

你们支持 Terraform / Pulumi / OpenTofu 吗?

Terraform provider 已在路线图上;在此之前,REST API 已足够稳定,写一个小封装大约只需一天。写好之后,欢迎给我们提交 pull request。

我可以运行 Tor 中继或出口节点吗?

中继可以,出口节点不行——并不是因为我们反对,而是因为出口节点带来的滥用投诉(abuse)处理,与我们“不设投诉邮箱”的立场不相容;我们宁可坦率说明,也不愿让你搭好之后,又收到一封销毁通知而措手不及。

你们有 Discord / Slack / 客服聊天吗?

没有。我们不提供实时支持渠道,因为我们的业务模式并不需要它(没有工单,就没有背后的人工队列)。文档就是支持渠道;如果有遗漏,那就是我们想知道的 bug。

如果有人投诉我的服务器怎么办?

我们不会转发。我们不设投诉邮箱,这是刻意的架构选择,而非疏漏。你唯一会收到的来自我们的消息,是我们被送达具有约束力的法院命令的通知——即便如此,只要命令没有对我们下达封口要求,我们也会在采取行动之前通知你。