centos 7中netmask与prefix不能共存,优先读取prefix并忽略netmask;改后需重启network服务,且bootproto必须设为static、onboot设为yes才生效。

直接改 NETMASK 或 PREFIX,但二者不能共存,选一个用就行;改完必须重启网络服务才生效。
为什么改了 NETMASK 不生效?
常见原因是:BOOTPROTO 没设成 static,或者同时写了 NETMASK 和 PREFIX 导致冲突。CentOS 7 的 network 服务会优先读取 PREFIX(如果存在),忽略 NETMASK。
-
NETMASK=255.255.255.0是传统写法,对应 /24 -
PREFIX=24是现代推荐写法,更简洁,且和ip addr输出一致 - 两者只能保留其一,否则
systemctl restart network会失败,日志里报Invalid prefix length或静默跳过 - 确认网卡配置文件路径:/etc/sysconfig/network-scripts/ifcfg-
ens33(接口名以ip a实际输出为准)
NETMASK 和 PREFIX 怎么选?
优先用 PREFIX,尤其在 CIDR 场景下(比如 /25、/26)更直观,也避免手误输错掩码(如把 255.255.255.128 写成 255.255.255.192)。
- 要配 /25:写
PREFIX=25,别写NETMASK=255.255.255.128(易错) - 要配 /26:写
PREFIX=26,对应掩码是255.255.255.192,但不用记 - 如果已有脚本或团队规范强制用
NETMASK,确保值合法(必须是连续高位为 1 的二进制,如255.255.254.0合法,255.255.255.1非法) -
PREFIX不支持小数,也不支持非整数前缀(如 /24.5)
改完不生效的排查点
改完配置文件后,systemctl restart network 失败或 IP 没变,先看这几处:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 检查
ONBOOT=yes—— 如果是no,重启服务也不会激活该接口 - 确认
BOOTPROTO=static—— 若仍为dhcp,IPADDR和掩码会被忽略 - 运行
ip addr show dev <code>ens33看实际分配的前缀长度,不是只看配置文件 -
journalctl -u network -n 20查最近错误,常见提示:Failed to set route: File exists(说明网关或路由冲突) - 别漏掉
GATEWAY配置 —— 掩码变了,网关可能不在同一子网,导致路由失败
用 nmcli 动态改掩码(临时调试用)
不想改配置文件、只想快速验证?可以用 nmcli 直接重配 IPv4 地址+前缀:
nmcli con mod "System ens33" ipv4.addresses "192.168.1.100/25" nmcli con mod "System ens33" ipv4.method manual nmcli con down "System ens33" && nmcli con up "System ens33"
注意:"System ens33" 是连接名,用 nmcli con show 查真实名称;这种改法不持久,重启或 nmcli con reload 后会回退到配置文件值。
真正上线环境,还是得改 /etc/sysconfig/network-scripts/ifcfg-<code>ens33 并重启 service —— 配置文件和运行时状态不一致,是最容易被忽略、也最常引发连通性故障的地方。










