把内网里的服务,开放给外面的人
Playnest 是一个内网穿透客户端。装在你家里或公司的电脑、NAS、路由器上,外网就能访问到里面的游戏服务器、网站和接口。不需要公网 IP,也不用在路由器上做端口映射。
先试一下:配好之后,别人怎么连到你
改一改下面的选项,看看每种协议对应的访问方式。
客户端是主动连出去、与节点建立隧道的,所以你的网络不需要公网 IP,也不用改路由器。
格式是「IP:端口」,写运行客户端的那台机器能访问到的地址。
别人这样访问你的服务
这是示意。保存映射后,真实的节点地址和端口会显示在网页的「映射管理」里。
快速开始
配置都在官网完成,客户端只负责连接:粘贴密钥,点连接。全程五步。
-
注册账号,选择套餐在官网
注册并登录官网,选一个套餐。想先试试,可以领取免费额度。
-
拿到授权密钥在官网
系统会为你生成授权密钥。完整密钥只显示这一次,请马上复制保存。之后只会看到
abcd****wxyz这样的脱敏形式。 -
添加映射在官网
进入「控制面板」→「映射管理」,选协议(TCP / UDP / HTTPS),填内网 IP 和端口。HTTPS 还可以填域名。详见添加映射。
-
下载并安装客户端在你的设备上
官网「客户端下载」页会按你当前的系统推荐安装包。Windows 有图形界面,Linux 和 macOS 是命令行版。详见安装客户端。
-
粘贴密钥,点连接在客户端
客户端用密钥完成认证,之后自动拿到你在网页上配好的映射,隧道随即开始转发。
安装客户端
官网「客户端下载」页会根据你访问时的系统自动推荐安装包。手动选择时,对照下表。
| 你的设备 | 下载哪个包 | 说明 |
|---|---|---|
| Windows 64 位 | win-x64 | 带图形界面 |
| Linux 电脑或服务器 | linux-x64 | uname -m 显示 x86_64 |
| Linux ARM 64 位 | linux-arm64 | uname -m 显示 aarch64,常见于 64 位树莓派、部分 NAS 和路由器 |
| Linux ARM 32 位 | linux-arm | uname -m 显示 armv7l 之类 |
| Mac(Apple 芯片) | osx-arm64 | M 系列芯片 |
| Mac(Intel) | osx-x64 | 2020 年前后及更早的 Intel Mac |
- 下载
win-x64安装包并解压或安装。 - 打开客户端,在密钥输入处粘贴你的授权密钥。
- 点击「连接」。
- 看日志区:出现认证通过,说明隧道已经建立,映射开始工作。
Linux 版没有界面,读取一个配置文件启动。路由器、NAS 上选对应架构的包,用法一样。
# 查看 CPU 架构,决定下载哪个包
uname -m
# 放到固定目录,并赋予执行权限
mkdir -p /opt/playnest
cd /opt/playnest
chmod +x ./playnest在同一目录创建 client.json,写入授权密钥:
{
"licenseKey": "把你的授权密钥粘贴到这里"
}先前台运行一次,确认能连上:
./playnest看到认证通过后,用 systemd 让它开机自启、掉线自动重启:
[Unit]
Description=Playnest client
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/playnest
ExecStart=/opt/playnest/playnest
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now playnest
# 查看运行日志
journalctl -u playnest -fmacOS 版和 Linux 版用法相同,是命令行程序。Apple 芯片选 osx-arm64,Intel 选 osx-x64。
mkdir -p /usr/local/playnest
cd /usr/local/playnest
chmod +x ./playnest
# 创建 client.json,内容见 Linux 标签页
./playnest如果系统提示程序来自未认证的开发者而被拦截,到「系统设置」→「隐私与安全性」里选择仍要允许,再重新运行。
要开机自启,可以用 launchd。把下面的内容保存为 ~/Library/LaunchAgents/com.playnest.client.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.playnest.client</string>
<key>ProgramArguments</key>
<array><string>/usr/local/playnest/playnest</string></array>
<key>WorkingDirectory</key><string>/usr/local/playnest</string>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key><string>/tmp/playnest.log</string>
<key>StandardErrorPath</key><string>/tmp/playnest.err</string>
</dict>
</plist>launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.playnest.client.plist适合 NAS、软路由和服务器。先在当前目录准备好 client.json(内容见 Linux 标签页),再运行:
docker run -d --name playnest \
--restart unless-stopped \
--network host \
-v "$(pwd)/client.json:/app/client.json" \
playnest/client:latest
# 查看日志
docker logs -f playnest内网目标是宿主机本机的服务,或局域网里的其他设备时,在 Linux 上用 --network host 最省事。
添加映射
一条映射,就是把「公网上的一个入口」对应到「内网里的一个服务」。登录官网,进入「控制面板」→「映射管理」,点新增。可以随时编辑、停用或删除,保存后立即生效。
要填哪些内容
| 字段 | 怎么填 | 说明 |
|---|---|---|
| 协议 | TCP、UDP 或 HTTPS | 决定公网入口的形式和转发方式,见下文。 |
| 内网目标 | 内网 IP:端口 | 写运行客户端的那台机器能访问到的地址。服务就在这台机器上,可以写 127.0.0.1:端口。 |
| 公网端口 | 自动分配,或自己指定 | 只有 TCP 和 UDP 需要。指定的端口如果已被占用,请换一个,或改用自动分配。 |
| 域名 | 可留空 | 只有 HTTPS 需要。留空会分配一个系统二级域名,填写则使用你自己的域名,见HTTPS 与域名。 |
| 状态 | 启用或停用 | 停用后这条映射不再转发,但配置保留。 |
三种协议怎么选
TCP
大多数游戏服务器、远程桌面、SSH、数据库和自建服务用的都是 TCP。
公网入口是「节点 IP:端口」。每个连接独立转发,连接关闭就自动清理。
UDP
游戏、语音通话、DNS 这类服务常用 UDP。
公网入口同样是「节点 IP:端口」。同一个来源地址的数据包共用一个转发会话,约 60–120 秒没有数据就会回收,应用最好定期发送心跳。
HTTPS
网站和 API 用 HTTPS,通过域名访问,可以同时挂多个域名。
公网入口统一是 443 端口,靠域名区分你的服务,不需要选端口。
HTTPS 与域名
添加 HTTPS 映射时,域名栏有两种填法,能力和要做的准备都不一样。
| 系统二级域名(域名栏留空) | 自带域名(填你的域名) | |
|---|---|---|
| 访问地址 | https://自动分配.系统域名 | https://你的域名 |
| 要改 DNS 吗 | 不用 | 要,把域名指向节点 |
| 证书 | 平台统一提供,你不用管 | 装在你自己的内网 Web 服务上,必须和域名匹配 |
| 内网目标 | HTTP 或 HTTPS 都可以 | 必须是提供 HTTPS(TLS)的端口 |
| 平台能否看到内容 | 能。平台在服务端解密后再转发 | 不能。加密数据原样转发,平台只看域名用来分流 |
| 适合 | 想快速上线、临时分享 | 有自己的域名和证书,或希望全程加密 |
自带域名通常需要套餐里包含「自定义域名」,具体看你的套餐。
用自己的域名,一步步来
- 在「映射管理」新增一条映射,协议选 HTTPS,域名栏填你的域名,内网目标填你的 Web 服务的 IP 和 HTTPS 端口。
- 保存后,页面会提示你把域名指向哪个节点地址。
- 到你的域名服务商,添加一条解析记录:记录类型选 CNAME 或 A,主机记录填你要用的前缀(例如
www),记录值填页面给出的地址。 - 等解析生效。这通常要几分钟,个别情况更久。
- 用浏览器访问你的域名。如果提示证书错误,检查内网 Web 服务上的证书是否有效、是否包含这个域名。
密钥管理
授权密钥就是你的通行证:客户端只认密钥,其余配置都在网页上。在「控制面板」→「密钥管理」里可以:
- 查看和复制:日常只显示脱敏形式,例如
abcd****wxyz。完整密钥只在生成的那一刻展示一次。 - 一键重置:生成新密钥,旧密钥立即失效。
换电脑或换设备
在新设备上装好客户端,粘贴同一个密钥即可,映射不用重新配置。
重置密钥之后
- 旧密钥马上失效,正在运行的隧道在下次断线重连时会认证失败。
- 复制新密钥。完整内容只显示这一次。
- 更新客户端:Windows 版重新粘贴新密钥;Linux、macOS、Docker 版修改
client.json后重启客户端。
套餐与流量
「控制面板」→「用量与账单」里能看到当前套餐、剩余流量和到期时间,也可以在这里续费或升级。
套餐限制的几个维度
| 维度 | 含义 |
|---|---|
| 映射条数 | 一个密钥下最多能创建几条映射。 |
| 流量额度 | 每个周期内可用的流量,按周期重置。额度为 0 表示不限流量。 |
| 协议范围 | 是否包含 UDP、HTTPS 和自定义域名。 |
| 有效期 | 包月或包年,到期需要续费。 |
| 档位 | 大致内容 |
|---|---|
| 免费体验 | 1 条 TCP 映射,少量流量,用来试用。 |
| 标准 | 多条映射,支持 UDP,支持系统二级域名的 HTTPS。 |
| 专业 | 支持自定义域名,更高的流量额度,优先使用更好的节点。 |
到期或用完流量会怎样
- 到期:密钥状态变为欠费停用,认证会被直接拒绝,新的隧道建立不起来。续费后恢复。
- 流量用完:视平台设置,可能直接停用,也可能降速继续使用。用量在「用量与账单」里能随时查看。
- 续费或升级:支付成功后,套餐、额度和到期时间会自动更新,不需要重装客户端或改任何配置。支持的支付方式以结账页为准。
运行状态与日志
「控制面板」→「实时状态」会显示每条映射是否在线、当前有多少连接。数据是实时推送的,不用手动刷新。
客户端的日志区(Linux、macOS 是终端输出或日志文件)会告诉你连接进行到哪一步:
| 你看到的 | 意思 | 下一步 |
|---|---|---|
| 认证通过 | 密钥有效,隧道已建立,映射已下发。 | 用公网地址访问一下试试。 |
| 认证失败,并附带原因 | 会具体说明是欠费、已过期还是超出映射数等。 | 按原因处理,见故障排查。 |
| 已连接,但没有可用映射 | 密钥没问题,只是你还没在网页上添加映射。日志里会给出前往官网添加的提示。 | 去「映射管理」新增一条。 |
故障排查
先看客户端日志和「实时状态」,再对照下面的情况。
客户端提示认证失败
日志里会带上具体原因,按原因处理:
- 欠费或已过期:到「用量与账单」续费,续费成功后自动恢复。
- 超出映射数:删除用不到的映射,或升级到映射条数更多的套餐。
- 密钥已失效:如果你重置过密钥,客户端里还是旧的,请换成新密钥。
- 账号或密钥被封禁:请联系官方支持。
- 短时间内输错多次:同一来源地址反复认证失败会被临时封禁,先确认密钥没有多复制空格或少复制字符,稍后再试。
客户端已连接,但外网访问不了(TCP、UDP)
- 在「实时状态」里确认这条映射在线。不在线就重连客户端。
- 确认映射是「启用」状态。
- 在运行客户端的那台机器上,直接访问内网目标(例如用
192.168.1.10:25565连一下),确认服务本身是正常的。 - 确认「内网目标」的 IP 和端口没写错,服务没有只监听
127.0.0.1。 - 检查服务所在设备的防火墙,是否放行了客户端所在机器的访问。
- 访问时用的必须是网页上显示的公网地址和端口,不是你的内网地址。
HTTPS 域名打不开,或提示证书错误
- 用自己的域名:先检查域名解析是否已经指向页面提示的节点地址,并且已经生效。用 Cloudflare 的话,记录要设为「仅 DNS」。
- 证书错误:自带域名时,证书装在你的内网 Web 服务上,需要有效、没过期,并且包含这个域名。
- 内网端口不对:自带域名时,内网目标必须是提供 HTTPS 的端口,指向一个纯 HTTP 端口会打不开。
- 用系统二级域名:域名栏留空即可,无需处理证书和解析。此时内网目标写成 HTTP 或 HTTPS 都可以。
UDP 服务用一会儿就断了
UDP 没有连接的概念。同一个来源地址的会话,约 60–120 秒没有数据包就会被回收。如果你的游戏或应用会长时间静默,建议让它定期发一个心跳包,或在应用里缩短心跳间隔。
客户端连上了,但什么映射都没有
说明你还没在网页上添加映射。登录官网,到「映射管理」新增一条,保存后会自动推送给客户端,不需要重启。
在网页上改了映射,没有生效
- 先确认客户端在线。只有在线的客户端才会收到推送,离线时会在下次连接时拿到新配置。
- 在「映射管理」里确认这条映射已保存,状态是「启用」。
- 还是没变化,就断开并重新连接一次客户端。
流量额度用完了,访问变慢或断开
流量超出额度后,平台会停用或降速。到「用量与账单」查看剩余流量和下次重置时间,可以续费升级,也可以等待下个周期重置。
重置密钥后,客户端连不上了
重置后旧密钥立即失效。把客户端里的密钥换成新的:Windows 版重新粘贴,Linux、macOS、Docker 版修改 client.json 后重启客户端。
以上都试过了还是不行
把客户端日志截图(先遮住授权密钥)、你的映射配置,以及问题出现的时间,一起发给官方支持,能更快定位。
安全建议
- 保管好密钥:只在自己的设备上使用,泄露就重置。
- 只开放需要的服务:每条映射都会让内网的一个服务对公网可见。数据库、远程桌面、路由器后台这类敏感服务,除非确实需要,不要映射出去;一定要开放时,请设置强密码,并保持软件更新。
- 不用的映射及时停用:在「映射管理」里停用即可,配置会保留。
- 需要全程加密,选自带域名:自带域名的 HTTPS 是原样转发加密数据,平台看不到内容。系统二级域名由平台解密后转发,方便但不是端到端加密。
- 留意异常流量:在「用量与账单」里发现流量异常增长,先检查映射,必要时重置密钥。
- 客户端与官网的通信走 HTTPS:客户端获取节点和映射的请求都经过加密连接。
常见问题
我家没有公网 IP,能用吗
能用。这正是内网穿透的用处:客户端主动连到平台节点,外网访问的是节点,再经隧道转到你的内网。不需要公网 IP,也不用在路由器上做端口映射。
客户端里要填服务器地址、内网 IP 和端口吗
都不用。客户端启动时会自动向平台获取该连接的节点,内网 IP、端口和协议都在网页的映射里配置。客户端只需要授权密钥。
改映射需要重启客户端吗
不需要。在网页上保存后,变更会推送到已连接的客户端,隧道不断开,立即生效。
一个密钥能建多少条映射
由套餐决定,在「用量与账单」里能看到你的上限。免费体验档通常只能建很少的映射。
免费额度能用 UDP 或 HTTPS 吗
取决于套餐。协议范围是套餐的一部分,常见做法是免费档只开放 TCP,UDP 和 HTTPS 在付费档里。以官网套餐页为准。
可以在路由器或 NAS 上运行吗
可以。选与设备 CPU 架构对应的 Linux 安装包(linux-arm64、linux-arm 或 linux-x64),用命令行版或 Docker 运行即可。
Linux 和 macOS 有图形界面吗
目前这两个系统提供命令行版,读取 client.json 后台运行。配置本身都在网页上,所以不需要额外的界面。
连接到哪个节点,能自己选吗
由平台按你所在地区和节点负载自动分配,客户端连接前会自动询问,不需要你手动填写。