介绍

管过内网的人大概都经历过:某台设备要上线,先翻聊天记录问"10.0.0.x 哪段还能用",或者打开一张不知道谁维护的 Excel,里面密密麻麻写着 IP,可到底哪个真在用、哪个早空了,谁也不敢拍胸脯。

我在 hub.saintic.com 上放了一个 IPAM 地址池服务,思路很简单——你把一个 CIDR(比如 10.0.0.0/16)当成一个地址池,按掩码往里划子网、分配出去,它帮你持续跟踪利用率、检测重叠冲突。它不是在线子网计算器,而是会把分配结果存下来,保证同一个人的地址池之间、同一个池的子网之间互不重叠。

红绿黄三色一眼能看明白:红色是已用网段,绿色是可用,黄色是利用率到告警线了。

临时划分(不用登录)

还没想好要不要存?先来算一下也无妨。访问 https://hub.saintic.com/ipam,「网段信息与子网分配」那块不用登录就能用:

  • 计算网段信息:输入 192.168.1.10/24 这种带主机位的写法它也认,会回显规范写法 192.168.1.0/24,顺带给出掩码、网络/广播地址、可用范围、主机数、私网/公网类别、反向解析域等;
  • 网络子网分配:给定池和掩码(比如 10.0.0.0/16 按 /24 划),直接给出候选子网、空闲块和一张占用图,不写库、不收费,纯当临时规划草稿。

临时划分、查询这些都不收钱,适合随手算算再决定。

保存地址池(需登录)

真要长期管起来,登录后在 /ipam 把地址池存下来就行(每个账号免费 5 个)。存好之后进详情页能做的事就多了:

  • 分配子网:按掩码自动分配,或指定某个 CIDR;分配策略有「最低地址优先」和「最小可用块」两种,后者更省碎片、给以后扩容留大块;
  • 批量生成:一次按掩码批量划一批(默认先 dry-run 预览,确认再落库),最多 256 个;
  • 利用率与告警:占用图 + 空闲块列表实时算,利用率到 80% 黄、95% 红,哪段快满了看得清清楚楚;
  • 冲突检测:一键查你名下地址池之间有没有重叠网段。

数据是按账号隔离的,你只能看到自己存的池,别的用户那边是什么样完全看不到。

地址观测 + 边缘扫描 agent

光登记子网还不够"活",实际网络里哪些 IP 真的在跑、有没有偷偷用了没登记的段?这就用到了地址观测:各网络边界的存活 IP 可以上报上来,和已登记子网做对照,自动标出两类异常——

  • 影子 IP:活着、却不在任何已登记子网里的地址(可能是私自接的设备);
  • 幽灵登记:已登记子网内却一直没观测到存活的地址(可能是早该回收的)。

上报不用你手写,配一个 Go 写的边缘 agent ipamcli 就行,它在每个三层边界 / VLAN / VPC 跑一轮扫描,把存活地址按批打给 hub 的观测接口,hub 侧不用改任何东西。

agent 支持 scan(单轮,挂 cron 跑)和 daemon(常驻,定时 + SIGHUP 热重载)两种形态,探测方式覆盖邻居表、ARP、ICMP、TCP、DHCP 租约,跨三层用 ICMP/TCP、同二层用 ARP,云 VPC 禁 ARP 广播就走 ICMP+TCP。

嫌编译麻烦直接拉镜像,ARP 需要宿主机网络命名空间,挂个 host 网络就行:

docker run -d --name ipamcli --restart unless-stopped \
  --network host \
  -e IPAMCLI_API_KEY=ohk_xxx \
  -v ipamcli-spool:/var/lib/ipamcli \
  staugur/ipamcli:latest

(API Key 在 hub 个人控制台创建,形如 ohk_...;不挂配置文件时靠 IPAMCLI_API_KEY 即可工作。)

想接自己系统?有 API

除页面外,全套能力都有 REST 接口,复用站点的 API Key(Authorization: Bearer ohk_...)调用。几个例子:

KEY="ohk_xxx"

# 建一个地址池(超出免费额度会按量扣费,失败自动回滚)
curl -s -X POST https://hub.saintic.com/api/ipam/networks \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"name":"prod","cidr":"10.0.0.0/16"}'

# 在该池按 /24 分配一个子网,策略选最小可用块
curl -s -X POST https://hub.saintic.com/api/ipam/networks/1/subnets \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"prefix":24,"name":"app","strategy":"best-fit"}'

# 批量生成:先 dry_run=true 预览,确认后改 false 落库
curl -s -X POST https://hub.saintic.com/api/ipam/networks/1/subnets/batch \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"mask":26,"count":4,"name_prefix":"app","dry_run":true}'

错误统一返回 {"success": false, "message": "..."}:参数/业务问题 400,未登录 403,不存在或越权 404。

费用

  • 登录用户默认免费保存 5 个地址池;
  • 超出后按量计费,1 元/个(仅 postpaid,创建时校验余额、成功后才扣、失败回滚,幂等);
  • 临时划分、子网分配、查询、地址观测都不收费,只有"多存地址池"这一项计次。

免费额度对个人或几个小网段足够,池多再考虑按量。

小结

IP 地址这东西,少的时候无所谓,多了就是债。与其靠一张慢慢失真的 Excel 硬撑,不如到 hub.saintic.com 登录后存几个地址池,把网段、子网、VLAN 规规矩矩记进去;再在各个边界扔个 ipamcli agent 做存活观测,影子 IP 和该回收的幽灵网段一眼就能看出来。前期麻烦一点点,后面每次扩容、排查都能省下瞎找的时间。

家里设备多、或者开始带内网的,都可以从这个轻量方案试起。


·End·