子网掩码引发的血案
子网掩码引发的血案
很多人玩软路由、iStoreOS、OpenWrt 旁路由,折腾半天网络不通、网关失效、DNS 报错、后台失联,折腾路由策略、防火墙、DNS 转发,最后发现:所有问题,仅仅是子网掩码填错了。
今天记录一次真实踩坑:仅仅一个掩码位数错误,直接整网瘫痪,堪称「子网掩码引发的血案」。
一、事故现场:配置看着全对,网络就是不工作
我的网络拓扑非常简单:
-
主路由:192.168.5.1
-
出口路由:192.168.5.66(真实上网网关)
-
iStoreOS 单网口旁路由:192.168.5.70
我的需求也很简单:让 iStore 本机全部流量走 192.168.5.66 上网。
于是我在 iStore 后台:
-
IP 地址填写:192.168.5.70
-
网关填写:192.168.5.66
-
DNS 填写正常公共 DNS
保存配置后,诡异现象出现:
-
后台看着配置全部正确
-
ping 网关直接报错:Network unreachable(网络不可达)
-
默认路由为空,系统不认网关
-
内网访问后台时通时断,改一次网关崩一次网
-
DNS 全部失效,无法解析任何域名
我一度以为是策略路由冲突、防火墙拦截、单臂路由bug、系统路由表损坏……
最后排查到根因:子网掩码我忘记设置,默认成了 /32(255.255.255.255)。
二、核心真相:什么是子网掩码?255 到底代表什么?
很多人折腾网络多年,其实从来没真正懂过掩码。
IP 地址 = 小区门牌号
子网掩码 = 小区边界范围
掩码里的数字只有两种含义:255 和 0。
255 = 这一段是网段,固定不变,属于「小区公共区域」
0 = 这一段是主机位,可以自由分配给设备,是「住户门牌号」
1. 正常家用掩码:255.255.255.0(/24)
二进制展开:
11111111.11111111.11111111.00000000
含义:
-
192.168.5 三段固定为网段
-
最后一段 0~254 可以接设备
设备能正确识别:192.168.5.x 全部是自己人,同网段直连通信,不用往外发。
2. 灾难掩码:255.255.255.255(/32)
二进制全部是 1:
11111111.11111111.11111111.11111111
含义:
整个网段,只允许存在自己这一台设备。
相当于:你把小区范围设置成「只有你自己家」,没有邻居、没有大门、没有外网。
三、为什么掩码填错,直接全网瘫痪?(本次血案根源)
当 iStoreOS 地址为:192.168.5.70/32
系统判断逻辑非常残酷:
192.168.5.66、192.168.5.1 全都不是同网段设备。
于是出现致命死循环:
-
我要上网,需要找网关 192.168.5.66
-
系统判定:网关不在内网,必须发给默认网关
-
但默认网关就是它自己,形成闭环死锁
-
直接报错 Network unreachable
这就是:配置看着全对,网络彻底瘫痪的根本原因。
四、为什么不填掩码、填错掩码,就无法联网?
很多新手疑惑:我都填 IP 和网关了,为啥还要掩码?
因为:IP 负责身份,掩码负责判断路径。
设备发包前,会做一次「与运算判断」:
-
目标地址和自己是同一网段 → 内网直连,直接发网卡
-
目标地址不是同一网段 → 丢给网关转发
没有正确掩码 = 设备彻底分不清谁是邻居、谁是外网。
这也是为什么:
-
DHCP 自动获取不用填掩码(服务器自动下发正确网段)
-
静态 IP 必须手动填掩码,缺一不可
五、单网口软路由的双重坑(新手必踩)
本次事故还叠加了OpenWrt / iStoreOS 单网口bug:
单臂路由 br-lan 网桥重启后,会随机丢失本地直连路由。
表现为:
-
网页配置里网关正常
-
内核路由表无默认路由
-
改一次网络崩一次
最终完美解决方案:
-
LAN 掩码固定 255.255.255.0 (/24)
-
网页添加静态路由:192.168.5.0/24 走 LAN 接口
-
网关正常填写上游出口 192.168.5.66
-
不使用任何 rc.local 硬写路由,纯标准 UCI 配置
从此再也不会出现「改网关就断网」的玄学问题。
六、最终复盘:网络 90% 的玄学问题,都是基础配置错了
折腾软路由、旁路由、科学上网、策略路由、DNS 劫持之前,一定要先记住这句话:
所有高级网络功能,都建立在「基础网段路由正确」之上。
本次血案总结:
-
/32 掩码 = 自杀式配置,单设备孤岛,完全无法局域网通信
-
掩码决定网段,网段决定路由逻辑,路由逻辑决定能否联网
-
单网口软路由务必固定 /24 掩码 + 静态网段路由兜底
-
不要上来就折腾策略路由、防火墙,先检查 IP/掩码/路由表
结尾
玩网络越久越明白:真正搞崩网络的,从来不是复杂规则,而是最基础的参数写错。
一个小小的子网掩码,足以引发一场全网血案。