Qiyan-Tailscale团队内部手册

负责人:邢成功
手册版本:v0.1.0
日期:2025/12/24

Tailscale 和 Headscale 简介

Tailscale 是基于 WireGuard 的虚拟组网工具。提供免费、收费的托管控制服务。目前客户端开源,控制端暂未开源。

Headscale 是 Tailescale 控制服务器的开源、自托管实现。

我们turing001上有公网,可以基于 Headscale 自托管控制端。

Tailscale 官方安装:https://tailscale.com/download

团队接入说明:Headscale + Tailscale(HTTPS + 自签证书)

我这边已经把 Headscale 控制面跑起来了:HTTPS + 自签证书。下面是给大家的“从下载到登录成功”的操作手册,以及常用测试/排障命令。
Headscale 控制面端口:8112Remote CLI(gRPC)端口:50443


1)服务端信息(大家用得到的)

  • Control Server(客户端登录用)https://qiyan.fund:8112
  • Remote CLI(仅管理员/运维用)qiyan.fund:50443(gRPC over TLS)
  • MagicDNS 域*.tailnet.qiyan.fund(例如 turing001.tailnet.qiyan.fund

2)需要管理员/网管开放的端口(重点)

必需(否则客户端无法登录/续租)

  • TCP 8112qiyan.fund(Headscale 控制面 HTTPS)

仅管理员需要(远程管理 Headscale)

  • TCP 50443qiyan.fund(Headscale Remote CLI / gRPC)

    如果安全要求更高:这个端口建议只对白名单(办公网/VPN/Tailscale 管理节点)开放。

建议(提升点对点直连概率/降低 DERP 延迟)

  • UDP 41641(或 tailscaled 实际监听端口):建议服务器侧放行入站/出站 UDP(可选,但体验差距很明显:直连会从 100~300ms 变成几毫秒)

3)为什么要装证书(自签证书是“必须信任”)

我们用的是 自签 TLS 证书,所以:

  • 客户端如果不信任证书,Tailscale 往往会表现为:超时、context canceled、bad certificate 等。

  • Remote CLI 同样依赖 TLS,官方也明确 Remote CLI 需要 TLS,并建议把自签证书加入系统信任链(不建议长期用 insecure)

我会给大家提供:

  1. 证书文件(例如 qiyan.fund.crt

  2. 各自的 PreAuthKey(一次性/限时):大家用它把设备注册进来即可(用完就失效,设备会保留长期节点密钥)。


4)通用接入流程(所有平台都一样)

  1. 安装 Tailscale 客户端

  2. 把我发的 qiyan.fund.crt 导入 系统信任(下面分平台写)

  3. 用我发的 PreAuthKey 登录到:https://qiyan.fund:8112

  4. 验证上线(见第 8 节测试命令)

注意:登录地址务必用域名 qiyan.fund。如果用 IP(例如 https://103.91.178.50:8112),证书校验会因为“域名不匹配”失败。


5)macOS(命令行最稳)

A. 安装

  • 官网安装包或 Homebrew 均可(大家怎么顺手怎么来)

B. 导入证书(推荐导入到 System Keychain)

  1. 打开 Keychain Access(钥匙串访问)

  2. 选择 System 钥匙串 → 导入 qiyan.fund.crt

  3. 双击证书 → Trust → When using this certificate: Always Trust

C. 登录(建议最小命令)

1
2
3
4
sudo tailscale up --reset \
--login-server=https://qiyan.fund:8112 \
--auth-key=<我发给大家的KEY> \
--hostname=<给自己这台机器起个名字,必须全小写,比如cxingmacbook>

6)Windows(证书必须导入“受信任的根证书颁发机构”)

A. 安装

  • 安装官方 Tailscale 客户端(GUI + CLI 都会有)

B. 导入证书(关键)

  1. 双击 qiyan.fund.crt安装证书

  2. 选择 本地计算机(Local Machine)(需要管理员权限)

  3. 存储位置选择:受信任的根证书颁发机构(Trusted Root Certification Authorities)

  4. 完成后重新打开命令行再试

C. 登录(管理员 CMD / PowerShell)

1
2
3
4
tailscale up --reset `
--login-server=https://qiyan.fund:8112 `
--auth-key=<我发的KEY> `
--hostname=<机器名>

如果 curl https://127.0.0.1:8112 报 SNI 不支持,这是因为用了 IP;Windows 上建议始终用域名 https://qiyan.fund:8112


7)Android / iOS / 鸿蒙

Android(官方 App 支持“Alternate Server”)

Headscale 官方文档给了两种方式:交互登录或 Auth Key 登录。我们走 Auth Key 最省事:

操作路径:

  1. 安装 Tailscale(Play Store / F-Droid)

  2. 打开 App → 右上角设置 → Accounts → 右上角三点菜单

  3. 选择 Use an alternate server,填:https://qiyan.fund:8112

  4. 然后在三点菜单里选 Use an auth key,粘贴我发的 KEY

  5. 成功后会自动连上

Android 证书安装:

  • 设置 → 安全 → 加密与凭据/证书 → 安装证书 → CA 证书(不同厂商入口略有差异)

  • 装完再回 Tailscale 登录


iOS / iPadOS(App 内切换自建控制面)

iOS 也支持使用自建控制面(Custom Coordination/Alternate server),按官方说明进入对应菜单填入控制面 URL。

大致步骤:

  1. 安装 Tailscale(App Store)

  2. 在 App 的账号/设置里找到 Custom Coordination Server / Alternate server

  3. 填:https://qiyan.fund:8112

  4. 使用我发的 KEY 完成注册(若界面没有明显“auth key”,通常在账户菜单的更多选项里)

iOS 证书安装:

  1. qiyan.fund.crt 发到手机(AirDrop/微信文件/邮件均可)并安装描述文件

  2. 设置 → 通用 → 关于本机 → 证书信任设置 → 打开对该证书的完全信任


鸿蒙(HarmonyOS)

这里要分版本:

  • HarmonyOS 4.x(仍兼容 Android APK):通常可以直接装 Android 版 Tailscale,步骤按上面的 Android 走。

  • HarmonyOS NEXT / 5.x+(不再支持 Android APK):系统层面已移除 Android 兼容,就无法直接装 Android 版 Tailscale

    如果大家是 NEXT/5.x,我建议用电脑(Windows/macOS/Linux)先接入;手机端我再单独看看有没有可行替代方案。


8)常用测试命令(大家自查 + 我排障都用得到)

客户端(macOS / Linux / Windows 都通用)

1
2
3
tailscale status
tailscale ip -4
tailscale ping --verbose turing001.tailnet.qiyan.fund
  • tailscale ping --verbose 里如果看到 via DERP(...) 说明走中继;出现 via <内网IP:端口> 基本就是直连(延迟会很低)。

  • 系统自带 ping 不通不代表 Tailscale 不通:可能是 OS 防火墙/ICMP 被禁;优先看 tailscale ping

服务端(turing001 上)

1
2
3
4
5
6
7
8
9
10
# 看 headscale 容器是否健康
podman ps
podman logs --tail=200 headscale

# 看端口监听
ss -lntp | egrep ':8112|:50443'

# 看 tailscaled 的直连情况
tailscale status
tailscale ping --verbose <某客户端名>

9)常见问题速查(最容易踩的坑)

  1. tailscale up 超时 / context canceled
  • 80% 是:证书未信任 / 代理干扰 / 端口 8112 未通

  • 先做:nc -vz qiyan.fund 8112 或者 curl -v https://qiyan.fund:8112(能连通再谈后面)

  1. 服务端日志出现 tls: bad certificate
  • 基本就是客户端不信任自签证书,或用 IP 访问导致域名不匹配

  • 解决:确认客户端用的是 https://qiyan.fund:8112,并把 qiyan.fund.crt 加到系统信任

  1. 直连延迟高(一直 DERP)
  • 先用:tailscale ping --verbose <peer> 看是否能变成直连

  • 直连长期失败再考虑:服务器放行 UDP、路由/NAT、以及是否被公司网络策略限制


10)我这边的协作方式(大家怎么找我)

  • 大家把 设备名(hostname) 发我(或我指定命名规则),我给对应人员发 PreAuthKey

  • 新设备加进来后,我会在 Headscale / Web UI 里做必要的标签/权限归类(比如服务器节点的 tag:server

如果大家把上面流程走完还卡住:把下面三样发我就能快速定位:

  1. tailscale status 输出(打码私密信息即可)

  2. tailscale ping --verbose turing001.tailnet.qiyan.fund 输出

  3. nc -vz qiyan.fund 8112curl -v https://qiyan.fund:8112

量化交易_MetaInfo

合约交易 MetaInfo 字段解释

spot 现货

swap 合约

在金融领域,Swap的中文是“互换”或“掉期”。它是一种重要的金融衍生工具,核心可以概括为:交易双方在预先约定的时间内,相互交换一系列现金流的合约

下表总结了互换的主要类型和核心特征。

互换类型 交换的标的物 主要目的
利率互换 同种货币的利息支付(如固定利率利息 vs 浮动利率利息) 管理利率风险,降低融资成本
货币互换 不同货币的本金和利息 管理汇率风险,转换资产/负债的币种
商品互换 与商品价格(如石油、黄金)挂钩的现金流 对冲商品价格波动的风险
信用违约互换 针对特定债务的信用风险(类似保险) 转移和规避信用风险
与其他衍生品的区别
作为金融衍生品家族的四大支柱之一(另外三者是期货、期权和远期),互换有其独特性:
与期货/远期相比:期货和远期通常涉及在未來某个时点交割一项资产,而互换则是在一段时间内分期、多次地交换现金流。
与期权相比:期权赋予持有者“选择执行与否”的权利,而互换则是一种“承诺”,双方都必须按约定履行支付义务。

概念

VolumeMultiple 是什么?

短答:

  • VolumeMultiple(有些文档叫“合约乘数/数量乘数”)=「每1 手/1 张合约包含的标的数量」。这是交易规则里的一个“乘数”。(Shanghai Futures Exchange)
  • 现货 BTC-USDT:没有“张/手”的概念,数量直接用 BTC 数量计。很多带这个字段的通用 API 对现货会把 VolumeMultiple 设为 1(占位),基本用不到。(dict.thinktrader.net)
  • 合约(永续/交割):VolumeMultiple 才有意义,常与“合约面值/contractSize”一起决定 1 张代表多少标的或多少美元。

那“VolumeMultiple 就是 contractSize”吗?

不完全等同。从定义上看:

  • VolumeMultiple/合约乘数 = 每张(或每手)里包含的“单位数”(用于把“张数”换成“标的数量”)。

  • contractSize/合约面值(或 ctVal) = 每张对应的“标的数量(BTC)”或“美元面值”。

  • 在很多加密合约里 ctMult=1,这时 “每张有多少标的” 看起来就和 contractSize 一样,所以有人会把它们当成一个概念;但在有单独面值字段(例如 OKX 的 ctValctMult)或反向合约以 USD 面值计的场景,两者不是同一字段,计算也不同。(OKX)

现货 vs. 合约怎么对应?

现货 BTC-USDT

  • 下单数量 = 你买/卖的 BTC 数量
  • VolumeMultiple 通常 = 1;实际下单受 最小下单数量/步进 约束,而不是乘数。(dict.thinktrader.net)

合约(两种常见规格)

A. USDT 本位(线性)

  • 平台会给出“合约面值(contractSize/ctVal)”,单位通常是 BTC/张(比如 1 张 = 0.01 BTC),以及“合约乘数(ctMult)”(多数产品为 1)。
  • 1 张代表的 BTC 数量 = contractSize × ctMult
  • 成交名义价值(USDT)= 价格 × 张数 × contractSize × ctMult。
  • 例:OKX 说明里,BTCUSDT 合约面值 = 0.01 BTC乘数 = 1 ⇒ 1 张 = 0.01 BTC。(OKX)

B. 币本位/反向(如 BTCUSD)

  • 面值以 USD/张给出(例如 100 USD/张),乘数多为 1。
  • 1 张对应的 BTC 数量 =(USD 面值 × 乘数)/ 价格(随价变动)。
  • 例:OKX 文档示例,BTCUSD 面值 = 100 USD乘数 = 1。(OKX)

(补充:Binance USDT-M 合约是线性合约,契合上面 A 的计算思路;其规格文档也强调线性计价/结算。(Binance))

  • futures(合约)里的 VolumeMultiple:在 Gate 就用 quanto_multiplier。对「正向/线性」合约(type=“direct”)它等价于“每 1 张合约代表的标的数量”(常见是 0.001 BTC/张,但请以 API 返回为准)。对「反向」合约(type=“inverse”),估值/盈亏会用到 1/price 的关系,quanto_multiplier 用作计价币→结算币的换算系数(详见下面公式解释)。Gate.com.tr

  • futures(合约)的 PriceTick:用 order_price_roundGate.com.tr

  • futures 的 MinLimitOrderVolume / MaxLimitOrderVolume:分别用 order_size_min / order_size_maxGate.com.tr

  • futures 的 VolumeTick(数量步进):用 1。Gate 的合约下单数量(以及持仓 size)是整数张,步进为 1 张。Gate.com.tr

  • futures 的 MinNotional(最小名义金额)Gate 合约的合约详情模型里没有单独给出。一般以最小张数限制为准;如果你需要“估算的”名义金额,可用

  • 线性合约:order_size_min × quanto_multiplier × mark_price;

  • 反向合约:order_size_min × quanto_multiplier ÷ mark_price(价值与 1/price 成正比)。
    但这些是派生值,不是官方字段。Gate.com.tr+1

  • spot(现货)的对应关系(你前面也问到现货):

  • 现货没有“合约乘数/面值”这个概念,VolumeMultiple 固定看作 1(买卖就是以基础币的数量计)。

  • 现货的 VolumeTick(数量步进)可由 amount_precision 推出(步进=10^-amount_precision)。

  • 现货的 MinNotional(最小名义金额)就是 min_quote_amount

futures 的 VolumeTick(数量步进):用 1。Gate 的合约下单数量(以及持仓 size)是整数张,步进为 1 张。

这是从哪得出来来的

ChatGPT said:

Thought for 44s

对的,我说 “VolumeTick=1(按 1 张为步进)” 的依据就是 Gate 官方 API 文档里对合约“数量”的类型定义:

  • 下单与订单:FuturesOrder.size 明确是 integer(int64),并写明“下单数量(size)为正表示买,负表示卖”,说明只能用整数张,不存在小数张。Gate.com
  • 仓位:Position.size 也是 integer(int64),仓位规模用整数计。Gate.com
  • 合约规格:Contract.order_size_min / order_size_max 都是 integer(int64)(最小/最大下单张数为整数)。文档没有提供任何“数量精度/步进”字段(只有价格精度 order_price_round),因此默认步进就是 1 张Gate.com
  • 中文说明:在中文 API 说明里也写得很直接:“下单时指定的是合约张数 size,而非币的数量;每张对应的币数量看 quanto_multiplier。” 这也侧面印证 size 以张数、且为整数计。Gate.com

综上:Gate 永续合约的下单与持仓数量都是“”,类型是整数 → 数量步进自然就是 1 张

实操小抄

  • 现货:直接用 数量(BTC)× 价格;忽略 VolumeMultiple。(dict.thinktrader.net)
  • USDT 本位合约:名义价值 = 价格 × 张数 × contractSize × VolumeMultiple(多为 1)。(OKX)
  • 币本位/反向合约:名义价值(USD)= 张数 × contractSize(USD) × VolumeMultiple;对应 BTC 数量 = 名义价值 / 价格。(OKX)

如果你告诉我具体是哪家交易所/哪个 API 字段名(例如 OKX 的 ctVal/ctMult、Binance 的 contractSize 等),我可以把它们一一对上,并给你写好计算示例。

USDT、USDC、USD

术语类别 术语 核心含义与区别
基础货币 USD 美元,美国的官方法定货币,是USDT和USDC的价值锚定对象。
USDT 由Tether公司发行的稳定币,与美元1:1挂钩。特点是流动性极高,交易对最丰富,但储备金透明度和监管合规性历来存在争议。
USDC 由Circle和Coinbase联合发行的稳定币,同样与美元1:1挂钩。特点是监管合规性和透明度高(每月公开审计报告),更受注重安全和合规的机构青睐。
交易类型 现货 直接买卖并持有真实的加密货币(如BTC),一手交钱一手交货。
USDT永续/USDC永续 使用USDT或USDC作为保证金进行结算的永续合约没有到期日,可无限期持有。通过“资金费率”机制使合约价格锚定现货价格。
USDT交割/USDC交割 使用USDT或USDC作为保证金进行结算的交割合约有明确的到期日,到期后合约会自动按约定价格平仓结算。
反向合约 也称“币本位合约”。以交易对象本身(如BTC)作为保证金和结算单位。盈亏以该加密货币数量计算。
期权 赋予持有者在未来特定时间以特定价格买入或卖出标的资产的权利,但不是义务。买方最大亏损为购买期权时支付的权利金w。