多设备命名统一:从一机多名到全局一致

2026年8月1日| Ruichen Zhou| 约 7 分钟阅读

设备多了以后,命名先乱了。同一台设备在 Tailnet、SSH config、xray、sub2api 和监控(Kuma/Beszel)中各有一个名字。日志里出现一个旧名时,要先确认它指向哪台机器,才能继续检查故障。

这篇记录一次把命名在整个基础设施里拉齐的过程。

问题:一机多名

命名混乱的根源是每个系统独立命名,没有任何一个强制别的系统跟它对齐:

  • Tailnet 节点名:设备入网时随手起的,后来改过几次
  • SSH config Host:为了好记自己起别名,和 Tailnet 节点名不一定一致
  • xray outbound tag:按链路功能起名(home-1de-direct),和设备名无关
  • sub2api proxy name:按用途起名(Selfnet Autowrt
  • 监控(Kuma/Beszel):monitor 名字又是另一套

结果是同一台设备,在五个系统里有五个叫法。日志里看到的是 xray tag,监控面板显示 monitor name,SSH 使用 Host 别名,三个名字可能指向同一台机器。

例如日志里出现 home-1,要先查它对应哪个 Tailnet 节点,才能继续处理。

统一规则

定了几条规则,然后逐个系统改:

1. 物理设备不加位置后缀(唯一设备)

家里有两台斐讯 N1,一台在德国,一台在山东。如果都叫 n1-de / n1-sd,搬家后就要跟着改名。所以日常使用的那台叫 n1,另一台为了区分,使用最短的后缀 n1-sd

默认名称只表示设备本身。只有同型号设备不止一台时,才增加能区分它们的短后缀。

2. VPS 保留位置(位置 = 网络属性)

VPS 不一样。vps-devps-hk 是两台地理位置不同的机器,而且位置本身就是它们的网络属性:德国 VPS 和香港 VPS 的回程路由、延迟、能不能直连,完全不同。这时候位置不是“会变的属性”,而是“定义这台机器是干嘛的”。所以 VPS 保留位置后缀。

同理衍生出 vps-de-egress / vps-de-egress-bak,专门做出口的 VPS 节点,位置 + 用途都在名字里。

3. xray outbound 用 @ 规范

这是改动最大的一块。xray 的 outbound tag 之前是 home-1de-direct 这种自造名,看不出“出口在哪、经过什么、类型是什么”。

统一成 <EXIT>-<TYPE>@<VIA> 三段式:

DE-DC@direct         VPS 直连(freedom,机房 IP 出口)
DE-Selfnet@cudy      德国家宽,经 cudy 的 SOCKS
DE-Selfnet@n1        德国家宽,经 n1 的 SOCKS
DE-Selfnet@balancer  cudy/n1 自动选择(health-based)
CN-Home@ts-1         中国出口,经 Tailscale 主
CN-Home@ts-2         中国出口,经 Tailscale 备

三段各表达一件事:EXIT 是流量最终从哪出(DE 德国 / CN 中国),TYPE 是出口性质(DC 机房 / Selfnet 家宽 / Home 家庭),VIA 是经过哪个中间节点。ts-1ts-2 表示两条中国出口的 Tailscale 连接。

inbound 不涉及中间节点,使用两段式:DE@hy2-inSelfnet@hy2-insub2api@socks-in

这个规范的价值在排障时最明显。xray error.log 里出现 DE-Selfnet@cudy ... no recent network activity,立刻知道是“德国家宽经 cudy 这条链路断了”,不用再去翻配置对 tag。

SSH config 分层

命名统一后,我也重新整理了 SSH config。之前所有 Host 都平铺在一个文件里,本机配置、共享配置和临时测试混在一起。

拆成两层:

  • chezmoi 共享层config.tmpl):放所有设备的 Host 定义,跨机器同步。包括设备名(= Tailnet 节点名)、公网 IP 后备入口、ProxyJump 跳板。这部分 5 台开发机(macOS/Linux/Windows)共用同一份。
  • 本机特有层~/.ssh/config.local):只放当前机器独有的条目,比如这台机器特有的临时别名、本地端口转发。不进 chezmoi。

设备名、Tailnet 节点名和 SSH Host 使用同一个值。ssh n1 里的 n1,就是 Tailnet 和 Beszel 中的 n1

公网后备入口用后缀区分:默认名称走 Tailscale,带 -public 的名称走公网 IP。平时使用默认名称,Tailscale 不通时再使用带后缀的入口。

改动清单

实际改动涉及多个系统,逐个对齐:

系统 改动
Headscale 重命名 Tailnet 节点 router-den1hk-cn2vps-hk
SSH config Host 名对齐 hostname Host n1 / Host vps-hk
xray outbound tag 重命名 home-1CN-Home@ts-1
sub2api proxy name 对齐 Selfnet Autoxray-balancerwrtcudy
Beszel/Kuma monitor/system 名对齐 用设备名而非自造名

每个系统的改法不同:Headscale 使用 headscale nodes rename,xray 修改 config.json 的 tag,sub2api 修改数据库中的 proxy name。改完后,同一个设备在这些系统里使用同一个名字。

教训

命名需要一个统一的来源,其他系统跟着它修改。我的设备通过自建 Headscale加入 Tailnet,因此以 Tailnet 节点名为准,SSH config、xray tag 和监控名称随后对齐。

修改后,日志、监控和 SSH 中的设备名一致。位置、用途等可能变化的信息只放在链路名或入口后缀里,不再混进设备名。

评论