异地 Windows 机器网络配置与排障(防失联)

SKILL运维和基础设施
运维和基础设施 未标注权限 许可证不明确
安装这个技能

面向「一台 Windows 机器放在异地长期开机、人不在现场」的运维场景,解决两类最容易出事的问题。一是误判,ICMP 会被 Windows 公用网络防火墙、校园网 AP 隔离策略、远端主机防火墙静默丢弃,本机 http_proxy 代理也会吃掉对 IP 形式地址的请求,导致「ping 不通、页面打不开」看起来像远端故障、实际链路完好,本技能给出「先看 TCP 端口,再看 HTTP 状态码,再排除本机代理」的定级判定法,并附 4 次真实误判的完整复盘。二是改崩,远程改 IP、网关、DNS 配错一个字符就当场失联,而 SSH、WinRM 通常没开,救不回来只能跑现场,本技能给出「采集现状,注册计划任务做自动回滚保险,执行变更,网关、外网、DNS 三项复测,手工撤销保险」的标准动作线。另含 Tailscale 组网要点,MagicDNS、子网路由广播与 approve、key expiry 的本地判据,以及 netsh portproxy 端口转接、服务监听地址与防火墙 scope 的排查对照表,解决「同一台机器上内网 IP 能访问、隧道地址访问不到」这一类高频问题。附带两个可直接运行的 PowerShell 脚本,分别用于带保险地改静态 IP、以及自动判定根因的跨网访问排障。当用户说异地那台连不上、ping 不通、要不要设静态 IP、改完网络失联了怎么救、服务在内网能通但隧道地址不通、远程改网关会不会断线时使用。触发词:异地运维、远程开机的电脑、长期开机、静态IP、固定IP、DHCP 保留、默认网关、ping 超时、端口通但打不开、远程桌面连不上、失联、救回、Tailscale、MagicDNS、子网路由、key expiry、校园网跨网段、netsh portproxy、防火墙 scope、ps1 交付。

一句话选型结论

按资料字段整理

异地 Windows 机器网络配置与排障(防失联)是运维和基础设施类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类运维和基础设施 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_878e6d7a/remote-windows-network-ops
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

运维和基础设施
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_878e6d7a仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791690099
正文体量14.4 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
查服务与日志

按现象定位服务状态与日志线索。

写部署与巡检脚本

把重复的部署、巡检写成脚本。

故障排查

按步骤排查网络、依赖与配置。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在运维和基础设施场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
异地 Windows 机器网络配置与排障(防失联)当前 未标注权限 未标注 未标注 未标注 有
Azure 部署 调用外部服务 GitHub 仓库 664.2 万 Codex、Claude、Cursor 有
Azure diagnostics 问题管理 调用外部服务 GitHub 仓库 657.6 万 Codex、Claude、Cursor 有
Azure aigateway 部署 调用外部服务 GitHub 仓库 655.3 万 Codex、Claude、Cursor 有
Azure AI 搜索 调用外部服务 GitHub 仓库 651.4 万 Codex、Claude、Cursor 有
Azure Cloud migrate 部署 调用外部服务 GitHub 仓库 650.7 万 Codex、Claude、Cursor 有

SKILL.md 全文

14.4 KB
模型实际读到的说明书原文,来自技能仓库

异地 Windows 机器网络配置与排障(防失联)

> 版本 1.1.0 | 已在真实双机跨网场景完整验证:打通、排障、并最终精简到最少依赖。

这个技能解决什么问题

一台机器放在异地长期开机——另一个办公点、老家、机房托管——人不在现场。
这时候最容易出事的是两件事,而且它们的共同点是都会害你白跑一趟几十公里:

一是误判。 你会以为它断了。可 ping 的结果在这类链路上基本不可信:Windows 公用网络防火墙、
校园网 AP 隔离、远端主机防火墙,任何一层都会静默丢掉 ICMP。更隐蔽的是本机如果跑着代理进程,
.NET/curl 会自动走代理,导致 IP 形式的地址超时而主机名形式正常。
本技能给出一套定级判定法,让「到底通没通」有唯一答案。

二是改崩。 你想给它改静态 IP、网关或 DNS,配错一个字符,它就真的断了,而且 SSH、WinRM
基本不会开——没有回退通道。本技能把「先装回滚保险再动手」做成强制流程。

配套两个可直接运行的脚本(见文末),把上述流程自动化。


更新记录

v1.1.0
- 全文脱敏:移除全部具体环境信息(地名、机构名、真实主机名与私有网段),改为通用示例。
- 新增「交付 .ps1 给别人时的规范」章节,把踩过的编码与语法校验坑固化下来。
- 两条脚本补充参数校验与失败自动回滚,-CleanupRedundantProxy 可在转接多余时安全清理。

v1.0.0
- 首版:四条铁律 + 两个运维脚本。


铁律一:不要用 ping 判断链路通不通

ping(ICMP echo)会被下面任意一层静默丢弃,超时不代表链路故障:

丢弃层 触发条件
Windows 防火墙 网络位置为「公用」时默认拦入站 ICMPv4 回显
校园网 / 企业网 AP 隔离策略直接屏蔽跨子网 ICMP
远端主机防火墙 只放行业务端口

正确判定顺序(从强到弱,命中一条即可定论):

# 1) 最弱:TCP 端口握手
Test-NetConnection <目标IP> -Port <端口> -InformationLevel Quiet

# 2) 更强:真的取到业务数据
Invoke-WebRequest http://<目标IP>:<端口>/ -TimeoutSec 12 -UseBasicParsing
#   → 返回 StatusCode 200 即端到端闭环证明

# 3) 隧道自身:Tailscale 侧看 direct / relay
tailscale status          # active; direct <ip:port> = 打洞成功
tailscale ping <peer地址>  # via <ip:port> 才算直连,via DERP 是中转

⚠️ 发请求前务必排除本机代理干扰(.NET / curl 会自动吃 http_proxy 环境变量和系统代理):

现象 说明
IP 形式 http://100.x.y.z:port/ 超时,但主机名形式 http://<name>:port/ 通 本机代理在作祟。.NET 默认 bypass 规则会放过「不含点的主机名」,IP 形式却被送去代理
Test-NetConnection TCP OPEN 但 HTTP 超时 同上,TCP 层才是真相
$env:http_proxy=$null; $env:HTTP_PROXY=$null; $env:https_proxy=$null; $env:HTTPS_PROXY=$null

> 踩坑记录:同一台机器上连续 4 次把「HTTP 超时」误判成远端故障,最后查明是
> 某进程写入的 http_proxy=http://127.0.0.1:<随机高位端口>。凡用 HTTP 下结论,先用 TCP 层交叉验证。


铁律二:动网络配置前必须先装「自动回滚保险」

异地机器改 IP/网关/DNS,配错一个字符就是当场失联,且 SSH、WinRM 通常没开。
顺序固定为:采集 → 装保险 → 改 → 复测 → 撤保险。

1. 采集现状(改之前必须留底)

$cfg = Get-NetIPConfiguration | Where-Object { $_.IPv4DefaultGateway } | Select-Object -First 1
$cfg.InterfaceAlias, $cfg.InterfaceIndex, $cfg.NetAdapter.MacAddress
$cfg.IPv4Address.IPAddress, $cfg.IPv4Address.PrefixLength
$cfg.IPv4DefaultGateway.NextHop
(Get-DnsClientServerAddress -InterfaceIndex $cfg.InterfaceIndex -AddressFamily IPv4).ServerAddresses

DNS 列表务必抄下来 —— 改成静态 IP 时 DNS 不会自动继承,漏配会变成「能 ping IP 但打不开网页」。

2. 装保险:写回滚脚本 + 注册一次性计划任务

$rb = "C:\Users\Public\网络自动回滚.ps1"
@'
$a = Get-NetIPConfiguration | Where-Object { $_.IPv4DefaultGateway } | Select-Object -First 1
Set-NetIPInterface -InterfaceIndex $a.InterfaceIndex -AddressFamily IPv4 -Dhcp Enabled
Remove-NetIPAddress -InterfaceIndex $a.InterfaceIndex -Confirm:$false -EA SilentlyContinue
Remove-NetRoute     -InterfaceIndex $a.InterfaceIndex -Confirm:$false -EA SilentlyContinue
Set-DnsClientServerAddress -InterfaceIndex $a.InterfaceIndex -ResetServerAddresses -EA SilentlyContinue
Start-Sleep 5; ipconfig /renew | Out-Null
'@ | Set-Content $rb -Encoding UTF8

$arg = "-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File `"$rb`""
Register-ScheduledTask -TaskName "网络配置应急回滚" `
  -Action  (New-ScheduledTaskAction -Execute powershell.exe -Argument $arg) `
  -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(12)) `
  -User SYSTEM -RunLevel Highest -Force

保险时间取 10–15 分钟:够验证,失联时也不至于干等。

3. 执行变更(顺序不能颠倒)

Set-NetIPInterface -InterfaceIndex $idx -AddressFamily IPv4 -Dhcp Disabled
Remove-NetIPAddress -InterfaceIndex $idx -Confirm:$false              # 会连网关一起清掉
Remove-NetRoute     -InterfaceIndex $idx -DestinationPrefix 0.0.0.0/0 -Confirm:$false
New-NetIPAddress -InterfaceIndex $idx -IPAddress <IP> -PrefixLength <位数> -DefaultGateway <网关>
Set-DnsClientServerAddress -InterfaceIndex $idx -ServerAddresses @("DNS1","DNS2")

4. 复测三件事(缺一不可)

ping <网关> -n 3            # 局域网层通
ping 114.114.114.114 -n 3   # 出网层通
Resolve-DnsName www.baidu.com   # DNS 解析层通

三者全绿才算成功。只要有一项挂,什么都别做,等保险自动回滚。

5. 确认后必须手工撤销保险

Unregister-ScheduledTask -TaskName "网络配置应急回滚" -Confirm:$false

忘了撤销,倒计时一到配置会被还原 —— 这是最常见的「明明调好了第二天又不行」的原因。


铁律三:能不改 IP 就别改

先问「漂移的到底是哪个地址」,多数焦虑其实是选错了地址而不是地址会变:

想干什么 该用什么地址 会不会变
访问那台机器本身(远程桌面 / 文件共享 / 管理服务) 隧道地址或 MagicDNS 名(如 my-server) 永不变
访问机器上跑的 Web 服务 同上,前提见下 永不变
访问那台机器所在局域网的其他设备 真实内网 IP 会变,才需要固定

常见坑:Web 服务往往只绑了网卡的具体地址,导致隧道地址反而连不上。

> 另外,校园网/家用路由器的 DHCP 对长期在线设备通常会续租同一 IP,漂移概率被高估;
> 真需要固定时,优先级是 路由器做 DHCP 保留(MAC 绑定) > 本机设静态 IP
> —— 前者保留 DHCP 的容错,后者写错就没救。


铁律四:别急着上 portproxy —— 先看清 LocalAddress 和防火墙 scope

症状:同一台机器,http://<内网IP>:<port>/ 通,但 http://<隧道IP>:<port>/ 不通。

⚠️ 不要靠现象推断。曾据此断定「服务一定绑死在具体网卡」——错的。
实测服务绑的是 0.0.0.0,真凶是一条带 LocalAddress / RemoteAddress scope 的防火墙规则
(第三方安装包很常见:给服务端口配规则时只放行局域网段,导致隧道侧被默认阻止)。

必须在目标机实测,这一步无法跳过:

Get-NetTCPConnection -LocalPort 8080 -State Listen        # 关键看 LocalAddress
Get-CimInstance Win32_Process -Filter "ProcessId=<PID>"   # CommandLine 常含可用线索
Get-NetFirewallRule | Where-Object { $_.LocalPorts -eq 8080 }   # 看有没有现成的带 scope 规则
LocalAddress 的值 真凶 治法
0.0.0.0 / :: 防火墙规则的 scope 或 profile 限制 新建一条无 scope 限制、-Profile Any 的放行规则即可。不需要 portproxy
具体 IP(如 192.168.x.x) socket 绑死在一张网卡 用 portproxy 转接,或改服务监听 0.0.0.0
查不到任何监听 服务压根没起 先启服务

放行的正确写法(不要给 -LocalAddress,否则又造一个带 scope 的规则):

New-NetFirewallRule -DisplayName "服务端口跨网放行" -Direction Inbound `
  -Protocol TCP -LocalPort 8080 -Action Allow -Profile Any

仅当 socket 确实绑死在具体地址时,才用 portproxy(不动服务代码、不重启服务、一条命令可撤销):

netsh interface portproxy add v4tov4 `
  listenaddress=100.x.y.z listenport=8080 `
  connectaddress=<服务绑定IP> connectport=8080

netsh interface portproxy show all                          # 查看
netsh interface portproxy delete v4tov4 listenaddress=100.x.y.z listenport=8080   # 撤销

要点与坑:

  • 转发目标要动态取,别写死:在 Get-NetTCPConnection -LocalPort <p> -State Listen
    里挑 LocalAddress 含 . 且不等于 0.0.0.0 的那条;若服务已通配,目标填 127.0.0.1。
  • 不要 listenaddress=*:会把服务已占的端口一起抢过来。
  • 依赖 iphlpsvc(IP Helper)服务;被优化软件禁过的话要先恢复。
  • 配置写在注册表,重启保留,但 iphlpsvc 常比隧道网卡起得早 → 开机后转接会失效。
    兜底:注册 -AtStartup 计划任务(SYSTEM),脚本内先 Start-Sleep 45 再重 add 一次。

无人值守机器的三件事(长期稳定性)

  1. Tailscale 关 key expiry:免费计划设备授权 180 天过期,到期集体离线,异地那台根本点不了。
    后台 Machines → 每台 → Disable key expiry。
    - ★ 本地判据:tailscale status --json 里 Self 对象没有 KeyExpiry 字段 = 永久有效
    (字段直接消失,不是设成 0001 年)。别再去解析天数,会误判。
    - 注:某些版本 --json 的 Peer 恒为空字典,peer 详情只能看文本 tailscale status。
  2. 地址用 MagicDNS 名,不写内网 IP。
  3. 服务监听 0.0.0.0,别绑具体网卡地址。

子网路由的两个铁规矩

  • 广播的网段必须是网关机自己所在的网段,且绝不能与接收方所在网段重叠。
    重叠会导致接收方路由表里出现 metric 更小的隧道路由,把本地流量吃掉,表现为「本地网上不了」。
    踩过一次:广播了接收方自己的网段,结果那台机器本地全断,只能 tailscale up --accept-routes=false 救回。
  • 改完要在管理后台 approve,只 --advertise-routes 不生效。

配套脚本

脚本 用途
scripts/set-static-ip-safe.ps1 把网卡改成固定 IPv4,自带自动回滚保险,防一改就失联
scripts/crossnet-troubleshoot.ps1 诊断并修复「内网 IP 能访问、隧道地址访问不到」,自动判定根因

均需在该 Windows 机器上以管理员 PowerShell 运行,输出会自动存到桌面的结果文件,便于回传给远程协助的人。


交付 .ps1 给别人时的规范(踩过坑)

  1. 必须是 UTF-8 带 BOM + CRLF,否则中文注释乱码、Read-Host 表现异常
    powershell $t = [IO.File]::ReadAllText($f, [Text.UTF8Encoding]::new($false)) -replace "`r`n","`n" -replace "`n","`r`n"
  2. 交付前跑语法检查,别让人双击才发现报错
    powershell $err = $null [void][Management.Automation.Language.Parser]::ParseFile($f, [ref]$null, [ref]$err)
  3. cmdlet 输出在远程工具里常被吞掉 → 结果 Set-Content 到文件再读回来。

常见问题

5 问
答案由本站依据条目字段整理
异地 Windows 机器网络配置与排障(防失联)怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_878e6d7a/remote-windows-network-ops。安装方式为未标注。装完刷新技能列表或重开客户端。

异地 Windows 机器网络配置与排障(防失联)支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

异地 Windows 机器网络配置与排障(防失联)权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

异地 Windows 机器网络配置与排障(防失联)收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

异地 Windows 机器网络配置与排障(防失联)用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。