Windows 部署 MySpeed 后公网地址怎么固定?

先在 Windows 浏览器打开 http://127.0.0.1:5216。能打开,说明 MySpeed 容器和本机 5216 端口基本正常,接下来依次检查 Windows 防火墙、路由器端口映射、运营商 CGNAT 或隧道配置;打不开,就先查 Docker Desktop、容器状态、端口占用和容器日志,不要急着折腾公网地址。

“固定公网地址”这个说法通常涵盖不同方案。静态公网 IP 是 IP 本身不变;DDNS 是域名不变,但背后的公网 IP 可以变化;固定隧道子域名则是入口地址稳定,数据经过隧道服务商。本文讨论的是 Windows 部署 MySpeed、固定公网入口和远程查看这类自建测速场景。

先确认找到的是正确的 MySpeed。本文讨论的是 Docker 镜像 germannewsmaker/myspeed,提供上传下载测试、历史数据和图表展示,默认使用 5216 端口;不是搜索结果里那个用于调整浏览器视频播放速度的同名 Enounce 工具。 资料中给出的容器参数可以用于 Windows Docker Desktop 的 Linux 容器环境,但镜像是否仍在仓库中可用、当前默认标签是什么,仍应以 Docker Hub 页面为准。

Windows 端需要先让 Docker Desktop 正常运行。按当前 Docker Desktop for Windows 官方安装文档核对 WSL、虚拟化支持和 Linux 容器环境,不要只确认桌面上出现 Docker 图标。安装或启动完成后重新打开 PowerShell,执行:

docker version

这个命令要同时确认两件事:Docker CLI 可以运行,Docker Engine 可以连接。如果提示找不到 docker,先确认 Docker Desktop 是否已安装并启动,以及终端是否在安装后重新打开;如果客户端信息存在,但服务端连接失败,优先检查 Docker Desktop 是否已经进入 Engine 可用状态,而不是立即重装。

还要留意 Docker context。当前终端可能连接到了远程 Linux 主机。这样即使命令执行成功,容器也根本没有部署到这台 Windows 上:

docker context show
docker context ls

确认 context 指向预期的 Docker Desktop 后,再拉取镜像:

docker pull germannewsmaker/myspeed

拉取失败时,先看错误原文。网络超时、DNS 解析失败、代理连接失败属于 Docker Engine 到镜像仓库的链路问题;镜像清单或平台不匹配则要核对当前 Docker Desktop 所使用的架构。反复重装应用通常解决不了这类问题。

镜像拉取完成后,用资料中的参数创建容器:

docker run -d --name MySpeed -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped germannewsmaker/myspeed

这里 -p 5216:5216 把容器端口发布到 Windows 宿主机,-v myspeed:/myspeed/data 使用名为 myspeed 的数据卷保存数据,--restart=unless-stopped 则负责在 Docker Engine 恢复后重新启动未被手动停止的容器。 由于端口默认发布到宿主机网卡接口上,不能只把它当作本机服务看待;暂时不需要局域网或公网访问时,应考虑收紧绑定地址。

部署后先看容器是否真的处于运行状态,再看日志和端口,不要只凭 docker run 没有报错就认为部署成功:

docker ps -a --filter "name=MySpeed"
docker logs --tail 100 MySpeed
docker port MySpeed
Test-NetConnection 127.0.0.1 -Port 5216

docker ps -a 用来确认容器是 Up 还是已经退出;docker logs 中出现应用启动信息或错误时,以实际内容为准;docker port 可以核对容器端口是否确实发布为 5216;Test-NetConnection 只验证 TCP 端口能否建立连接,不验证页面功能。最后还要在浏览器访问 http://127.0.0.1:5216,实际加载页面并完成一次上传下载测试。

常见的 Docker 报错可以按现象定位。如果提示容器名已经存在,先不要再次执行 docker run:

docker ps -a --filter "name=MySpeed"
docker start MySpeed
docker inspect --format '{{.Config.Image}} {{.HostConfig.RestartPolicy.Name}}' MySpeed

已有容器可能只是处于停止状态,启动后能正常访问就直接复用;如果它的端口映射或重启策略不符合要求,再按当前需求重建容器。删除旧容器时不要顺手使用删除卷的选项,否则持久化数据可能被一起清掉。

如果提示 5216 端口已被占用,先查是谁占用了端口:

docker ps --filter "publish=5216"
Get-NetTCPConnection -LocalPort 5216 -ErrorAction SilentlyContinue

第一条用于查找已经发布 5216 的容器,第二条用于定位 Windows 上监听该端口的进程。确认来源后再决定释放端口还是更换宿主机端口。例如把宿主机改成 5217 时,容器内部仍然使用 5216,本机地址、路由器转发目标和隧道目标也要同步改成 5217,不能只改其中一处。

如果容器创建后马上退出,检查真实状态和日志:

docker inspect --format '{{.State.Status}} {{.State.ExitCode}} {{.State.Error}}' MySpeed
docker logs --tail 100 MySpeed

镜像拉取成功只说明镜像已经下载,并不代表应用一定能正常启动。日志为空时,再检查容器启动参数、端口发布、数据卷挂载和当前 Docker 架构。不要根据“容器退出了”这个现象直接认定是防火墙问题,防火墙通常不会让容器进程本身退出。

本机正常后,再用 ipconfig 找到实际连接家庭网络的那块网卡的 IPv4 地址:

ipconfig
Get-NetConnectionProfile

从手机或另一台电脑访问 http://<Windows主机局域网IP>:5216。这里要排除 Docker、WSL、VPN 等虚拟网卡地址,也不要使用 127.0.0.1。如果 127.0.0.1 能访问而局域网设备不能访问,优先检查 Windows 防火墙和网络隔离设置。

可以在管理员 PowerShell 中为私有网络放行 TCP 5216:

New-NetFirewallRule -DisplayName "MySpeed TCP 5216" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5216 -Profile Private

Get-NetConnectionProfile 的结果要结合实际网络环境判断,不要为了让规则生效就随意把公用网络改成私有网络。若后续只使用主动向外连接的隧道方案,通常不需要为公网访问额外开放这个入站端口。

局域网能够访问后,问题才进入公网链路。先按线路条件选择入口:

当前线路条件 可选固定入口 实际含义
运营商提供静态公网 IPv4 公网 IP 加 5216 端口 IP 和入口都固定
公网 IPv4 会变化,但可以入站 DDNS 加路由器端口映射 域名固定,底层公网 IP 可能变化
运营商使用 CGNAT 固定隧道子域名 入口固定,不依赖自己的公网 IPv4
有公网 IPv6 DDNS 的 AAAA 记录加 IPv6 防火墙 只对具备 IPv6 路径的客户端有效
路由器前还有一层 NAT 两层都转发,或将其中一层改为桥接/AP 模式 只配置内层路由器通常无效

判断是否存在公网 IPv4,先比较路由器 WAN 地址与这台 Windows 在没有 VPN、代理或特殊出口线路时查询到的公网出口地址。两者一致,只能说明具备直连测试条件,还要实际从手机流量测试;两者不一致时,常见原因是运营商 CGNAT、路由器双重 NAT,或者查询流量经过了代理线路。

有真实公网 IPv4 时,可以采用 DDNS 加端口映射。DHCP 地址保留只负责固定 Windows 的局域网 IP,并不会固定公网 IP;路由器需要把外部 TCP 5216 转发到 Windows局域网IP:5216;Windows 防火墙需要允许该入站流量;最后由路由器内置 DDNS 或 DDNS 客户端把固定域名更新到当前公网 IP。例如:

http://speed.example.com:5216

其中 example.com 只是占位示例。DDNS 客户端必须持续运行,域名记录也要指向实际出口地址。域名稳定并不表示后面的公网 IP 永远不变,更不能绕过运营商的入站限制。

端口映射后,优先关闭手机 Wi-Fi,使用移动数据访问公网域名。某些路由器不支持 NAT 回环,也就是路由器内网设备不能用公网域名访问自己,此时局域网测试失败但手机流量访问成功,不一定是 MySpeed 故障。

如果路由器 WAN 地址是内网地址,或者与实际出口地址不同,就不能继续只排查 DDNS 配置。此时路由器端口映射、DHCP 保留和 Windows 防火墙即使都正确,也无法让互联网主动进入家庭网络。双重 NAT 场景需要同时处理上层设备,例如将光猫或上级路由改为桥接模式,或者分别配置上下两层转发;CGNAT 则无法通过本机设置获得入站连接,直接改用固定隧道更省事。

只有 IPv6 的线路要单独看。IPv6 可以通过全局地址和 AAAA 记录直接暴露服务,但仍需满足路由器 IPv6 防火墙放行、域名记录包含 AAAA、Docker Desktop 当前配置能够发布 IPv6 端口,以及远程客户端本身具备可用 IPv6 路径等条件。它不是公网 IPv4 的等价替代,也不能解决所有只支持 IPv4 的访问环境;配置条件不确定时,固定隧道仍然是更直接的入口。

没有公网 IPv4 时,可以使用固定隧道子域名。社区文章采用 cpolar 的固定二级子域名作为稳定入口,其思路是不要求用户拥有公网 IP,也不需要配置路由器端口映射。 Windows 客户端的具体安装包、参数和界面名称可能随版本调整,应按 cpolar 当前官方 Windows 文档核对,不要照搬群晖 .spk 套件的安装过程。

实际操作可按以下顺序进行:安装 Windows 客户端并登录,创建一个本地目标为 http://127.0.0.1:5216 的隧道,在账号允许的情况下绑定固定二级子域名,启动隧道并取得公网 URL,然后关闭手机 Wi-Fi,从移动网络验证页面、历史记录和上传下载测试。固定子域名是否开放、需要什么账号条件以及是否有流量限制,也要以服务商当前说明为准。

隧道报错可以按返回阶段判断。公网地址返回网关错误时,先回到本机确认 MySpeed 容器仍在运行、5216 仍可访问,再检查隧道客户端的连接状态和日志;本机正常但网关持续报错,才继续查隧道服务或目标地址配置。公网页面可以打开但测速失败,则要检查浏览器到隧道的完整链路、隧道节点能力和测试请求是否正常返回。

如果每次打开都变成不同域名,说明当前使用的是临时或随机地址,并没有绑定固定子域名;如果 Windows 重启后地址消失,优先检查隧道客户端是否随系统启动。隧道通常通过出站连接工作,所以家庭路由器不需要额外开放 5216 入站端口,这也是它适合 CGNAT 网络的原因。

资料中的启动命令没有给出认证参数,因此不能据此认为公网入口具备访问控制;测速请求本身会消耗上传和下载带宽,地址一旦被他人发现或收录,就可能持续产生流量。更稳妥的做法是在隧道或反向代理层启用 HTTPS、身份认证和适当的来源限制。

来源限制与手机远程访问存在现实冲突:家庭宽带的公网 IP 可能变化,而手机移动网络出口也不固定。如果只允许固定来源,远程查看可能很快失效;如果完全开放,又会承担被他人调用的风险。现有资料没有说明 MySpeed 是否提供单独的“只读历史数据”或关闭远程发起测速的官方开关,因此不能假定公开首页后只能查看数据。至少应先在公网入口层增加认证,或者把历史页面与测速入口分开保护。

验证持久化时,可以先检查重启策略和数据卷:

docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' MySpeed
docker volume inspect myspeed
docker restart MySpeed
docker ps -a --filter "name=MySpeed"

unless-stopped 负责自动恢复,但不会覆盖人为停止状态。真正需要确认的是 Windows 重启后 Docker Desktop、MySpeed 容器和实际使用的入口组件能否依次启动,以及浏览器刷新后历史数据是否仍能读取。使用 DDNS 时,也要确认 DDNS 客户端在公网 IP 变化后能够更新记录。固定域名只有在解析记录正确、对应入口组件正常时才有意义。

远程查看历史数据相对简单。MySpeed 保存的上传下载记录和可视化图表可以通过公网入口读取。 但图表反映的测量路径,取决于发起测速的客户端位置。手机流量打开公网地址并发起测试,测量的是远端浏览器与家中 MySpeed 服务器之间的实际路径,不是单独测量家庭宽带。

上传和下载需要分开解释。远端浏览器从家中服务器下载数据时,主要受家中上行、互联网路径和远端下行影响;远端浏览器向家中服务器上传数据时,主要受远端上行、互联网路径和家中下行影响。隧道代理还会带来协议开销,并受到节点能力和中间链路的限制,因此这个结果通常不能直接等同于运营商套餐值。

在 Windows 宿主机上打开 127.0.0.1:5216 更测不出家庭宽带。这个地址上的测试流量主要停留在宿主机、Docker 网络和容器之间,没有经过家庭路由器的 WAN 出口。让手机和 MySpeed 同时连接同一个局域网也有类似问题,测到的主要是 Wi-Fi 或有线局域网路径。

如果目标是判断家庭宽带是否达标,应先明确测量拓扑:让测速客户端位于家庭网络之外,并确认测试流量确实穿过目标 WAN 出口。远端下载对应家中上行,远端上传对应家中下行,两项都要看。若目标只是远程查看家中定时任务留下的历史数据,则可以把入口和测速权限限制得更严格。

按四层逐项验收:

  1. 在 Windows 本机访问 http://127.0.0.1:5216,确认页面、上传下载测试和历史记录正常。
  2. 从同一局域网的手机或电脑访问 http://<Windows主机局域网IP>:5216,排除宿主机防火墙和网络隔离问题。
  3. 关闭手机 Wi-Fi,使用移动数据访问固定公网域名,确认域名没有变化,页面、测试和图表都能打开。
  4. 重启 Windows 后再次检查容器、数据卷、DDNS 或固定隧道是否自动恢复,并确认历史数据仍在。

还要注意这些边界:固定域名依赖 DDNS 或隧道服务持续可用,静态公网 IP 取决于运营商,直连端口映射受 CGNAT、双重 NAT 和入站策略限制,远程测速结果也不等同于家庭宽带标称速度。现有资料也没有给出 MySpeed 独立的只读模式或关闭远程测速的官方开关,这部分需要结合当前项目文档和实际网络条件自行验证。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容