前言:
本文旨在用最通俗易懂的方式,梳理 Linux 网络管理的核心知识体系。为了方便理解,我将很多专业术语做了口语化处理,比如把"网络设备"说成"物理网卡"。这可能会让资深工程师觉得不够严谨,但我相信对刚接触这块内容的朋友来说,会更好的理解。
一、linux里有网络设备和网络连接的概念,网络设备是我们真实的(物理)网卡,"网络连接是 NetworkManager 中的配置档案(Profile),它定义了 IP、网关、DNS 等参数,本身不是设备,听着可能有点绕,我们可以把它想象成虚拟的网卡。我们要配置ip地址,必须先创建网络连接并将物理网卡绑定到网络连接上,再在网络连接上配置ip地址,一个网络连接中可以添加多个ip地址,但如果物理网卡故障,则网络连接中的所有ip都将无法使用。
sql
看网络连接的汇总
nmcli connection show
看物理网卡上绑定的ip
ip address show
二、如何创建网络连接并绑定物理网卡
bash
创建网络连接并绑定物理网卡
nmcli connection add type ethernet con-name "eth0" ifname "eth0"
#新建一条网络连接配置:nmcli connection add
#连接类型为普通以太网:type ethernet
#连接的名字叫virtual:con-name "eth0"
#该连接绑定的物理网卡设备是:ifname "eth0"
#连接类型除了ethernet,还有许多如(wifi、bond、team、bridge等等),可以按两下TAB出来。
#连接名称可以任意,建议与物理网卡一致,方便管理。
#绑定的物理网卡名称必须填写正确,否则该连接无法被激活。
#创建完成可以通过nmcli connection show查看网络连接是否建立成功。
三、创建网络连接并绑定好物理网卡之后,如何添加ip地址
bash
在网络连接上添加ip地址
nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.88.222/24 \
ipv4.gateway 192.168.88.254 \
ipv4.dns 114.114.114.114 autoconnect yes
#修改名为 eth0 的网络连接配置:nmcli connection modify eth0
#IPv4设置为手动静态 IP模式,不通过DHCP自动获取:ipv4.method manual
#配置静态 IP 与子网掩码:ipv4.addresses 192.168.88.222/24
#配置默认网关: ipv4.gateway 192.168.88.254
#配置 DNS 服务器:ipv4.dns 114.114.114.114
#开机自动激活该连接,保证配置永久生效:autoconnect yes
#注意:这一步只是在网络连接上创建 ip 地址,配置并没有生效。
#除了这些配置之外还有其他配置,输入 ipv4. 可以按两下TAB出来。
激活网络连接
nmcli connection up eth0
激活成功后查看ip地址
ip address show eth0
四、通过nmcli connection创建并激活的ip是长期生效的,我们还可以通过以下的方式临时配置ip地址。
csharp
在网卡上添加ip地址
ip addr add 192.168.88.100/24 dev eth0
删除网卡上的ip地址
ip addr del 192.168.88.100/24 dev eth0
#这种方式添加的ip地址,不会生成网卡,任何一个ip地址出了问题都不会影响其他ip地址,如果网卡故障,则所有ip地址都无法通信。
#可以绑定不同网段的ip地址,网段不同,路由也是各走各的,该方式属于临时配置,重启会丢失。
#相当于在操作系统内核层面直接修改了网卡配置,绕过了"网络连接"。
五、有的网络连接开启了自动连接功能,当发现物理网卡没有绑定网络连接时,会自动绑定。
perl
查看网络连接是否开启了自动连接
nmcli -f NAME,AUTOCONNECT connection
#选项-f是(fields)用来指定显示哪些字段,字段之间用 , 隔开
#显示的字段为:NAME , AUTOCONNECT
关闭自动连接功能
nmcli connection modify eth0 connection.autoconnect no
#修改网络连接:nmcli connection modify
#设备上网络连接的名字:eth0 (写自己设备的网络连接名称)
#关闭自动连接:connection.autoconnect no
#开启自动连接:connection.autoconnect yes
删除网络连接
nmcli connection delete eth0
六、linux可以添加多个网关,metric值越小,优先级越高,同一时间,只能有一个网关,当metric 更小的网关不可达时,系统会自动切换使用 metric 更大的备用网关。
sql
查看网关默认网关
ip route show default
添加默认网关
ip route add default via 192.168.99.5
删除默认网关
ip route del default via 192.168.99.5
七、如何临时禁用或启用某张网卡,网卡名为通过ip address show 查看
bash
临时禁用网卡
ip link set eth0 down
临时开启网卡
ip link set eth0 up
#禁用和启用写的是网络设备(物理网卡)的名称:eth0
#该命令属于临时禁用和启用,重启系统将自动恢复原状态。
验证网卡状态是开启还是关闭
ip a s eth1
#有UP状态为开启:eth1: <BROADCAST,MULTICAST,UP,LOWER_UP>
#无UP状态为关闭:eth1: <BROADCAST,MULTICAST>
八、如何永久禁用网络连接,使其开机不会自动生效
yaml
永久禁用网络连接
nmcli connection modify eth0 connection.autoconnect no
永久启用网络连接
nmcli connection modify eth0 connection.autoconnect yes
#注意这个禁用与上一个不同,可以理解"七"禁用的是物理网卡,此处禁用的是网络连接
#禁用和启用写的是网络连接的名称:eth0
#该命令属于永久禁用和启用,重启系统将不再启动或自动启动。
#ip address show 看不到ip地址
#ip address show 看到的仍然是 <BROADCAST,MULTICAST,UP,LOWER_UP>
九、我们把ip配置在网络连接上,网络连接又绑定着物理网卡,如果物理网卡故障,则网络连接失效,那么ip地址将无法正常通信。可以通过Bonding / Team 将多个物理网卡绑定到同一个聚合网络连接中。当一个物理网卡故障时,聚合连接会自动切换到另一块健康的网卡上,IP 不变,网络不中断,业务正常运行。Team在红帽8之后开始弃用。
bash
创建一个聚合网络连接
nmcli connection add type bond ifname bond0 \
con-name bond0 bond.options "mode=active-backup,miimon=100"
#新建一条网络连接:nmcli connection add
#连接类型为 bond 链路聚合:type bond
#生成的虚拟聚合网卡设备名叫 bond0:ifname bond0
#这条连接配置名称也叫 bond0:con-name bond0
#bond 模式为主备模式(一块网卡工作,另一块做备份): mode=active-backup
#每0.1秒检查一次网卡线路是否故障:miimon=100
#注意:虚拟聚合网卡的名称建议与连接配置名称一致,方便管理。
#除了主备模式之外还有其他模式,最常用的就是主备模式和LACP 动态聚合模式。
查看生成的聚合网络连接
nmcli connection show
十、往前面创建的聚合链路中添加成员
python
创建第一个从属成员,并隐式生成 bond0 聚合设备
nmcli connection add type ethernet slave-type bond \
con-name bond0-port1 ifname eth1 master bond0
#新建一条网络连接配置:nmcli connection add
#类型为普通物理以太网网卡:type ethernet
#该网卡作为 bond 的成员端口:slave-type bond
#为这条从属连接命名:con-name bond0-port1
#物理网卡设备名是:eth1
#归属到主聚合设备 bond0:master bond0
往虚拟聚合网卡中添加第二位成员
nmcli connection add type ethernet slave-type bond \
con-name bond0-port2 ifname eth2 master bond0
#注意:物理网卡要求没有绑定其他网络连接,如果物理网卡绑定了网络连接,先查看该网络连接是否正在使用,无用则删除,有用则迁移后再绑定。
#实际工作中建议网络连接不要开启自动绑定,不要生成多条无用连接,建议通过添加新的物理网卡来完成聚合连接。
#聚合连接最少往里面添加两位成员,两条从属连接命名与物理网卡名称必须不同。
十一、成员添加完成之后,我们还需要给聚合连接添加ip地址,激活,验证结果
bash
为虚拟聚合网卡bond0添加ip地址
nmcli connection modify bond0 ipv4.method manual \
ipv4.addresses 192.168.88.10/24 \
ipv4.gateway 192.168.88.1 autoconnect yes
#这步操作与"三"一样。
激活所有连接:
nmcli connection up bond0-port1
nmcli connection up bond0-port
nmcli connection up bond0
验证是否成功
ip address show bond0
cat /proc/net/bonding/bond0
#出现ip地址即成功:ip address show bond0
#查看详细信息,文件名为自己网络连接的名称:cat /proc/net/bonding/bond0
#注意:添加的网段必须与其他网卡的网段不同,同一台 Linux 服务器上,不同的网卡最好不要配相同的网段,这是网络设计的大忌,极易导致路由紊乱。*
十二、详解cat /proc/net/bonding/bond0看到的信息:
yaml
Ethernet Channel Bonding Driver: v5.14.0-503.14.1.el9_5.x86_64
#Bond内核版本
Bonding Mode: fault-tolerance (active-backup) #主备模式
Primary Slave: None #没有手动指定主网卡
Currently Active Slave: eth3 #目前主是eth3,正在工作的
MII Status: up #链路状态正常
MII Polling Interval (ms): 100 #每隔0.1秒进行一次检测
Up Delay (ms): 0 #链路恢复无延时
Down Delay (ms): 0 #故障秒断开,无延时
Peer Notification Delay (ms): 0
Slave Interface: eth2 #bond的成员网卡,名字叫eth2
MII Status: up #目前网络正常,down是异常
Speed: 1000 Mbps #当前效率千兆(1000兆)
Duplex: full #全双工
Link Failure Count: 1 #历史断开过一次,我进行的测试
Permanent HW addr: 52:54:00:92:3b:6f
Slave queue ID: 0
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:b4:1b:54
Slave queue ID: 0
十三、对聚合链路进行测试:
bash
停掉eth3
ip link set eth3 down
查看文件信息
cat /proc/net/bonding/bond0
#显示谁在工作:Currently Active Slave: eth2
#eth3显示的结果:MII Status: down
结语: 以上就是我对 Linux 网络管理核心模块的整理,涵盖了从基础概念到聚合链路的大部分常用场景。为了方便阅读,部分专业术语我做了简化处理。需要说明的是,这份笔记更侧重实用性和理解成本,不完全等同于官方文档的严谨表述。实际生产环境中操作,建议结合 man nmcli 或 RHEL 官方文档做最终确认。
如有错误或遗漏,欢迎指正交流。