☰
Linux网络配置核心:IP地址、子网掩码与路由排障
2026/10/16 7:13:27 网站建设 项目流程

1. 动手前的底层概念:IP地址、子网掩码和网段判断

很多人学Linux网络配置,上来就背命令,ip addr add、route add记了一堆,结果真到配置的时候照样翻车。根子不在命令,在于对IP地址本身的理解是欠的。所以这篇我先花点篇幅把地基夯实,后面讲命令你会觉得顺理成章。

1.1 IPv4地址的结构:网络位和主机位到底在分什么

一个IPv4地址是32位二进制数,日常写成点分十进制,比如192.168.1.100。这32位被分成两段:网络位和主机位。网络位标识你所在的"网段",主机位标识你在该网段内的"门牌号"。可以类比快递地址:网络位是"某某市某某街道",主机位是"几号楼几室"。快递员先看街道,再看门牌,两层定位。

那么问题来了:32位里哪几位算网络位?这就是子网掩码的职责。子网掩码也是32位,写成255.255.255.0或者CIDR形式的/24,表示前24位是网络位,后8位是主机位。掩码说白了就是一把尺子,量出IP地址里哪段属于网络、哪段属于主机。

1.2 快速心算网段的实用技巧

实际工作中,面对/24、/25、/26这类前缀,要能快速算出这个网段的范围、广播地址和可用IP数,否则排查冲突时效率极低。

规律很简单:前缀每加1,可用主机数就减半。

前缀子网掩码网段内IP总数可用主机数
/24255.255.255.0256254
/25255.255.255.128128126
/26255.255.255.1926462
/27255.255.255.2243230
/28255.255.255.2401614

可用主机数要减2,是因为网段里第一个地址是网络地址本身,最后一个是广播地址,这俩不能分配给主机用。例如192.168.1.0/24,网络地址是192.168.1.0,广播地址是192.168.1.255,真正能用的只有192.168.1.1到192.168.1.254。

拿到一个IP和掩码,快速判断两台机器是否同网段,方法就是:把IP和掩码做按位与运算,得到网络地址,两个网络地址相同就在同一网段。实战中用不着真的去算二进制,记住规律即可:/24就是前三段一样在同网段,/16就是前两段一样。但遇到/25这种中间值,最好还是老老实实按位算一遍。

2. ip addr 深度解读:从输出内容读懂网卡状态

配置IP之前,先得会看当前网络状态。ip addr是这一代Linux网络命令的核心,取代了老旧的ifconfig。但很多新手看到它的输出一脸懵,不知道每行代表什么。

2.1 逐行拆解ip addr的返回信息

执行ip addr,典型的输出长这样:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0 valid_lft 86398sec preferred_lft 86398sec inet6 fe80::5054:ff:fe12:3456/64 scope link

第一行的eth0是网卡名称,尖括号里的UP表示网卡处于激活状态,LOWER_LUP表示物理链路已连通(网线插好了)。如果看到DOWN或者没有LOWER_UP,说明网卡没起来或者网线有问题,此时不用往下看了。

第二行的link/ether后面是MAC地址,这是网卡在二层(数据链路层)的身份标识。第三行的inet是IPv4地址,/24是前缀长度,scope global表示这是全局有效地址,后面的dynamic表示这个IP是DHCP动态获取的。

有个细节值得注意:valid_lft和preferred_lft表示DHCP租约剩余时间。如果租约快到期而续租失败,IP会先进入deprecated状态,最终被移除。排查"IP突然消失"问题时,这两个字段是重点线索。

2.2 lo接口和物理网卡的区别

ip addr输出里第一个通常是lo:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo

lo是回环接口,IP永远是127.0.0.1,它只在本机内部通信,不对外收发数据包。scope host表示这个地址只在主机内部可见。有初学者在服务器上ping不通外网,拿ping 127.0.0.1做测试,结果通,就以为网络是好的——这是典型的误判。回环接口通只说明协议栈还没坏,和物理网络是否通没有半毛钱关系。

2.3 查看简洁模式:ip -br addr

日常巡检时,完整输出信息太多,我喜欢用ip -br addr(brief模式),一行一个网卡,紧凑清晰:

lo UNKNOWN 127.0.0.1/8 eth0 UP 192.168.1.100/24

一眼就能看出哪块网卡是UP、配了什么地址。批量查看多台服务器时,这个命令比完整模式高效得多,也更容易写进脚本做状态采集。

3. 手工配置IP的两种方式:临时生效与永久写入

配置IP最常踩的坑就是"重启之后配置丢了"。原因很简单:命令配置只改内核内存里的状态,没有写进配置文件。要分清临时配置和持久化配置,根据场景选择合适方式。

3.1 临时配置:ip addr add命令的使用边界

测试环境里临时加个IP,用命令直接操作:

ip addr add 192.168.2.50/24 dev eth0 ip link set eth0 up

第二条命令其实通常不用手动执行——网卡一般已经是UP状态,但若网卡处于DOWN,加完地址后需要激活。这个配置立即生效,服务器重启后丢失。它的适用场景是:临时测试、调试网络、或者手动模拟DHCP下发的地址。

删除临时地址用:

ip addr del 192.168.2.50/24 dev eth0

需要注意,如果网卡本身是通过DHCP获取的地址,你手动ip addr add加一个同网段的静态地址,可能和DHCP租约产生竞争,表现就是地址忽隐忽现。临时加地址前,最好先确认网卡的现有IP来源。

3.2 持久化配置:主流发行版的配置文件与操作手法

持久化配置因发行版而异,目前主流的分三套体系,务必先分清你手上的是哪套:

发行版/体系配置文件位置推荐管理工具
RHEL/CentOS系/etc/sysconfig/network-scripts/ifcfg-*nmcli
Debian/Ubuntu系/etc/network/interfaces 或 /etc/netplan/*.yamlnetplan
systemd-networkd/etc/systemd/network/*.networknetworkctl

CentOS系的ifcfg文件,核心配置项长这样:

DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=8.8.8.8

改完以后执行systemctl restart network重启网络服务。但现在CentOS系更推荐用nmcli操作,避免手工改文件踩格式错误:

nmcli connection modify eth0 ipv4.addresses 192.168.1.100/24 nmcli connection modify eth0 ipv4.gateway 192.168.1.1 nmcli connection modify eth0 ipv4.method manual nmcli connection up eth0

Ubuntu新版本用netplan,配置在/etc/netplan/*.yaml,核心配置项:

network: version: 2 ethernets: eth0: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 8.8.8.8

注意netplan的yaml对缩进极其敏感,addresses列表项必须和前面的键保持层级一致,否则netplan apply直接报错。

3.3 为什么配完网关却上不了外网:网关与网卡对应关系

这是一个极其常见的场景:内网能通,外网不通。很多人第一反应是DNS问题,结果ping 8.8.8.8也不通,这才想到查路由。实际上,配置网关时最容易忽略的一点是:网关IP必须和网卡IP在同一网段。比如网卡配了192.168.1.100/24,网关却写了192.168.2.1,数据包出门就找不到路,直接饥饿。

用一条命令验证默认网关是否生效:

ip route show

正常输出应有类似:

default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100

如果只有第二条没有第一条,说明默认网关没配上。数据包只会在本网段内转悠,出不了门。

4. 路由表详解:数据包出门前的那次抉择

配置IP只是第一步,真正决定数据包走哪条路的是路由表。不夸张地说,Linux网络排障里七成问题都能通过读懂ip route解决。

4.1 路由表条目的含义和优先级逻辑

ip route输出中常见的几类路由:

  • default默认路由:所有未匹配到更具体路由的数据包都走这里,相当于数据的最后退路。
  • 网段直连路由:proto kernel开头的条目是内核根据网卡IP自动生成的,表示目标在该网段内的包直接通过对应网卡发送,不经过网关。
  • 静态路由:手动添加的复杂路径控制规则。

Linux路由查询是"最长前缀匹配"原则:目标IP同时匹配多条路由时,前缀最长的优先。比如发往192.168.1.5的数据包,同时有default和192.168.1.0/24两条路由,会走直连路由而非默认路由,因为/24比/0更具体。

4.2 多网卡服务器的路由策略

多网卡服务器经常出怪问题:明明两块网卡都配好了IP,ping网关都通,但跨网段访问时数据包走的网卡不对,导致服务不可用。这就是路由表的策略选择问题。

直连路由是内核按网卡自动生成的,同时存在192.168.1.0/24 dev eth0和192.168.2.0/24 dev eth1,本网段通信没问题。但去往192.168.3.0/24的数据包,只能走default路由。如果默认路由只写了via 192.168.1.1 dev eth0,那么所有跨网段流量都从eth0出去,eth1的流量也强行走eth0,网关不一定认得回来。

解决办法是给eth1加一条独立的路由:

ip route add 192.168.3.0/24 via 192.168.2.1 dev eth1

但命令方式重启失效,需要写进配置文件。RHEL系可以在ifcfg-eth1里加ROUTE相关参数,或者用nmcli添加静态路由,严重场景还需要调策略路由策略。

这里给一个经验之谈:双网卡跨网段通信,强烈建议直接用策略路由,单独维护一张路由表,把网卡和路由表绑定,别指望一张主路由表能撑起所有网卡的流量。否则总会遇到"通则全通、乱则全乱"的局面。

4.3 IPv6的基础认知:link-local地址和默认路由

虽然现在内网还是IPv4占绝大多数,但IPv6的配置也常见了,至少要知道基础概念。

IPv6地址是128位,写法是八组十六进制数,比如fe80::5054:ff:fe12:3456/64。fe80::/10开头的是link-local地址,相当于IPv4时代的169.254.x.x——自动生成的链路本地地址,只在同一物理链路上有效。很多人看到网卡上多了一个fe80开头的地址,以为是异常,其实是正常现象。

IPv6默认路由长这样:

default via fe80::1 dev eth0

注意IPv6的网关一般是link-local地址,不是全局单播地址。检查IPv6连通性用ping6(部分发行版ping已经支持IPv6)和ip -6 route show。

5. 连通性验证与常见排障链路

配置完之后不能只看配置项对不对,还得实测。但"测通"也有门道,很多人的测试方法本身就有问题,导致误判。

5.1 ping通不代表网络通,ping不通不代表网络不通

第一个经典误区:对方禁ping。很多生产服务器出于安全考虑会过滤ICMP包,ping不通不代表服务不可用。此时应该改用TCP端口测试,比如telnet IP 80或者nc -zv IP 3306。能建立TCP连接才算真正通。

第二个误区:过度依赖ping大包。ping -s 65500测MTU或者链路质量有一定道理,但ICMP和TCP/UDP在网络路径上的待遇可能不同,某些网络设备会优先丢弃ICMP。验证链路质量更可靠的做法是用实际业务流量测试,比如curl下载测速、ssh建立会话。

5.2 跨网段不通的完整排查思路

假设A机器192.168.1.100访问B机器192.168.3.100不通,我会按这个顺序排查:

  1. 先确认本机到网关通不通:ping 192.168.1.1,不通就看网卡状态、物理链路、IP配置。
  2. 再看A机器有没有到192.168.3.0/24的路由:ip route get 192.168.3.100。这个命令很直观,直接告诉你内核打算把包发给谁、从哪个网卡出去。
  3. 网关通且路由正确,但跨网段依然不通,那问题可能在中间三层设备——交换机VLAN配置、防火墙策略、路由器的ACL。
  4. 在B机器上反向验证:ip route get 192.168.1.100,有时问题出在回程路由缺失。

排查过程中,traceroute能看到数据包走到哪一跳断了,但要注意有些设备不回应TTL超时,导致traceroute输出* * *,不一定是断点。

5.3 ARP表与MAC地址:二层通信被忽视的环节

同网段通信靠ARP(Address Resolution Protocol)把IP解析成MAC地址。ip neigh show能看到ARP缓存表:

192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE 192.168.1.200 dev eth0 FAILED

状态是REACHABLE说明邻居可达,FAILED说明解析失败。如果同网段ping不通,先看ARP表里能不能解析到对端MAC。解析不到,可能是对端没开机、VLAN隔离、或者对端开启了ARP防护。

手动清空ARP缓存用ip neigh flush all。有些场景下ARP缓存陈旧会导致通信异常,清一下就好了。

5.4 一个真实场景的复现:DHCP获取IP后无法上网

最后分享一个我实际处理过的案例,正好串起这篇的所有知识点。某台服务器用DHCP拿到了IP:

eth0: 192.168.1.150/24

ip addr看着没问题,但外网不通。用ip route一看,发现没有default路由。DHCP虽然下发了IP,但网关没下发成功,常见原因是DHCP服务器配置缺了option router,或者客户端的DHCP请求被防火墙拦截了部分选项。

临时解决方法是手动补上默认网关:

ip route add default via 192.168.1.1 dev eth0

但关键是把DHCP服务端的网关下发配置修好,否则每次续租都可能在报错。如果是静态配置,则要检查GATEWAY=参数是否被注释掉、netplan里routes段是否缺失。这类问题靠背命令解决不了,核心还是对路由表的工作机制有数。

在实际操作中我的体会是:Linux网络配置这摊事,命令只占三成,七成是概念和排障思路。把IP分类、路由决策、ARP解析这几条主线摸透了,遇到问题先理清是二层问题、三层路由问题还是配置问题,再对症下手,效率比乱试命令高得多。最后建议大家每配完一台机器,都执行一遍ip addr、ip route、ip neigh show三条命令看一眼结果,形成习惯,基本就告别大部分网络故障了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询