局域网内所有设备使用同一个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。看起来很直观,但有两个麻烦:
写死了 IP:哪天 KSpeeder 换了机器(192.168.2.2 → 192.168.2.5),每台设备都得改一遍;
配置不一致:KSpeeder 自己的说明文档写的是
registry.linkease.net,你填 IP 就变成了"教程对不上实际",以后排查容易懵。
而用域名 + hosts 覆盖的方式,"用哪个地址"这件事被解耦了:所有设备填的都是同一个域名,改指向只需在解析层动一次。本质上,hosts 文件就是一个本地的、优先级高于 DNS 的"地址簿"。
顺便解释默认值为什么是 127.0.0.1:那是"只有本机"的意思——单机部署的默认行为不需要任何额外配置就能用,只有多设备共享才需要改指向。这个默认值选得很合理。
方法一:修改要使用 KSpeeder 的设备上的 hosts 文件
操作最简单,适合只有一两台设备需要加速的情况。
终端 SSH 连接要使用加速的设备(比如我的飞牛 NAS)。
打开 hosts 文件:
nano /etc/hosts。在文件末尾添加一行,把域名指到跑 KSpeeder 的设备 IP:
(注意中间是 tab 或空格,格式与文件里其它行保持一致。)

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

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

⚠️ 一个容易被忽略的点:hosts 改了要重启 Docker 才生效。Docker 守护进程在启动时会缓存域名解析结果,光改文件不重启的话,拉取仍然走旧地址。
另外,ping 能通不代表端口能通。完整的验证顺序是:
跳过第②步的话,遇到"解析对了但就是不动"的情况会很难排查——大概率是那台设备上的 KSpeeder 容器没起来,或者防火墙挡了 5443。
方法二:修改主路由的 hosts 或 Dnsmasq
如果局域网里有多台设备都要用,推荐这个方法——在主路由上统一改,所有走这条路由的设备就都生效了,不用一台台去改。
如果主路由是 iStoreOS 等软路由系统:进入
网络 → DHCP/DNS → 扩展 HOSTS 文件中的主机后缀,添加一条映射:/registry.linkease.net/192.168.2.2。

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

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

此时路由器本地 hosts 已经修改完成。

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

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 和迷你主机都指过去。唯一要注意的是给那台机器留够磁盘——缓存目录会一直长。
出问题了按这个顺序查
把常见症状和排查动作列成一张表,遇到问题从上往下走:
症状 | 优先检查 | 命令 / 动作 |
|---|---|---|
| hosts 写对了吗 |
|
解析对了但拉取仍慢 | 目标机 5443 通不通 | 端口探测 / 看容器是否运行 |
本机好了,别的设备没变 | DNS 是否重载 |
|
重启路由后又失效 | hosts 是内存态 | 换方法一,或做持久化 |
全都配置对但没效果 | 改完 hosts 有没有重启 Docker |
|
核心记住一句话:这条链路有"解析 → 端口 → 服务 → Docker 生效"四个环节,出问题就按这个顺序一层层验证,别跳着猜。
最后补一句前置提醒:这篇的前提是你已经有一台设备跑着 KSpeeder。如果还没有,先看 KSpeeder 单机部署那篇,把它跑起来,再回来做局域网共享。
相关文章
暂无相关文章