网络与 IP

IP 段划分规则:按用途分区、按规模取 2 的幂、按位置连续

IP 段划分规则可以落成四条:一个网段只放一种用途的设备;掩码按“设备数 + 网关 + 网络地址和广播地址”向上取 2 的幂;地址顺序跟着机房、列、机柜的物理顺序走;在功能区、网段、机柜三级各留余量。照这四条划出来的段,看地址就知道设备在哪,扩容时已分配的地址不用动。

作者 顶联产品团队发布于 8 分钟阅读

IP 段划分规则说到底要回答四个问题:这个段放什么设备、开多大、从哪里开始、留多少余量。对应的四条规则是:按用途分区,管理、IPMI、业务、存储、装机各用各的段;按规模取 2 的幂,把设备数、网关、网络地址和广播地址加起来,取不小于它的最小 2 的幂作为块大小;按物理位置连续,同一列、同一机柜的设备地址排在一起;分层预留,功能区留伙伴块,网段内留周转地址,机柜里留替换位。下面逐条给出做法和判断标准,最后用一个 4 列 40 柜的机房把四条规则串成一张划分表。

规则一:按用途分区,一个网段只放一类设备

判断两类设备能不能放进同一个网段,看三件事:访问策略是否相同、MTU 是否相同、是否需要 DHCP。三件事有一件不同,就必须分段。按这个标准,机房里通常要分出下面八个功能区:

功能区 放什么 网关 特殊要求
设备管理网 交换机、防火墙管理口,PDU、动环采集器 有,只对基础服务区开放 不接任何客户设备
IPMI 网 服务器 BMC 管理口 有,只对跳板机和管理系统开放 与设备管理网分开,BMC 数量多、风险高
业务公网 出租服务器、托管客户的公网地址 有,在核心或出口设备上 以 /24 为单位登记和调度
业务内网 客户服务器之间的私网互联 一般不需要 按客户分 VLAN、分段
存储网 iSCSI、NFS、Ceph 等存储流量 一般不配,不参与路由 常开巨型帧,MTU 端到端一致
装机网 PXE 装机时的临时地址 有,装机服务器在这里 全机房只有这里允许 DHCP
基础服务 跳板机、监控、DNS、NTP 有 运维人员进入管理网、IPMI 网的入口
互联与环回 设备之间的点对点链路、环回地址 不适用 互联用 /31 或 /30,环回用 /32

其中有两对最容易被合并、也最不该合并:

  • 存储网和业务内网。存储流量突发大,一次数据重平衡就能把链路跑满;存储网通常开 MTU 9000 的巨型帧,业务网是 1500,混在一个 VLAN 里会出现小包能通、大包被丢的隐蔽故障。Ceph 还可以再拆一层:public_network 给客户端访问,cluster_network 给副本复制和数据恢复,两个各占一个段。iSCSI 做多路径时,常见做法是 A、B 两条路径各用一个网段,以存储厂商的建议为准。
  • 装机网和 IPMI 网。不少 BMC 出厂默认用 DHCP 获取地址。如果装机用的 DHCP 服务和 BMC 在同一个广播域,新上架服务器的 BMC 会从装机地址池里领到一个地址,之后它的地址就不再可预测,管理系统里登记的地址也对不上。装机网单独一个 VLAN,全机房只有它开 DHCP。

规则二:按规模取 2 的幂,先算清一个段要占哪些地址

子网的地址数只能是 2 的幂,所以掩码不是“看着够用就行”,而是先把所有占用加起来,再向上取整:

需要的地址数 = 规划期末的设备数 + 网关占用 + 2(网络地址和广播地址)

网关占用这样算:单台网关,或堆叠成一台逻辑设备的网关,算 1 个;用 VRRP 时虚拟地址加两台设备的实地址,算 3 个;不需要网关的存储网、业务内网算 0 个。块大小取不小于需要地址数的最小 2 的幂,前缀长度 = 32 − log₂(块大小)。

设备数 单网关时需要 掩码 VRRP 时需要 掩码
5 8 /29 10 /28
13 16 /28 18 /27
29 32 /27 34 /26
61 64 /26 66 /25
125 128 /25 130 /24
200 203 /24 205 /24
300 303 /23 305 /23

前五行的设备数是故意卡在边界上的:单网关时,块大小减 3 就是能放的设备上限,/27 最多放 29 台,第 30 台就要换 /26;改用 VRRP 后上限再少 2 台。不少网段开通一两年后“突然不够用”,原因就是当初只算了一个网关地址,后来改成双机 VRRP,两个实地址挤掉了两台设备的位置。

边界附近用脚本算更不容易错:

def prefix_for(devices, gw=1):
    need = devices + gw + 2              # 设备 + 网关占用 + 网络地址与广播地址
    return 32 - (need - 1).bit_length()  # 取不小于 need 的最小 2 的幂

for n in (5, 13, 29, 61, 125, 200, 300):
    print(n, f"/{prefix_for(n)}", f"/{prefix_for(n, gw=3)}", f"/{prefix_for(n, gw=0)}")

每行输出设备数,以及单网关、VRRP、无网关三种情况下的掩码。算出掩码之后,起始地址还要对齐到块大小的整数倍:/26 的块大小是 64,第四节只能从 0、64、128、192 开始;写成“x.x.x.32/26”的网段并不存在,设备和计算工具会把它当成 x.x.x.0/26,或者直接报错。

两个例外不按公式算:设备互联的点对点链路只有两台设备,用 /31 或 /30;环回地址每台设备一个 /32。它们也要集中放在一个功能区里,不要散落在业务段之间,否则网段表里会多出几十条零碎记录。

规则三:按物理位置连续,地址顺序跟着机柜走

物理连续的意思是:地址的层次和机房的物理层次一一对应。机房、列、机柜、U 位,每往下一层,都是上一层地址块里的一段连续地址。这样做有三个直接的好处:

  1. 看地址就知道位置。告警里出现一个 BMC 地址,不用查表就能算出在哪一列、哪个柜、第几台。
  2. 按列写规则。每列交换机下面是一个连续块,ACL、监控采集范围、汇总路由都能按列写一条。
  3. 整块回收。一列机柜整体改造或退租时,它的地址是完整的一块,收回来可以原样再分配,不会留下碎片。

具体可以这样定,后面的划分表就按这套规则:

  • 每列一个 IPMI 段、一个公网段,第三节或网段本身对应列号:A 列 IPMI 用 10.40.16.0/24,B 列用 10.40.17.0/24,依此类推。
  • 每个机柜在段内占 20 个地址,机柜编号 k 从 1 起算,第 k 个机柜从 k × 20 + 1 开始,到 k × 20 + 20 结束;柜内按 U 位从下往上编号,第 n 台服务器的末位是 k × 20 + n。这样 1 号柜从 .21 开始,段首的 .1~.20 正好空出来给网关和其他用途。
  • IPMI 地址和公网地址末位相同。B 列 7 号柜第 5 台服务器,IPMI 是 10.40.17.145,公网是 198.51.100.145,知道其中一个就能推出另一个。

不是所有功能区都适合按位置排。业务内网和存储网跟着客户和集群走:一个客户的服务器可能分散在几个机柜,一个 Ceph 集群可能跨两列,它们的段按客户或集群分配,段内再按节点顺序编号。托管客户的公网地址也一样,设备是客户的,可能换柜,按客户分段比按机柜分段省事。判断标准只有一句:地址跟着服务商自己的设备走,就按位置排;地址跟着客户或集群走,就按归属排。

规则四:分层预留,每一层留什么

预留不是最后统一留一块,而是每一层各留一部分,用途各不相同:

层级 私网怎么留 公网怎么留 留给什么
功能区 按规划期末需求取 2 的幂后至少再放大一倍,先启用够用的部分,其余锁定 不提前划给功能区,持有的段里至少保留一个完整 /24 不切分 扩容时缩短前缀原地翻倍;公网整块留给新业务
网段 段首留给网关和网络设备,段尾留给临时设备 每个启用的 /24 留出约 10% 不分配 客户加购 IP、换 IP、故障替换时的周转
机柜 每柜的地址区间比满柜台数多 2 个 与 IPMI 同步 返修机、临时测试机上架时不打乱编号

表里的比例是经验做法,增长快的机房可以留得更多。私网放大一倍几乎没有成本;公网稀缺,不能照搬“每个在用块旁边空一个伙伴块”的做法,只在段内保留周转空间,并在台账上把未切分的整段锁定。

预留块最怕被临时借用:借出去的地址往往不会按时归还,伙伴块一旦被占,扩容时只能在同一个 VLAN 接口上再挂一个不连续的段,规则一到规则三会被同时破坏。所以预留块在台账和系统里都要标成锁定,借用必须走变更。

一张划分表:4 列 40 个机柜的机房

假设一个机房有 A~D 四列,每列 10 个 42U 机柜,每柜最多 18 台服务器;A、B 列放服务商自有的出租服务器,C、D 列给托管客户。私网用 10.40.0.0/16,公网用 RFC 5737 的文档专用地址代替实际持有的段,套用时换成你自己的地址。

私网地址充裕,每个功能区统一给 /20(业务内网 /19),远大于首期需求,也便于记忆。七个功能区加一块整体预留,共八块,每块的起点都是自身大小的整数倍:

地址块 功能区 当前启用 VLAN 网关 分配规则
10.40.0.0/20 设备管理网 10.40.0.0/24 10 10.40.0.1 核心与防火墙 .2~.10;每列 40 个地址(A 列 .20~.59),柜内按业务接入、管理接入、A 路 PDU、B 路 PDU 的顺序连续;动环 .200~.239
10.40.16.0/20 IPMI 网 10.40.16.0/22,每列一个 /24 21~24 各段 .1 柜内按 k × 20 + n 编号,.221~.254 留给临时设备
10.40.32.0/19 业务内网 10.40.32.0/20 2001~2999 不配 按客户切 /28、/27,不按位置
10.40.64.0/20 存储网 10.40.64.0/24、10.40.66.0/24 3001、3002 不配 集群一的 public 网和 cluster 网,各自后面一个 /24 留作扩容;MTU 9000
10.40.80.0/20 装机网 10.40.80.0/24 30 10.40.80.1 装机服务器用 .2~.19,DHCP 池 .20~.250,装机时才把服务器端口切进来
10.40.96.0/20 基础服务 10.40.96.0/24 40 10.40.96.1 跳板机、监控、DNS、NTP
10.40.112.0/20 互联与环回 10.40.112.0/24、10.40.113.0/24 — — 前者切 /31 做互联,后者给环回 /32
10.40.128.0/17 整块预留 — — — 锁定,留给二期或新功能区

公网按列和按客户两种方式并存:

网段 用途 VLAN 网关 分配规则
203.0.113.0/24 A 列出租服务器 101 .1 末位与 IPMI 相同(k × 20 + n);.2~.20 和 .221~.254 共 53 个用于客户加购 IP,其中至少 25 个(约 10%)不分配,留作换 IP 和故障替换的周转
198.51.100.0/24 B 列出租服务器 102 .1 同上
192.0.2.0/24 C、D 列托管客户 每客户一个,从 1101 起 各子网第一个可用地址 按客户切 /29、/28、/27,大块和小块分区存放

逐条对照四条规则:规则一,八个功能区各有独立的地址块,需要二层的都有自己的 VLAN;规则二,IPMI 网每列 10 柜 × 20 个地址,加网关 1 个、网络和广播地址 2 个,共 203 个,取 /24,存储网不配网关,按设备数加 2 计算;规则三,IPMI 和出租服务器公网都按列、柜、U 位连续,业务内网和存储网按客户与集群;规则四,私网每个功能区只启用一部分、其余锁定,每柜多留 2 个位置,公网每段至少留约 10% 作周转。

划分完成后核对四件事

  1. 功能区不重叠、没缝隙、起点对齐。用 Python 自带的 ipaddress 模块一次检查:
import ipaddress

zones = ["10.40.0.0/20", "10.40.16.0/20", "10.40.32.0/19", "10.40.64.0/20",
         "10.40.80.0/20", "10.40.96.0/20", "10.40.112.0/20", "10.40.128.0/17"]
nets = [ipaddress.ip_network(z) for z in zones]       # 起点没对齐会直接抛出 ValueError
print(list(ipaddress.collapse_addresses(nets)))       # 只剩 10.40.0.0/16,说明中间没有缝隙
print(sum(n.num_addresses for n in nets) == 2 ** 16)  # 再输出 True,说明没有重叠
  1. 每个网段只对应一个 VLAN、一种用途。逐个核对核心交换机上的三层接口地址与划分表一致,没有某个 VLAN 接口上挂着两个不同用途的段。
  2. 存储网巨型帧端到端可用。在一台存储节点上用不允许分片的大包测试,9000 减去 20 字节 IP 头和 8 字节 ICMP 头,载荷是 8972 字节:
ping -M do -s 8972 -c 3 10.40.66.12     # Linux;Windows 用 ping -f -l 8972 10.40.66.12

能通才说明沿途交换机端口和两端网卡的 MTU 都已调大;报“Message too long”或超时,说明某一段还是 1500。 4. 装机网以外没有 DHCP。在 IPMI 网和设备管理网里各找一台 Linux 主机,执行 sudo nmap --script broadcast-dhcp-discover,不应收到任何 DHCP 应答。

在 IPAM 里落地这张表

划分表写在文档里,几个月后多半会和现场对不上。把它录进 Toplink DCIM 的 IP 地址管理,四条规则大多可以交给系统守着:段按 CIDR 录入后自动算出起止地址和掩码,网关统一选第一个地址;类型标成公网 IP、IPMI、客户内网、内网 IP 等,存储网和装机网可以用“其他”类型再加标签区分;每个段记录所在 VLAN 和网关所在的交换机,与划分表的 VLAN 列一一对应;伙伴块录成单独的段并锁定,周转地址也设为锁定;开通服务器时只从开启了自动分配的段里取址,并排除已占用和已锁定的地址,预留不会被悄悄用掉。

按列划分的公网段是一个较大的广播域,同一 VLAN 里有几十个客户,需要防止有人改用别人的地址。在交换机管理里对服务器端口启用 ARP 绑定和源地址校验,IP 与 MAC、端口锁定之后,冒用地址的流量会在交换机端口上被丢弃。

常见问题

IP 段划分时网关用第一个地址还是最后一个?

两种都可以,关键是全机房统一。统一用第一个可用地址(.1)更常见,配 VRRP 时虚拟地址用 .1、两台设备用 .2 和 .3;混用会让每个段都要单独查网关,装机模板和脚本也容易写错。

设备互联用 /30 还是 /31?

两台设备之间的点对点链路可以用 /31(RFC 3021),两个地址都可用,比 /30 省一半;前提是两端设备都支持,部分老设备和防火墙不支持时用 /30。放服务器的网段一般不用 /31:它只有两个地址,去掉网关只剩一台设备的位置。

机房只有一个公网 /24,还要按列划分吗?

不用硬分。一个 /24 只够一两列服务器时,按列切反而让每列都不够用;可以整段作为一个网段,段内仍按“列、机柜、U 位”的顺序给地址,保留物理连续的好处,等拿到第二个 /24 再按列分开。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88