没有 NAS 也能异地访问:我用 NanoPi 搭了一个轻量内网
很多人手里都有一台长期通电的小主机:NanoPi、软路由,或者装了 Linux 的开发板。它可能跑着下载、监控、Home Assistant 或几个脚本。问题在于,人在外面时,想访问它往往要处理公网 IP、端口映射和动态域名。
这次我没有用 NAS,也没有搭 Web 服务,而是让一台 Windows 虚拟机和 NanoPi 加入星空组网,再做两项实际测试:Windows 通过 SSH 登录 NanoPi;NanoPi 主动连接 Windows 上的临时 TCP 监听端口。两端不在同一个物理网络,也可以按内网方式互访。
一、先把这次测试说清楚
测试环境只有两个节点:一台 Windows 11 虚拟机和一台 NanoPi R3S。Windows 端安装星空客户端,NanoPi 运行 iStoreOS。本文所有访问都使用星空分配的虚拟 IP,不使用家里的公网 IP,也不需要在路由器上做端口映射。
二、Windows 和 NanoPi 分别入网
2.1 创建账号
打开 星空组网官网,用邮箱或手机号注册主账号。
登录后进入管理平台,为 Windows 和 NanoPi 分别创建成员账号。设备分开使用账号,后续查看在线状态或撤销权限会清楚很多。
2.2 Windows 下载安装星空软件
本文截图中的客户端版本为 6.0.7。发布前如需使用新版,Windows 端可从指定的 6.0.8 下载地址获取安装包。下载的是.exe文件,按 Windows 安装向导完成安装即可。
安装完成后,用 Windows 对应的成员账号登录,并保持客户端在线。
2.3 NanoPi 安装 Linux/ARM 客户端
这台 NanoPi 已装好 iStoreOS,本文不展开系统安装过程。
先在 NanoPi 上确认系统和架构:
uname -m cat /etc/os-release从输出可以看到,这台 NanoPi 运行 iStoreOS 24.10.6(OpenWrt 系),架构是aarch64,即 ARM64。因此不能使用 Windows.exe、x86 安装包或.deb包。
我直接按官方 iStoreOS 文档操作。
按文档提供的一键安装脚本安装客户端。
安装完成后,用 NanoPi 对应的成员账号登录。
回到管理后台,Windows 和 NanoPi 都显示在线。
在“设备管理”中查看两台设备获得的星空虚拟 IP。
后台在线只说明两台设备已经加入网络,下面继续验证它们能否实际互访。
三、验证连通性
3.1 Windows 连接 NanoPi
我在 Windows 11 中打开 Git Bash,通过 NanoPi 的星空虚拟 IP 连接 iStoreOS:
ssh root@192.168.188.23.2 NanoPi 主动连接 Windows
Windows 能 SSH 登录 NanoPi 后,我又换了方向测试:不安装 Web Server,只在 Windows 上临时监听一个 TCP 端口,再让 NanoPi 主动连接过来。
先以管理员身份打开 Windows PowerShell,创建一条临时防火墙规则。规则只放行 NanoPi 的星空虚拟 IP192.168.188.2访问 Windows 的 18080 端口,不会向其他来源开放该端口:
New-NetFirewallRule ` -DisplayName "StarVPN temporary test 18080" ` -Direction Inbound ` -Action Allow ` -Protocol TCP ` -LocalPort 18080 ` -RemoteAddress 192.168.188.2接着在同一个 PowerShell 窗口启动临时监听。出现Waiting for NanoPi on port 18080...后,窗口会停在原处,等待 NanoPi 发起连接:
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Any, 18080) $listener.Start() Write-Host "Waiting for NanoPi on port 18080..." $client = $listener.AcceptTcpClient() $client.Client.RemoteEndPoint $client.Close() $listener.Stop()切换到 NanoPi 终端,先确认它能 ping 通 Windows 的星空虚拟 IP192.168.188.1,再用 BusyBox 自带的nc连接 18080 端口:
ping -c 4 192.168.188.1 nc 192.168.188.1 18080这台 iStoreOS 的 BusyBox 版nc只支持nc IP地址 端口的精简语法,不支持常见 Linux 示例里的-v、-z、-w参数。第二条命令执行后终端会停住,表示连接仍在保持,并不是卡死。
回到 Windows PowerShell,监听程序会输出 NanoPi 的远端地址,格式类似192.168.188.2:xxxxx。这次 TCP 连接由 NanoPi 主动发起,并成功到达 Windows 虚拟机。
看到 Windows 输出后,在 NanoPi 终端按Ctrl+C结束nc,最后删除临时防火墙规则:
Remove-NetFirewallRule -DisplayName "StarVPN temporary test 18080"四、实测结果:两端可以相互访问
这次没有使用 NAS,也没有做端口映射,只让 Windows 虚拟机和 NanoPi 加入同一张星空网络。结果很直接:
- Windows 通过 NanoPi 的星空虚拟 IP
192.168.188.2成功建立 SSH 会话,说明可以从 Windows 管理这台 iStoreOS 设备。 - NanoPi 对 Windows 虚拟 IP
192.168.188.1发起 Ping,6 个数据包全部收到回复;随后 NanoPi 主动连接 Windows 的临时 18080 端口,Windows 监听程序识别到了来源为192.168.188.2的连接。
后台显示“在线”只能说明设备已经加入网络;SSH、Ping 和 TCP 监听的结果,才说明两端真的可以相互发起访问。延迟会受两端宽带、NAT 类型和当时线路影响,本文只记录这次环境下的结果。
测试结束后,我删除了 Windows 上的 18080 临时防火墙规则。临时验证用过的端口和规则不应长期保留,正式服务需要什么权限,再单独配置。
五、异地组网不等于远程访问 NAS
NAS 是异地组网里常见的一类设备,但不是前提。只要两端有需要互通的服务,就可以组网。
对 NanoPi + Windows 这组设备来说,最直接的用途是远程维护:出门时 SSH 回 iStoreOS,查看运行状态、更新脚本或处理容器服务,不必为了一个管理端口去申请公网 IP。家里的 Home Assistant、下载机、打印机管理页或摄像头管理端,也可以按同样思路接入,访问时使用对应的虚拟 IP。
开发和小团队也有类似需求。测试环境放在云服务器、同事电脑或办公室小主机上时,可以先把设备加入同一张虚拟网络,再访问 SSH、内部 Web 服务、数据库管理页或远程桌面。这并不替代应用自身的登录认证,但能减少临时联调时开放公网端口的需求。
异地两台电脑传文件、局域网游戏联机、远程桌面协助、两处门店设备维护,甚至让笔记本访问家里一台闲置电脑,也都不依赖 NAS。先明确哪台设备需要访问哪项服务,再决定是否接入即可。
组网成功后,成员账号和服务权限仍要单独管理。SSH、iStoreOS 管理后台和后续部署的应用应设置独立密码或密钥;测试完成的临时端口、临时防火墙规则也要及时删除。先用两台设备完成一次 SSH 和 TCP 双向验证,再按需求接入 NAS、云服务器、家庭服务器或其他电脑,会更省事。
