上一篇我们讲清楚了一件事:
IP 地址不是简单绑定给整台机器的,而是配置在网络接口上的。
理解到这里,你已经能看懂很多现象:
但这还不够。
因为在真实排障里,最常见的问题不是:
有没有 IP?
而是:
IP 明明配上了,为什么还是不通?
这一篇,我们就接着往下讲。
从公网 IP、内网 IP、子网掩码、网关、NAT,到最后的排错顺序。
目标还是一个:
不背概念,把 Linux 网络真正理解成一套能推导的逻辑。
一、IP 配上了,不代表网络就通了
很多新手会有一个误解:
只要网卡上有 IP,网络就应该能通。
但 Linux 不是这么工作的。
一个地址能不能通信,至少取决于几件事:
也就是说,IP 只是第一步。
真正决定数据包怎么走的,是内核的路由决策。
这一篇的核心,就是把这个决策过程讲清楚。
二、公网 IP 和内网 IP,不只是地址段不同
大家都知道,常见内网 IPv4 地址有这几段:
10.0.0.0/8172.16.0.0/12192.168.0.0/16
很多人会这样理解:
公网 IP 能上网,内网 IP 不能上网。
这个说法太粗了。
更准确地说,公网 IP 和内网 IP 的核心区别有两个:
比如你家电脑可以是:
192.168.1.10
我家电脑也可以是:
192.168.1.10
它们不会冲突。
因为这两个地址只在各自局域网里有意义。
公网 IP 就不一样。
一个公网 IPv4 地址,在同一时刻应该只分配给一个公网位置使用。
三、内网 IP 为什么也能访问互联网?
那问题来了:
既然内网 IP 不在公网上路由,为什么你家电脑还能刷网页、看视频、访问外网?
答案通常是 NAT。
也就是网络地址转换。
你在家里访问网站时,大致过程是:
而是:
内网 IP 不能直接作为互联网范围内可路由的地址,通常需要 NAT 或明确的路由设计。
这个区别很关键。
四、公网访问内网,为什么更麻烦?
内网主动访问公网,一般靠 SNAT 就能完成。
但公网主动访问内网,就不是自动发生的。
比如你的 Linux 机器是:
192.168.1.10
它在家用路由器后面。
外面的人不可能直接访问:
192.168.1.10:80
因为公网根本不知道你家局域网里这个地址在哪里。
如果你想让外部访问进来,通常需要:
云服务器也是类似逻辑。
很多云主机里执行 ip addr,你看到的可能只有私网 IP。
公网 IP 并不一定直接配置在你的网卡上。
它可能是在云平台的网络层做了一层映射。
所以,排查云服务器网络时,不要只盯着本机 ip addr。
还要看云平台控制台里的公网 IP、安全组、NAT 网关和负载均衡配置。
五、/24 到底在告诉 Linux 什么?
我们经常看到这样的地址:
192.168.1.10/24
这里的 /24 是 CIDR 写法。
它表示前 24 位是网络位。
对应的传统子网掩码是:
255.255.255.0
但你不要只背这个对应关系。
你真正要理解的是:
掩码告诉内核:哪些地址算同一个网段,哪些地址需要交给网关。
比如你的机器是:
192.168.1.10/24
现在它要访问:
192.168.1.20
Linux 一算,发现它们都属于:
192.168.1.0/24
于是内核会认为:
这是同一个二层网络里的机器,可以直接找它的 MAC 地址。
接下来就会发 ARP 请求。
如果它要访问:
192.168.2.20
Linux 一算,发现不是同一个网段。
于是它会把包交给默认网关。
所以 /24 不是装饰。
它会直接影响 Linux 怎么发包。
六、掩码写错,会出现什么问题?
举个特别常见的坑。
你的真实网络是:
192.168.1.0/24
你应该配置:
192.168.1.10/24
但你手滑写成了:
192.168.1.10/16
这时候 Linux 会以为:
192.168.0.0 ~ 192.168.255.255
都是本地直连网段。
于是当你访问:
192.168.2.20
它不会去找网关。
它会直接在本地网络里发 ARP:
谁是 192.168.2.20?
但实际上这个地址不在当前二层网络里。
自然没人回应。
你看到的现象可能就是:
这类问题新手很容易查半天。
其实根源可能只是掩码写错了。
七、广播地址和网络地址,入门阶段先这样理解
以这个网段为例:
192.168.1.0/24
通常会这样理解:
192.168.1.255:广播地址,表示发给这个网段所有主机192.168.1.1 ~ 192.168.1.254:常规可分配主机地址
广播地址常见于一些需要“通知整个网段”的场景。
比如 DHCP 客户端刚启动时,还不知道 DHCP 服务器是谁,就会用广播去找。
网络地址则用来标识一个网段。
对新手来说,先记住一个原则就够了:
普通 /24 网段里,不要把 .0 和 .255 分配给主机。
确实存在 /31、/32 这类特殊网络场景。
但入门阶段先不要拿特殊情况破坏基本规则。
生产环境里,遵守约定比炫技重要。
八、IPv4 和 IPv6 在 Linux 里怎么共存?
现在很多服务器已经同时有 IPv4 和 IPv6。
你执行:
ip addr
可能会看到类似输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 link/ether 52:54:00:12:34:56 inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 inet6 2409:8a10:1234:5678::10/64 scope global dynamic inet6 fe80::5054:ff:fe12:3456/64 scope link
这里:
注意,fe80::/10 不要简单类比成 IPv4 的内网地址。
它只在同一条链路上有效,经常用于邻居发现、自动配置等机制。
IPv6 里更接近“私有内网地址”的,是 ULA 地址:
fc00::/7
常见形式是 fdxx: 开头。
另外,IPv6 没有 IPv4 里的 ARP,也没有传统广播。
它使用 NDP 和多播来完成类似的邻居发现工作。
所以更准确的说法是:
Linux 管理 IPv4 和 IPv6 的入口很像,都是挂在接口上、都有路由表;但协议细节并不完全一样。
这就够了。
小白阶段不用急着把 IPv6 所有细节吃完。
先知道它和 IPv4 可以共存在同一个接口上,就不会看到多个 inet6 时慌。
九、实操:给网卡临时新增一个 IP
现在我们用一个小实验,把前面的概念串起来。
假设你的当前网段是:
192.168.1.0/24
当前网卡是:
eth0
你想临时新增一个地址:
192.168.1.110
第一步,先看当前配置:
ip addr
确认网卡名称。
第二步,添加 IP:
sudo ip addr add 192.168.1.110/24 dev eth0
第三步,检查:
ip addr show dev eth0
你应该能看到类似:
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0inet 192.168.1.110/24 brd 192.168.1.255 scope global secondary eth0
第四步,测试:
ping 192.168.1.110
本机能 ping 通,只能说明这个地址已经绑定到了本机。
如果你想验证局域网内其他机器能不能访问,还需要从同网段另一台机器测试。
第五步,不需要了就删除:
sudo ip addr del 192.168.1.110/24 dev eth0
注意,这种方式是临时配置。
重启后会丢失。
如果要永久生效,需要根据发行版修改持久化配置:
- RHEL / CentOS / Rocky / AlmaLinux 新系统常见是 NetworkManager
- 老 CentOS 7 常见是
/etc/sysconfig/network-scripts/ifcfg-*
这部分以后可以单独讲。
十、IP 配完不通,按这个顺序查
最后给你一套适合小白的排错顺序。
不要一上来就猜防火墙。
先从最确定的地方查。
1. IP 是否真的加到了正确接口?
先看:
ip addr
确认 IP 是不是在你以为的那块网卡上。
很多时候你以为是 eth0,实际机器叫 ens33、ens160 或者其他名字。
2. 掩码是否正确?
看地址后面的 /x。
比如:
192.168.1.10/24
不要把 /24 写成 /16,也不要漏掉掩码。
掩码错了,内核对“同网段还是走网关”的判断就会错。
3. 路由表是否正确?
看路由:
ip route
重点看两类:
192.168.1.0/24 dev eth0default via 192.168.1.1 dev eth0
第一行表示本地直连网段。
第二行表示默认网关。
如果没有默认网关,访问外网通常就会出问题。
4. 网关能不能通?
先别急着 ping 公网。
先 ping 网关:
ping 192.168.1.1
如果连网关都不通,问题大概率还在本地网络、网卡、掩码、交换机或网关本身。
5. 是否 IP 冲突?
如果你新增的 IP 已经被别人用了,就可能出现时通时不通。
可以查看邻居表:
ip neigh
也可以换一个确认未使用的地址再试。
生产环境里,最好从 IP 地址管理系统或 DHCP 分配记录里确认,不要随手猜一个。
6. 防火墙和安全组是否放行?
最后再看防火墙:
sudo iptables -L -nsudo firewall-cmd --list-all
云服务器还要看安全组。
这里不建议在生产环境里直接关闭防火墙。
更稳妥的做法是:
十一、这一篇到底讲明白了什么?
上一篇我们解决的是:
IP 绑在哪里?
这一篇解决的是:
IP 配上以后,包怎么走?
你只要抓住这几句话,Linux 网络排错就会清晰很多:
- 公网 IP 和内网 IP 的区别,不只是地址段,而是唯一性、作用域和可路由性
- IPv4 和 IPv6 管理入口相似,但协议细节不同
- IP 不通时,先查接口、掩码、路由、网关,再查冲突和防火墙
你看,网络问题并不是玄学。
它本质上是一串判断:
地址在哪里,目标在哪里,中间该不该找网关,路上有没有人拦。
把这条线理顺,后面再学路由、NAT、防火墙,就不会觉得每个概念都是孤立的。
如果你愿意继续往下看,下一篇可以继续拆:
Linux 路由表到底是怎么决定数据包出口的?
这才是网络排障真正进入“看路径”的开始。