banner
约 1,800 字
6 分钟

局域网内所有设备使用同一个KSpeeder进行Docker镜像源加速

-
-
无标签

摘要

本文介绍如何在局域网内共享 KSpeeder Docker 加速服务。核心原理是通过修改 hosts 文件将域名解析指向运行服务的设备 IP。提供了两种方法:单台设备修改 hosts,或主路由统一修改 hosts/Dnsmasq。文章对比了分布式、集中式和网关级三种架构,建议多台机器使用集中式。最后给出了针对解析、端口、Docker 和 DNS 的故障排查步骤。

前言

上一篇我在飞牛 NAS 上装了 KSpeeder 做 Docker 镜像加速,但我的 iStoreOS 旁路由上其实已经有一个 KSpeeder 在跑了。同一套加速服务,与其在 NAS 上再单独跑一份,不如直接让 NAS 也"借用"旁路由上现成的那个。于是查了查怎么让局域网里的多台设备共享同一个 KSpeeder 服务,其实很简单,这里把两种方法都记录下来。

原理

先说原理,弄懂它后面操作就顺理成章了。

安装 KSpeeder 后,它提供的镜像加速源地址是 registry.linkease.net默认解析指向 127.0.0.1(本地地址)——也就是说默认情况下,只有跑着 KSpeeder 的那台机器自己能通过这个源加速。

想让别的设备也用上,核心思路就一句话:在需要使用加速的设备上,把 registry.linkease.net 这个域名,手动解析到"跑着 KSpeeder 的那台设备"的 IP 上。改 hosts 文件就能实现这种自定义解析。下面以我的 iStoreOS 旁路由 IP 192.168.2.2 为例。

为什么是"改域名解析"而不是"改 IP"

这里有个设计值得表扬,值得说清楚——因为它让这件事从"复杂"变成了"简单"

Docker 的镜像源配置里,填的是一个固定的地址。如果 KSpeeder 直接暴露 192.168.2.2:5443,那所有要用它的设备都得填这个 IP。看起来很直观,但有两个麻烦:

  1. 写死了 IP:哪天 KSpeeder 换了机器(192.168.2.2 → 192.168.2.5),每台设备都得改一遍;

  2. 配置不一致:KSpeeder 自己的说明文档写的是 registry.linkease.net,你填 IP 就变成了"教程对不上实际",以后排查容易懵。

而用域名 + hosts 覆盖的方式,"用哪个地址"这件事被解耦了:所有设备填的都是同一个域名,改指向只需在解析层动一次。本质上,hosts 文件就是一个本地的、优先级高于 DNS 的"地址簿"

顺便解释默认值为什么是 127.0.0.1:那是"只有本机"的意思——单机部署的默认行为不需要任何额外配置就能用,只有多设备共享才需要改指向。这个默认值选得很合理。

方法一:修改要使用 KSpeeder 的设备上的 hosts 文件

操作最简单,适合只有一两台设备需要加速的情况。

  1. 终端 SSH 连接要使用加速的设备(比如我的飞牛 NAS)。

  2. 打开 hosts 文件:nano /etc/hosts

  3. 在文件末尾添加一行,把域名指到跑 KSpeeder 的设备 IP:

纯文本
192.168.2.2    registry.linkease.net

(注意中间是 tab 或空格,格式与文件里其它行保持一致。)

image.png
  1. 保存后,用 ping registry.linkease.net 验证——如果返回的是 192.168.2.2,说明修改已生效。

image.png
  1. 再实际拉个镜像测试一下,能正常加速就说明配置成功了。

image.png

⚠️ 一个容易被忽略的点:hosts 改了要重启 Docker 才生效。Docker 守护进程在启动时会缓存域名解析结果,光改文件不重启的话,拉取仍然走旧地址。

另外,ping 能通不代表端口能通。完整的验证顺序是:

纯文本
① ping registry.linkease.net        → 确认解析到了对的目标 IP
② 测试 5443 端口是否可连            → 确认加速服务真的在监听
③ 实际拉一个镜像                    → 确认端到端可用

跳过第②步的话,遇到"解析对了但就是不动"的情况会很难排查——大概率是那台设备上的 KSpeeder 容器没起来,或者防火墙挡了 5443

方法二:修改主路由的 hosts 或 Dnsmasq

如果局域网里有多台设备都要用,推荐这个方法——在主路由上统一改,所有走这条路由的设备就都生效了,不用一台台去改。

  1. 如果主路由是 iStoreOS 等软路由系统:进入 网络 → DHCP/DNS → 扩展 HOSTS 文件中的主机后缀,添加一条映射:/registry.linkease.net/192.168.2.2

image.png
  1. 如果是硬路由(华硕、小米、TP 等):需要根据品牌自行查找修改 hosts 的方法,原理都一样。我的主路由是华硕,以它为例:先在系统设置里开启 SSH

image.png
  1. 用终端 SSH 连接路由器,修改 hosts 文件:vi /etc/hosts,添加一行(这次中间用空格):

纯文本
192.168.2.2 registry.linkease.net

image.png
  1. 此时路由器本地 hosts 已经修改完成。

image.png
  1. 但要让局域网里其它设备也立即生效,需要让 dnsmasq 重新加载 hosts:运行 killall -SIGHUP dnsmasq。之后再在飞牛上测试,加速就已经生效了。

image.png

killall -SIGHUP dnsmasq 这行在做什么

这一步看起来很"玄学",其实逻辑很直接:

  • 路由器的 DNS 服务(dnsmasq)在启动时把 hosts 内容读进了内存

  • 你改了文件,但内存里那份还是旧的;

  • SIGHUP 是 Linux 的一个信号,含义是"让进程重新加载配置",而不是杀死它;

  • 所以这行命令等于让 dnsmasq 重新读一遍 hosts,不清空缓存、不中断服务

理解了这一点,你就能举一反三:凡是改了路由器的 hosts 后"局域网其他设备不生效",都是因为没让 DNS 服务重载。同理,有的固件里对应的是重启 dnsmasq 服务,效果一样。

补充:为什么第 4 步"路由器本地已经成功"、第 5 步还要重载?因为第 4 步验证的是路由器自己的解析(它直接读文件),第 5 步才决定局域网其他设备(它们问路由器的 DNS 服务)。这两个层次别混。

方法对比与注意

  • 方法一的优缺点:改动精准、不碰路由,但每台要用加速的设备都得单独改一次,适合设备少的场景。

  • 方法二的坑:硬路由的 hosts 文件往往存放在内存里,主路由一重启就会恢复默认。虽然可以尝试把 hosts 存到持久化目录(如华硕的 jffs),但我实测这样会影响网速,所以最终还是更推荐方法一。知道如何在硬路由上持久化又不掉速的朋友,欢迎留言交流。

把两种方法的完整取舍摆在一起看:

对比项

方法一(改设备 hosts)

方法二(改主路由)

覆盖范围

只影响改过的那台

全局域网

改动位置

每台设备

一处

重启后是否保留

✅ 永久(写在磁盘)

⚠️ 可能丢失(内存态)

对路由的侵入

需 SSH / 改配置

适合场景

1-2 台设备

多台设备

我的建议:如果只有 NAS 一台要用(大多数人的情况),用方法一;真的有好几台机器高频拉镜像,再考虑方法二,并且先确认你的硬路由支持 hosts 持久化

补充提醒:registry.linkease.net 这个加速域名,请确认是你部署的 KSpeeder 实际提供的加速源;不同版本/配置可能源地址不同,改 hosts 前先确认好目标 IP 确实在跑加速服务,否则会适得其反。

再往上一层:三种共用架构怎么选

前面讲的是"怎么把请求指过去",但**"加速服务本身放在哪"**也是个值得先想清楚的问题。三种常见架构:

架构

做法

优点

缺点

分布式

每台设备各装一个 KSpeeder

互不影响,一台挂了不牵连别的

缓存不共享,占多份资源,每台都要维护

集中式(本文)

一台跑服务,其他设备指过来

缓存共享,只维护一个

那台挂了,所有设备都退回裸连

网关级

装在路由器 / 软路由上

覆盖全屋,开机即生效,无需逐台配置

依赖路由器性能和固件支持

选择建议

  • 只有一到两台机器拉 Docker → 分布式其实更省事,各自装各自的,不用折腾解析;

  • 有三台以上、或者镜像重复度高(大家都拉那几个基础镜像)→ 集中式的收益明显,一串缓存全屋共享;

  • 路由器是 iStoreOS / OpenWrt 这类可装插件的系统 → 网关级最省心,属于一次配置长期受益。

我现在的做法是集中式:旁路由上跑着服务,NAS 和迷你主机都指过去。唯一要注意的是给那台机器留够磁盘——缓存目录会一直长。

出问题了按这个顺序查

把常见症状和排查动作列成一张表,遇到问题从上往下走:

症状

优先检查

命令 / 动作

ping 域名没指过去

hosts 写对了吗

ping registry.linkease.net

解析对了但拉取仍慢

目标机 5443 通不通

端口探测 / 看容器是否运行

本机好了,别的设备没变

DNS 是否重载

killall -SIGHUP dnsmasq

重启路由后又失效

hosts 是内存态

换方法一,或做持久化

全都配置对但没效果

改完 hosts 有没有重启 Docker

systemctl restart docker

核心记住一句话:这条链路有"解析 → 端口 → 服务 → Docker 生效"四个环节,出问题就按这个顺序一层层验证,别跳着猜。

最后补一句前置提醒:这篇的前提是你已经有一台设备跑着 KSpeeder。如果还没有,先看 KSpeeder 单机部署那篇,把它跑起来,再回来做局域网共享。

END

相关文章

暂无相关文章