plugins/steroids/skills/airport-deploy/SKILL.md
自建机场(代理服务端)搭建与运维。涵盖 VPS 初始化/加固、3X-UI 面板、Xray VLESS Reality+Vision 入站、多用户独立订阅(UUID/subId/到期/续期)、把节点渲染成 Clash/Mihomo 订阅 YAML、Profile 显示名与到期时间下发、域名/ACME 证书、出口测速、IP 被墙/被滥用风险判断、备份恢复。用户要在 VPS 上部署或维护自建节点/机场、调试 3X-UI 订阅、Reality 入站、订阅链接显示名/到期、面板安全、证书申请、速度低或 IP 风险时用这个 skill。客户端 Clash Verge / mihomo 的配置即代码、规则不命中、DNS 泄漏排查见 clash-verge-config skill。
npx skillsauth add kanlac/agent-steroids airport-deployInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
自建机场不是单点配置,而是一摞层拼起来:VPS 网络与系统加固、Xray/3X-UI 入站、订阅服务、把节点渲染成客户端能读的订阅 YAML、域名证书、出口 IP 声誉。任何一层错了,用户看到的都只是「不能用」「订阅失败」或「速度很低」。
核心原则:先分层定位,再改配置;每一层都要有可执行验证。 不靠客户端截图猜原因,能读服务端运行时状态(服务监听、响应头、证书、解析)就读一手。客户端侧(Clash Verge/mihomo 运行时、规则、DNS)属于 [[clash-verge-config]]。
127.0.0.1,走 SSH 隧道访问;只有订阅端口和 Reality 端口需要公网可达。3X-UI 版本差异会改变数据库关系,改库前先查当前版本源码/表结构,别把生成出的 Xray config 当作唯一事实源。Reality 直连优先保持简单:借真实大站握手,本身不需要自有域名证书。域名只用于面板后台 HTTPS 和订阅链接 HTTPS(订阅里含 UUID/subId,走 HTTPS 避免被旁路看到)。DNS 或证书暂不可用时可临时用 http://<SERVER_IP>:<sub-port>/... 测试,但不要当长期分发方案。
借站域名(serverNames/dest)的选择判据是「GFW 见到这个 SNI 会不会发 RST」,不是「这站墙内能不能打开」。主动探测器是穿过你这台墙外 VPS 去够借站的,所以借站墙内可不可达与抗探测无关;真正会咬你的是被动 SNI 过滤——若借站 SNI 在 GFW 重置名单上,你自己带这个 SNI 的 Reality 流量会被无差别 RST(与是否识破 Reality 无关)。因此避开 www.google.com/youtube.com 这类强 SNI 重置域名;dl.google.com 属边界可用但不够稳;优先外国、TLS 1.3、明确不被重置的下载/CDN 域名。换 SNI 或上新 IP 后实测确认:对该 IP 发一次该 SNI 的 TLS 握手,能完成 = 没被重置。
Cloudflare 只做 DNS 时必须灰云。ACME 申请前先确认权威解析和公网解析都指向 VPS;zone 未激活、注册商验证未完成、NS 未切换完成时,在面板里反复点申请证书没有意义。
端口归属要提前规划:自建订阅服务和 3X-UI 原生订阅不要抢同一端口。要让自建中间层占对外订阅端口时,先把 3X-UI 原生订阅改到另一个内部端口,再让自建服务监听对外端口。
备份核心是 3X-UI 数据库和用户清单:用户标识、UUID、subId、到期时间、流量策略、当前 Reality 公钥/short-id。详细运维提示见 references/3x-ui-reality.md。
客户端入口期待远程 YAML 时,自建一个小 HTTP 服务监听订阅端口:按 subId 查用户 → 渲染 Clash/Mihomo YAML → 用响应头控制展示。渲染要同时管好三件事:
type: vless、tls: true、flow: xtls-rprx-vision、Reality public-key/short-id/SNI/fingerprint 必须与入站一致。dns/proxy-groups/rules 写进订阅模板,或让客户端全局 Merge/Script 统一叠加,改一次全员刷新生效。跨客户端下发(如 Stash、Clash Verge、mihomo)前先读目标客户端官方文档;同名字段的出口语义可能不同,不要把一个客户端的 #PROXY/DoH 写法直接搬给另一个。Profile 显示名 = Profile-Title: <名> + Content-Disposition: attachment; filename=<名>。
filename="<名>.yaml" 这种带引号 + 扩展名的写法,有客户端会把转义后的引号原样显示成 \"Ab12c.yaml\"。一律用裸 token:filename=Ab12c(无引号、无 .yaml)。profiles.yaml 里,必须让客户端重新拉取一次(强制 auto-update 到期 / 重新导入 / 删除重加)才会更新。验证显示名问题要看客户端实际重拉后的结果,光 curl 服务端响应头正确还不够。Ab12c):跨设备可识别又不露完整 subId,前缀冲突加 -2/-3 去重。节点名要稳定——别把「剩余 N 天」这类每天变的信息塞进节点名,否则客户端按名字保存的「选中节点」记忆会在改名后丢失。到期时间 / 剩余天数 = Subscription-Userinfo: upload=0; download=0; total=<字节>; expire=<unix 秒>。expire 由 3X-UI 的 expiryTime(毫秒) / 1000 得到;totalGB=0(不限量)时省略 total,避免客户端算出 0/0 的流量环。Clash Verge 会自动在 profile 卡片上显示到期日期和剩余天数,完全不用动节点名。
元方法论:遇到显示名、DNS、节点测试或格式不对,先查一手响应头、目标客户端官方文档和客户端日志,再改模板;不要凭 URL 路径臆测去加 .yaml 后缀、照搬别的客户端字段,或在没有日志证据时改 Xray 入站参数——那是把因果搞反,越改越偏。
连不上时最贵的错误是直接去调 Xray 版本 / Reality 参数——那是协议层,而死因常在更下面的 IP/链路层。先分清 TCP 到没到服务器,再决定查哪一层。
<ip>:443 和一个对照端口(SSH)做 TCP 连接测试,同一时刻从墙外(另一条已有代理)测同一地址。墙内全超时 + 墙外通 = IP/端口被封,立即停手,别再碰协议。59.43.x.x)之后全 *;SNI 过滤只让 TCP 连上、ClientHello 后才 RST,且不影响 ICMP/SSH。两者排查方向完全不同。封锁归属读一手、别猜:KiwiVM getLiveServiceInfo 的 ip_nullroutes 空 + policy_violation false + suspended false = 机房没动它,是 GFW 干的(机房侧空路由/滥用停机是另一套处理)。确认 GFW 侧封锁后,注意 734152 死循环:搬瓦工在 IP 被墙时禁用该 VPS 的迁移,migrate/start 会持续返回 734152、挂数小时也不恢复——免费迁移换 IP 对被墙 VPS 走不通,别空耗重试。破局:优先下方 Cloudflare CDN 旁路(绕过被墙 IP,零成本),或付费换 IP(约 $7.39,客户区 ipchange.php,非 KiwiVM 面板)。只有 IP 未被墙时,migrate/start 免费迁到另一机房才能换 IP。换 IP/迁移后都要更新 DNS 和服务端记录。诊断命令、黑名单自查、换 IP 步骤见 references/3x-ui-reality.md。
想让被墙 IP 也能用、或换不到干净 IP(含 734152 死循环)→ Cloudflare CDN 旁路:同机加一个 VLESS+WS+TLS 入站(用 Cloudflare 可代理的 HTTPS 端口,非 443),域名转 CF 橙云,客户端经 CF 边缘连入,把被墙的源 IP 藏在背后;订阅端口同样走 CF 可代理端口 + 橙云,墙内才下载得到。直连与 CDN 两节点用 url-test 自动选。可代理端口、523 = 防火墙没放行回源端口、渲染器实现坑见 references/3x-ui-reality.md。
预防:别在 Reality 同一个 IP 上再开明文 HTTP 代理给人用——明文代理是被墙高危行为,会把整个 IP 连坐黑洞,443 上干净的 Reality 一起陪葬。对外只分发 HTTPS 订阅和 Reality/代理入站,不开裸 HTTP 兼容端口;临时 HTTP 迁移窗口结束后必须关开关、重启服务,并用 ss -lntp 确认公网地址不再监听,只允许必要的本地回环端口。
Speedtest 经代理测的是「用户本地网络 → 跨境链路 → VPS → 测速服务器」端到端结果,不等于 VPS 上限。判断瓶颈至少拆三组:VPS 本机对公网测速(机房出口能力)、用户到 VPS 的延迟/丢包/单连接对比(跨境拥塞)、代理后访问目标的实际体验(目标站/规则/DNS)。单用户只跑到几十 Mbps,若 VPS 本机能跑出远高于此的速度,瓶颈多半在用户到机房的链路、运营商国际出口、测速服务器选择或客户端规则,不必直接归咎 VPS。
development
Generate a local HTML dashboard for auditing installed Skills, token usage, description token budgets, duplicate Skill names, Skill paths, and selected Skill exports. Use when the user wants to inspect many Skills, decide which Skills to disable, compare duplicates, preview SKILL.md contents, sort by token usage, or export selected Skills as JSON.
tools
Turn a YouTube link into a polished single-file bilingual (Chinese + original) transcript reading page. Use when the user gives a YouTube URL and asks to "转录" "做转录稿" "生成转录页面" "中英对照" "bilingual transcript" "transcribe this video", or wants a readable HTML transcript with clickable timestamps, chapter navigation, highlighted key points, and proper-noun annotations. Fetches captions + chapters via yt-dlp, the agent translates and curates, then a script renders the HTML.
development
Use when a user asks the agent to "learn" from a file, example, correction, failed workflow, or feedback and persist that learning into skills or agent instructions. Guides semantic skill refactoring: extract the transferable behavior, update the owning skill so it becomes clearer and easier to execute, avoid append-only note dumping, and decide when not to create new reference files.
development
以「配置即代码」管理、调试 Clash Verge Rev(mihomo 内核)客户端配置。涵盖:哪些字段扩展脚本能改 / 不能改(external-controller、secret、各端口、log-level 被内核接管)、改了为什么不生效、enhance 管线与字段归属、纯命令行让配置重新生成并生效、mihomo external controller RESTful API、external-ui 自托管面板、判断流量走没走代理 / 命中哪条规则、DNS 泄漏排查、profiles.yaml 里 profile 显示名与到期信息从哪来、节点突然全超时时先排除 IP 被墙与 TUN 回环、远程机器复用本地代理。用户在改 Clash Verge / mihomo 扩展脚本(script) / 扩展配置(merge) / 订阅规则、external-controller / secret / 端口,或抱怨「配置改了不生效」「规则不命中」「远程连不上面板」「DNS 泄漏」「profile 显示名 / 到期不对」「节点突然连不上 / 延迟测试超时」「想自动化更新代理配置」时用这个 skill。机场 / 订阅服务端搭建见 airport-deploy skill。