尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
OpenClaw 配合 cpolar 内网穿透:把 NAS、小游戏和 RDP 搬到公网
为什么想到把家里的服务搬出去我家里的网络结构很普通运营商光猫下面接一台路由器路由器后面挂了一台群晖风格的 NAS、一台常年开机的 Windows 主机还有一台跑各种脚本的小机器。平时在家用局域网 IP 访问都挺顺但一出门就麻烦——想拿 NAS 里的文件、想远程连一下 Windows、想让外网的朋友试玩我自己写的一个小游戏都得靠第三方网盘或者截图转发体验很差。公网 IP 这条路我先放弃了。运营商给的是大内网地址打电话申请固定公网 IP 的流程我这边走不通而且就算拿到了把 RDP 直接暴露在公网上也不是个好主意。所以我转向内网穿透方案。选 cpolar 的原因很直接它提供免费隧道配置是命令行 配置文件的形式不依赖图形界面适合我这种喜欢把配置写进文件、方便版本管理的人。OpenClaw 在这里的角色是我用来统一管理这些隧道和访问入口的工具——它本身不是穿透工具而是我用来编排哪些服务该暴露、暴露在哪个端口、用什么方式访问的那一层。【注意】OpenClaw 的版本迭代比较快我用的具体版本号这里不写死因为不同版本的命令和配置字段可能有差异。下面涉及 OpenClaw 的部分请以你本地openclaw --help的输出为准。先把端口和内网服务理清楚在配隧道之前我先把家里要暴露的服务列了一遍避免后面配到一半发现端口冲突。服务内网地址协议是否要公网NAS 管理页192.168.1.10:5000HTTP是自托管小游戏192.168.1.20:8080HTTP是Windows RDP192.168.1.30:3389TCP是本地 AI 服务192.168.1.20:11434HTTP是仅限特定客户端这里有个我一开始没想清楚的点NAS 管理页和 RDP 都是高权限入口一旦暴露到公网等于把家里内网的一扇门开到了外面。所以我给它们加了两层约束——cpolar 侧尽量用随机子域名而不是固定好记的域名服务侧强制强密码RDP 只允许特定账号登录。小游戏和 AI 服务相对轻风险低一些但也做了限流。安装 cpolar 并拿到 authtokencpolar 的安装方式各平台不太一样。Linux 下我一般是用官方的一键脚本或者直接下二进制Windows 下是安装包。这一步我不展开因为官方文档写得很清楚而且安装脚本会随时间变化。安装完之后关键的一步是登录拿到 authtoken然后写进本地配置cpolar authtoken你的authtoken这条命令会把 token 写进 cpolar 的配置文件里Linux 下通常在~/.cpolar/cpolar.ymlWindows 下在用户目录的.cpolar文件夹里。token 一定要保管好它等于你所有隧道的钥匙。【踩坑提醒】authtoken 不要直接粘贴到会被提交到 git 的脚本里。我习惯把它放在本地配置文件脚本里只读环境变量。给 NAS 管理页开一条隧道NAS 管理页是 HTTP 服务我用的是 cpolar 的 http 隧道类型。最直接的命令形式是cpolar http5000执行后 cpolar 会分配一个临时的公网地址形如https://xxxx.cpolar.cn把它映射到你本地的 5000 端口。这个地址在会话结束后会变适合临时用。如果要长期使用我改成在配置文件里定义隧道。cpolar 的配置文件结构大致是这样的具体字段名以你本地版本为准tunnels:nas:proto:httpaddr:5000region:cnsubdomain:my-nas-xxxxgame:proto:httpaddr:8080region:cnsubdomain:my-game-xxxxrdp:proto:tcpaddr:3389region:cn然后启动cpolar start-all这里subdomain字段是否可用、能不能自定义跟你的 cpolar 套餐有关。免费版我记得是支持随机子域名自定义子域名需要付费这一点我没有逐一验证所有套餐的差异建议你登录 cpolar 后台确认。用 OpenClaw 统一管理入口单独跑 cpolar 其实够用但我遇到的问题是隧道多了之后哪个地址对应哪个服务、哪个是临时的哪个是长期的容易乱。OpenClaw 在这里帮我做的是把这些入口信息集中管理方便脚本化调用。我的做法是写一个 Python 脚本读取 cpolar 启动后的输出解析出公网地址然后写进一个本地 JSON 文件再让其他工具去读。这样我不用每次手动复制地址。importjsonimportreimportsubprocessfrompathlibimportPath ENTRY_FILEPath.home()/.openclaw/entries.json# cpolar 输出的公网地址一般形如 https://xxxx.cpolar.cnURL_PATTERNre.compile(rhttps?://[a-zA-Z0-9\-]\.cpolar\.(?:cn|io|top))defstart_tunnel(name:str,proto:str,addr:int)-str:启动一条 cpolar 隧道并返回公网地址。 这里用 subprocess 启动实际生产中更稳妥的做法是 让 cpolar 以服务方式常驻脚本只负责读取状态。 procsubprocess.Popen([cpolar,proto,str(addr)],stdoutsubprocess.PIPE,stderrsubprocess.STDOUT,textTrue,)# 只读前若干行避免阻塞for_inrange(50):lineproc.stdout.readline()ifnotline:breakmatchURL_PATTERN.search(line)ifmatch:urlmatch.group(0)save_entry(name,proto,addr,url)returnurlraiseRuntimeError(f未能从 cpolar 输出中解析出{name}的公网地址)defsave_entry(name,proto,addr,url):data{}ifENTRY_FILE.exists():datajson.loads(ENTRY_FILE.read_text(encodingutf-8))data[name]{proto:proto,addr:addr,url:url}ENTRY_FILE.parent.mkdir(parentsTrue,exist_okTrue)ENTRY_FILE.write_text(json.dumps(data,ensure_asciiFalse,indent2),encodingutf-8,)if__name____main__:print(start_tunnel(nas,http,5000))这段代码里我特意没有把 cpolar 的输出格式写死。因为 cpolar 的输出文案会随版本变用正则去匹配cpolar.cn这类域名后缀比匹配固定字符串更稳。但如果你的套餐用的是其他域名后缀正则要相应调整。【关键结论】解析第三方 CLI 输出本质上是脆弱的能不用就不用。如果你的 cpolar 版本支持 JSON 输出或者有本地 API优先用那个。我这边因为版本原因没找到稳定的机器可读接口才退而求其次用正则。小游戏HTTP 隧道 简单限流小游戏是一个纯静态 少量后端的项目跑在 8080 端口。暴露方式和 NAS 一样用 http 隧道。区别在于我在游戏服务本身加了一层简单的访问控制。原因很实际公网地址一旦被扫到可能有人拿脚本刷。我的做法是在反向代理层加一个基于 IP 的简单限流而不是在游戏逻辑里加避免污染业务代码。这里用 Nginx 举例limit_req_zone $binary_remote_addr zonegame_limit:10m rate10r/s; server { listen 8080; server_name _; location / { limit_req zonegame_limit burst20 nodelay; proxy_pass http://127.0.0.1:8000; } }意思是每个 IP 平均每秒最多 10 个请求允许突发 20 个。这个数值对小游戏来说够用对刷子来说会很快被限住。【注意】限流阈值要根据你的实际访问量调我这里给的是我自己的场景不是通用推荐值。RDPTCP 隧道 账号层加固RDP 是最需要谨慎的一个。cpolar 对它用的是 TCP 隧道cpolar tcp3389它会分配一个公网地址加端口形如tcp://x.cpolar.cn:12345。Windows 那边用远程桌面客户端连这个地址和端口就行。但公网 RDP 有几个现实问题扫描器会持续尝试爆破尤其是默认的 3389 映射出去之后。如果账号密码弱等于把机器交出去。部分运营商会针对 RDP 流量做限制。我的加固做法是Windows 上禁用默认管理员账号的远程登录单独建一个只用于 RDP 的账号。该账号用长随机密码存进密码管理器。开启登录失败锁定策略比如连续 5 次失败锁定 10 分钟。尽量只在需要时启动隧道不用的时候关掉。# 查看当前 RDP 相关设置仅供参考具体策略项以系统版本为准Get-ItemProperty-PathHKLM:\System\CurrentControlSet\Control\Terminal Server-Name fDenyTSConnections【踩坑提醒】我用的是 Windows 自带的锁定策略在本地安全策略 → 账户锁定策略里配置。不同 Windows 版本家庭版/专业版可配置项不一样家庭版可能找不到完整的策略编辑器这一点需要你按自己的系统版本确认。再配一个公网 AI 入口最后一步是给本地的 AI 服务开一个公网入口。我本地跑的是一个兼容 OpenAI 接口风格的服务监听 11434平时只在局域网里给几个脚本调用。需求是在外面也能让我的 AI 客户端连上但不想让任何人随便调。我没有直接把 11434 暴露出去而是加了一层网关。网关做三件事校验 API Key没有合法 key 直接拒绝。只转发到/v1/chat/completions这类必要路径其他路径一律 404。记录请求来源和时间方便事后排查。网关用 FastAPI 写一个最小版本importosfromfastapiimportFastAPI,Header,HTTPException,Requestfromfastapi.responsesimportJSONResponseimporthttpx appFastAPI()# 从环境变量读取避免硬编码EXPECTED_KEYos.environ[AI_GATEWAY_KEY]UPSTREAMos.environ.get(AI_UPSTREAM,http://127.0.0.1:11434)ALLOWED_PATHS{/v1/chat/completions,/v1/models}app.post(/v1/chat/completions)asyncdefchat(request:Request,authorization:strHeader(default)):tokenauthorization.removeprefix(Bearer ).strip()iftoken!EXPECTED_KEY:raiseHTTPException(status_code401,detailunauthorized)bodyawaitrequest.json()asyncwithhttpx.AsyncClient(timeout120)asclient:respawaitclient.post(f{UPSTREAM}/v1/chat/completions,jsonbody,)returnJSONResponse(status_coderesp.status_code,contentresp.json())app.get(/v1/models)asyncdefmodels(authorization:strHeader(default)):tokenauthorization.removeprefix(Bearer ).strip()iftoken!EXPECTED_KEY:raiseHTTPException(status_code401,detailunauthorized)asyncwithhttpx.AsyncClient(timeout30)asclient:respawaitclient.get(f{UPSTREAM}/v1/models)returnJSONResponse(status_coderesp.status_code,contentresp.json())依赖版本我用的是fastapi和httpx的近期版本具体号这里不写因为你本地装的版本只要支持removeprefixPython 3.9和AsyncClient就能跑。然后这个网关本身监听 9000 端口再用 cpolar 给它开一条 http 隧道cpolar http9000AI 客户端那边配置base_url指向 cpolar 分配的公网地址api_key填AI_GATEWAY_KEY的值。【关键结论】把 AI 服务直接暴露和加一层网关暴露安全差别很大。网关不仅是鉴权更重要的是能限制路径避免上游一些不该开放的接口被顺手扫到。实际验证方式配置完之后我没有只看隧道起来了就结束而是做了几项验证换网络访问用手机 4G 而不是家里 Wi-Fi分别访问 NAS 地址、小游戏地址确认能打开。RDP 连接用手机上的 RDP 客户端连公网地址确认能进桌面再故意输错密码几次确认锁定策略生效。AI 入口用 curl 测试带正确 key、错误 key、无 key 三种情况确认只有正确 key 能通。# 测试 AI 网关鉴权curl-XPOST https://your-ai-entry.cpolar.cn/v1/models\-HAuthorization: Bearer wrong-key# 预期返回 401curl-XPOST https://your-ai-entry.cpolar.cn/v1/models\-HAuthorization: Bearer$AI_GATEWAY_KEY# 预期返回模型列表这三步里我实际跑通的是前两项和 AI 网关的鉴权测试。RDP 的账号锁定策略我配置后在局域网里验证过但公网侧的爆破防护效果我没有用真实攻击流量测试过所以不能给你能扛住多少 QPS 爆破这种数字。一些我没有验证、需要你自己确认的点写技术文章最怕把没验证的东西说成事实所以这里单独列一下cpolar 免费套餐的并发连接数、带宽上限各时期政策可能不同我没有逐一测过极限值。自定义子域名是否需要付费我印象里免费版是随机子域名但套餐细节以官网为准。OpenClaw 的具体配置字段我用的是命令行方式配置文件字段名没有深入验证不同版本可能不同。RDP 在公网下的稳定性不同运营商对这类流量的处理不一样我这边能用不代表你那边能用。结尾整套方案的核心思路其实不复杂cpolar 负责把内网端口映射出去OpenClaw或你自己的脚本负责管理这些入口真正的安全边界放在服务本身——强密码、账号锁定、网关鉴权、路径白名单。穿透工具只是把门打开门锁得自己装。NAS 和 RDP 这类高权限服务能不长期暴露就不长期暴露小游戏和 AI 入口这类相对轻的也要加上限流和鉴权。如果你也在做类似的事建议先把端口和服务列清楚再决定哪些真的需要公网别一上来就把所有东西都映射出去。
RELATED

相关推荐

CH9329硬件级USB HID转换原理与串口指令实战

CH9329硬件级USB HID转换原理与串口指令实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 13:19:53
SAP销售BOM配置与订单展开实战:从CS01到VA01的避坑指南

SAP销售BOM配置与订单展开实战:从CS01到VA01的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 13:14:53
Ubuntu+IGH开源主站调试零差云控伺服电机全攻略

Ubuntu+IGH开源主站调试零差云控伺服电机全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/24 13:14:53
MORE NEWS

更多资讯

📰

ToastFish:用 Windows 通知栏背单词的免费开源工具

ToastFish:用 Windows 通知栏背单词的免费开源工具 【免费下载链接】ToastFish 一个利用摸鱼时间背单词的软件。 项目地址: https://gitcode.com/GitHub_Trending/to/ToastFish 上班、上课、午休,总有些碎片时间想记点单词,却又腾不出…

📰

Quartus Prime 18.1与ModelSim联合仿真全攻略:安装、授权到波形调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Redis 未授权访问漏洞详解|漏洞复现 + 提权攻击 + 应急响应 + 全套安全加固

前言 Redis 是目前互联网使用最广泛的高性能内存数据库,常用于缓存、会话存储、热点数据存储。但绝大多数企业、运维人员因为默认配置不当,导致 Redis 暴露公网、无密码认证,产生高危 未授权访问漏洞。 攻击者可无需任何账号密码&#xff0…

📰

在 Elestio 上部署托管 FerretDB:五分钟搭建生产可用的 MongoDB 替代方案

后端数据库文档数据库 【免费下载链接】FerretDB A truly Open Source MongoDB alternative 项目地址: https://gitcode.com/gh_mirrors/fe/FerretDB 点击查看 免费下载 FerretDB 是一款开源、以 PostgreSQL(DocumentDB 扩展)为后端的 Mongo…

📰

pH 响应两亲嵌段高分子|PS-b-P4VP 聚苯乙烯‑b‑聚 4‑乙烯基吡啶 超分子组装、纳米催化模板基材

PS-b-P4VP(Polystyrene-block-Poly(4-vinylpyridine),聚苯乙烯-b-聚4-乙烯基吡啶)是一类由疏水性聚苯乙烯(PS)嵌段与弱碱性/亲水性聚4-乙烯基吡啶(P4VP)嵌段通过共价键连接而成的典型两亲性嵌段…

📰

408计算机考研资料这么多,到底该怎么排着用?

408计算机考研资料这么多,到底该怎么排着用? 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408 这篇文章带你过一遍开源仓库 cs-408 里的全部…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬