跳转至

Windows 接入

本文用于沉淀 AgentMeshOS Windows 管理终端的稳定接入方式。当前内容基于已验证的中国网络环境接入结果整理,作为 Windows 平台的正式操作页。

当前适用范围

  • 适用对象:Windows 管理终端
  • 当前控制面:https://mesh.yohan.fun
  • 当前 Tailnet 关键节点:
  • 主节点:agentmeshos-main / 100.64.0.1
  • 中继 / 公网出口候选:agentmeshos-worker-mm / 100.64.0.6
  • 当前网络环境:可能同时遇到 DNS 污染、UDP 打洞不稳定、控制面不可达和国际站点访问异常

Windows 推荐最终状态

当前已验证的 Windows 稳定组合是:

  • 使用官方 Windows 客户端接入自托管 Headscale
  • Tailscale 已加入自托管 Headscale
  • 默认不启用 Use Tailscale DNS settings
  • 需要国际网站访问时,可选 agentmeshos-worker-mm 作为 Exit Node
  • 需要保留 QQ、本地办公软件和局域网访问稳定性时,不启用系统全局代理
  • 访问 Tailnet 内网资源时,优先使用 tailscale ping 或业务端口连通测试,不以 Windows 自带 ping 0% 丢包作为唯一标准

Windows 当前定位为管理终端与受控开发、测试节点,不作为生产 Worker。完整角色边界见 节点角色与能力矩阵

Home(100.64.0.7)可按仓库脚本 scripts/clients/agentmeshos-windows-metrics.ps1 接入只读资源遥测。该链路使用官方 windows_exporter,仅绑定 Home 的 Tailnet 地址 9182/tcp,Windows 防火墙只允许主节点 100.64.0.1 访问;不安装 Nomad Client,不采集文件、用户数据或凭据。

Windows 首次接入

以下流程默认在 管理员 PowerShell 执行。agentmeshos-office-windows 属于管理终端,不安装 Nomad Client,不把本机网卡手工写成固定 Tailnet IP。

1. 安装或确认 Tailscale

如果当前还没有安装 Tailscale,可在 PowerShell 下载官方稳定安装包并静默安装:

$ErrorActionPreference = "Stop"
$Installer = "$env:TEMP\\tailscale-setup-latest-amd64.msi"

Invoke-WebRequest `
  -Uri "https://pkgs.tailscale.com/stable/tailscale-setup-latest-amd64.msi" `
  -OutFile $Installer

Start-Process msiexec.exe -Wait -ArgumentList @("/i", $Installer, "/qn", "/norestart")

如果已经安装,先确认命令路径和版本:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

if (-not (Test-Path $TS)) {
    throw "未检测到 Tailscale,请先安装官方 Windows 客户端。"
}

& $TS version

2. 网络受限时为当前 PowerShell 打开代理

当 Office Windows 访问 GitHub、Tailscale 控制面或安装包下载不稳定时,可只对当前 PowerShell 会话临时设置代理:

$env:ALL_PROXY = "socks5://127.0.0.1:4000"

完成安装、登录或授权后可清除:

Remove-Item Env:ALL_PROXY -ErrorAction SilentlyContinue

说明:

  • 这里只影响当前 PowerShell 会话,不会把 Windows 系统永久改成全局代理
  • Tailnet 内部业务连通测试通常不需要代理;完成登录后,优先关闭代理再测 tailscale ping

3. 登录自托管 Headscale

Windows 首次接入、节点密钥过期、系统变更后登录态损坏,或原节点已经无法继续复用时,通常需要重新授权。这里有两条正式路径:

  • 浏览器交互授权:适合当前 Windows 能正常打开浏览器并完成控制面授权
  • Auth Key / Pre-Auth Key 接入:适合浏览器授权失败、需要无人值守接入或需要直接重新灌入新的接入 Key

当前文档只写方法,不写真实 Key。真实 K 必须由控制面单独生成和保管,不能写入仓库或公开文档。

3.1 浏览器交互授权

首次接入或状态损坏后重建登录态时,可执行:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS login --login-server https://mesh.yohan.fun --hostname agentmeshos-office-windows --unattended

执行后会弹出浏览器授权页。登录入口必须填写 https://mesh.yohan.fun,不要把内部 39xxx 端口写进客户端。

说明:

  • logout 会清掉当前 Tailscale 登录态,仅在首次接入、切换控制面或状态损坏时使用
  • --hostname agentmeshos-office-windows 用于固定节点显示名,便于在 StatusMesh 和 Headscale 后台统一识别
  • --unattended 适合管理终端,避免每次重启后都要求本地交互确认

3.2 使用 Auth Key / Pre-Auth Key 直接接入

如果浏览器授权不可用,或当前节点需要重新输入新的接入 K,默认按“彻底复位后重新接入”处理,不保留旧配置,直接使用 --reset

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS up --reset --login-server=https://mesh.yohan.fun --auth-key=tskey-替换成实际接入Key --hostname=agentmeshos-office-windows --accept-dns=false --unattended=true

说明:

  • 这里输入的是 Auth Key / Pre-Auth Key,不是 Headscale API Key
  • --auth-key 适合无人值守接入、浏览器登录失败后的恢复,或原节点状态损坏后的重新灌入
  • --reset 的意思是:旧的非默认配置一律不要,直接按这条命令重新建立干净登录态
  • 该命令会直接把节点接入到生成该 Key 的 Tailnet / Headscale 控制面
  • 对当前 Windows 管理终端来说,节点都已经连不上了,就不要再纠结保留旧配置;默认直接复位最省事

3.3 更安全的 Key 文件方式

为了避免把接入 K 留在 PowerShell 历史里,优先使用文件方式:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS up --reset --login-server=https://mesh.yohan.fun --auth-key=file:C:\temp\tskey.txt --hostname=agentmeshos-office-windows --accept-dns=false --unattended=true

说明:

  • C:\temp\tskey.txt 文件内容只放一行真实接入 Key
  • 用完后应立即删除该文件,避免本机残留敏感凭据
  • 如果 Windows 当前网络受限,可先临时设置 $env:ALL_PROXY = "socks5://127.0.0.1:4000" 再执行

3.4 如果报错提示“requires mentioning all non-default flags”

这个报错的意思很简单:

  • 这台 Windows 以前留过旧配置
  • 现在节点已经坏了、连不上了
  • 那就不要保留旧配置,直接复位

直接执行带 --reset 的命令,不要再去猜旧配置是什么:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS up --reset --login-server=https://mesh.yohan.fun --auth-key=file:C:\temp\tskey.txt --hostname=agentmeshos-office-windows --accept-dns=false --unattended=true

对当前 AgentMeshOS 的 Windows 管理终端,文档默认策略就是:

  • 连不上了,就复位
  • 不要为了一个坏掉的旧节点去补旧配置
  • 重新接入成功后,再按本文重新设置 accept-dns、Exit Node 和验证命令

4. 首次接入后的基础状态整理

登录完成后先恢复到 AgentMeshOS 当前推荐的基础状态:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS set --accept-dns=false
& $TS set --exit-node=
& $TS status

Windows PowerShell 固化命令

以下命令默认在 管理员 PowerShell 执行。

1. 恢复为基础 Tailnet 模式

适合只访问主节点、Worker、Nomad、Tailnet 地址,不让 Windows 把公网流量交给 Exit Node:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS set --exit-node=
& $TS set --accept-dns=false
& $TS status

2. 切换到 agentmeshos-worker-mm 作为 Exit Node

适合中国网络环境下浏览器访问 google.comyoutube.com 等国际站点,同时保持 Tailnet 可用:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS set --exit-node=100.64.0.6 --exit-node-allow-lan-access=true
& $TS set --accept-dns=false
& $TS status

说明:

  • 100.64.0.6 对应 agentmeshos-worker-mm
  • 这里显式保持 --accept-dns=false,避免当前中国网络环境下本地 DNS 污染和 Tailnet DNS 不稳定叠加

3. 切换到主节点作为 Exit Node

当需要验证主节点出口能力时使用:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS set --exit-node=100.64.0.1 --exit-node-allow-lan-access=true
& $TS set --accept-dns=false
& $TS status

说明:

  • 100.64.0.1 对应 agentmeshos-main
  • 如无特别需求,不建议同时启用 accept-dns=true

4. 关闭 Exit Node,回到本地公网出口

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS set --exit-node=
& $TS set --accept-dns=false
& $TS status

Windows 验证命令

Tailnet 节点可达性

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS ping 100.64.0.1
& $TS ping 100.64.0.6

受控 Windows 管理通道

agentmeshos-office-windows 已建立仅限 Tailnet 的 OpenSSH 管理通道,用于受控检查本机连接的 Android 设备和执行后续评估命令。

  • SSH 仅允许 100.64.0.0/10 Tailnet 地址访问;不开放公网 SSH。
  • SSH 仅接受公钥认证,密码认证已关闭。
  • 该通道用于管理 Windows 本机及其 USB 连接的设备,不把 ADB 5037 端口暴露到 Tailnet 或公网。
  • 管理公钥、Windows 账户名和授权文件不写入仓库或公开文档;新增管理者必须单独审核公钥和最小权限。

Android 通过 USB 连接到该 Windows 后,仍须在手机上启用开发者选项和 USB 调试,并在手机端确认电脑 RSA 调试指纹。只有 adb devices -l 显示设备状态为 device,才可以开始读取手机的真实系统与硬件信息。unauthorized 表示等待手机授权,空列表表示 Windows 尚未识别到可调试设备。

公网 Nomad 入口可达性

日常访问优先使用统一公网入口,不需要填写主节点内部端口:

Test-NetConnection nomad.yohan.fun -Port 443
start https://nomad.yohan.fun/ui/

只有排查 Tailnet 内部链路时,才直接检查主节点 Nomad HTTPS 端口:

Test-NetConnection 100.64.0.1 -Port 39046
curl.exe -k https://100.64.0.1:39046/v1/status/leader

其他公网域名与内部端口的对应关系见 端口与服务映射

当前 Tailscale 状态

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS status
& $TS ip -4

本机服务状态

Get-Service Tailscale
Get-Service sshd

agentmeshos-office-windows 恢复验收

以下命令用于确认该节点重新出现在 Tailnet 中:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS status
& $TS ip -4
& $TS ping 100.64.0.1
& $TS ping 100.64.0.6
Test-NetConnection 100.64.0.1 -Port 22
Test-NetConnection 100.64.0.1 -Port 39046

验收入口统一看三处:

  • Windows 本机:tailscale status 中应能看到本机已登录,且 tailscale ping 主节点、MM 节点成功
  • https://status.yohan.fun/#nodes:应能看到 agentmeshos-office-windows 在线
  • https://console.yohan.fun/#mesh:应能看到同名节点在线,名称与控制面一致

说明:

  • tailscale ip -4 会返回当前节点的 Tailnet IPv4;历史上 agentmeshos-office-windows 使用过 100.64.0.4,但这只用于恢复验收,不应手工固定写进 Windows 网卡
  • 如果 Status 页面和 Mesh 页面状态不一致,应优先检查控制面同步链路,而不是直接改 Windows 本机配置

中国网络环境下的使用建议

当前已验证的经验是:

  • Tailnet 内网访问:交给 Tailscale 处理,例如 100.64.0.1100.64.0.6
  • 国际站点访问:优先通过 agentmeshos-worker-mm 作为 Exit Node,或使用浏览器单独代理
  • Tailscale DNS:默认关闭,避免 accept-dns=true 后解析超时或链路不稳定
  • QQ / 微信 / 本地办公软件:尽量不要绑定系统全局代理;如发现掉线,先关闭 Exit Node 再复测

已知现象说明

为什么 tailscale ping 通,但 Windows 自带 ping 可能丢包

在中国网络环境下,UDP 打洞、DERP 回退、ICMP 质量和本地网络策略可能同时影响链路质量。因此:

  • tailscale ping 更能代表 Tailnet 实际可用性
  • Windows 自带 ping 可作为参考,但不作为唯一验收标准

为什么启用 Exit Node 后,浏览器访问国际站点恢复,但 QQ 可能掉线

因为 Exit Node 会改变该客户端的公网出口 IP 与路由路径。某些即时通讯或办公软件会把这类变化视为网络切换,触发重连或重新鉴权。

断线恢复与重登录

1. 先检查服务,不直接重装

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

Get-Service Tailscale
Restart-Service Tailscale
& $TS status
& $TS ip -4
& $TS ping 100.64.0.1

2. 如仍未恢复,再执行重登录

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS login --login-server https://mesh.yohan.fun --hostname agentmeshos-office-windows --unattended
& $TS set --accept-dns=false
& $TS set --exit-node=
& $TS status

如果当前恢复场景拿到的是新的接入 K,可改为:

$TS = "$env:ProgramFiles\Tailscale\tailscale.exe"

& $TS logout
& $TS up --reset --login-server=https://mesh.yohan.fun --auth-key=file:C:\temp\tskey.txt --hostname=agentmeshos-office-windows --accept-dns=false --unattended=true
& $TS status

3. 管理通道恢复说明

  • 当 Windows 节点离线时,主节点无法通过 100.64.0.4 这类 Tailnet 地址反向修复它,必须在 Windows 本机执行上述命令
  • Windows 重新在线后,再从主节点或其他已在线管理机验证 SSH 管理通道是否恢复
  • agentmeshos-office-windows 的 Tailnet SSH 仅用于受控管理 Windows 本机及其 USB 连接的手机,不对外暴露 ADB 端口