🚀 第一部分:nmcli 命令全详解
nmcli 是 NetworkManager 的核心命令行工具,以下所有命令都附带详细注释,包含「命令作用 + 参数解释 + 使用场景」。
🔍 一、基础信息查询命令(排错 / 确认环境首选)
# 1. 查看nmcli整体帮助(列出所有核心子命令:general/networking/radio/connection/device)
# 场景:忘记nmcli子命令时快速查阅
nmcli
# 2. 查看指定子命令的完整帮助(如connection子命令)
# 参数解释:--help 后跟子命令,查看该子命令的所有可用参数
# 场景:想知道connection子命令支持哪些操作(add/modify/delete等)
nmcli --help connection
# 3. 查看所有网卡设备状态(核心查询命令)
# 输出列解释:
# DEVICE:网卡物理名称(如ens33)
# TYPE:设备类型(ethernet/bridge/bond等)
# STATE:设备状态(connected/disconnected/unavailable)
# CONNECTION:绑定的连接名(对应ifcfg-*文件)
# 场景:快速确认网卡是否激活、绑定的连接名
nmcli device status
# 4. 查看指定网卡的详细硬件/配置信息(排错核心命令)
# 参数解释:show 后跟网卡名,输出包含MAC地址、MTU、IP、网关、DNS等所有信息
# 场景:网卡配置不生效时,确认硬件是否识别、配置是否正确加载
nmcli device show ens33
# 5. 查看所有网络连接(对应/etc/sysconfig/network-scripts/ifcfg-*文件)
# 输出列解释:
# NAME:连接名(和ifcfg-*文件名一致)
# UUID:连接唯一标识(系统自动生成)
# TYPE:连接类型(ethernet)
# DEVICE:绑定的网卡名
# 场景:确认系统中有哪些网络配置(一个网卡可绑定多个连接)
nmcli connection show
# 6. 查看指定连接的完整配置参数(最详细的配置查询)
# 参数解释:show 后跟连接名,输出所有可配置参数(ipv4/ipv6/ethernet等)
# 场景:确认连接的IP、网关、DNS、MTU等是否配置正确
nmcli connection show ens33
# 7. 仅查看当前活跃的连接(过滤无效配置)
# 场景:快速确认哪些连接正在使用
nmcli connection show --active
# 8. 查看NetworkManager整体状态(服务是否运行、主机名等)
# 输出列解释:
# STATE:NetworkManager状态(connected/disconnected)
# CONNECTIVITY:网络连通性(full/limited/none)
# WIFI-HW:无线硬件是否启用
# 场景:确认NetworkManager服务是否正常运行
nmcli general status
# 9. 查看/修改系统主机名(NetworkManager托管)
# 用法1:查看当前主机名
nmcli general hostname
# 用法2:修改主机名(立即生效,无需重启)
# 参数解释:new-hostname 是你要设置的主机名
# 场景:快速修改主机名,比/etc/hostname更兼容NetworkManager
nmcli general hostname new-server-01
🔧 二、连接管理核心命令(配置 IP 的核心操作)
1. 创建新连接(从无到有配置 IP)
# ========== 示例1:创建静态IP以太网连接 ==========
# 命令拆解:
# connection add:创建新连接
# type ethernet:连接类型为以太网(有线网卡)
# con-name ens33-static:连接名(自定义,建议和网卡名关联)
# ifname ens33:绑定的网卡名(必须和物理网卡一致)
# ipv4.addresses 192.168.1.100/24:静态IP+子网掩码(/24=255.255.255.0)
# ipv4.gateway 192.168.1.1:默认网关(路由器/交换机IP)
# ipv4.dns "8.8.8.8,114.114.114.114":DNS服务器(多个用逗号分隔)
# ipv4.method manual:IP获取方式为手动(静态)
# connection.autoconnect yes:开机自动激活此连接
# 场景:给网卡创建全新的静态IP配置(不会覆盖原有连接)
nmcli connection add \
type ethernet \
con-name ens33-static \
ifname ens33 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8,114.114.114.114" \
ipv4.method manual \
connection.autoconnect yes
# ========== 示例2:创建DHCP自动获取连接 ==========
# 命令拆解:
# ipv4.method auto:IP获取方式为自动(DHCP)
# 场景:给网卡创建DHCP配置(适合办公网/自动分配IP的环境)
nmcli connection add \
type ethernet \
con-name ens33-dhcp \
ifname ens33 \
ipv4.method auto
# ========== 示例3:创建VLAN子接口连接(VLAN ID 10) ==========
# 命令拆解:
# type vlan:连接类型为VLAN
# ifname ens33.10:VLAN接口名(格式:物理网卡名.VLAN ID)
# dev ens33:绑定的物理网卡
# id 10:VLAN ID(必须和交换机配置一致)
# 场景:服务器需要接入VLAN网络(如业务网/管理网隔离)
nmcli connection add \
type vlan \
con-name ens33.10 \
ifname ens33.10 \
dev ens33 \
id 10 \
ipv4.addresses 192.168.10.100/24 \
ipv4.method manual
# ========== 示例4:创建Bond主备模式连接(ens33/ens34绑定) ==========
# 步骤1:创建bond0主连接(主备模式)
# 命令拆解:
# type bond:连接类型为Bond(网卡绑定)
# bond.options "mode=active-backup,miimon=100":Bond参数
# mode=active-backup:主备模式(一个网卡工作,另一个备用)
# miimon=100:每100ms检测一次链路状态
# 场景:服务器需要网卡冗余(避免单网卡故障断网)
nmcli connection add \
type bond \
con-name bond0 \
ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.addresses 192.168.4.100/24 \
ipv4.method manual
# 步骤2:将ens33加入bond0(作为从网卡)
# 命令拆解:
# master bond0:指定主设备为bond0
# slave yes:标记为从网卡
nmcli connection add \
type ethernet \
con-name bond0-slave1 \
ifname ens33 \
master bond0 \
slave yes
# 步骤3:将ens34加入bond0(作为备用从网卡)
nmcli connection add \
type ethernet \
con-name bond0-slave2 \
ifname ens34 \
master bond0 \
slave yes
2. 修改现有连接(调整已有的 IP 配置)
# ========== 示例1:修改静态IP(核心操作) ==========
# 命令拆解:
# connection modify:修改现有连接
# ipv4.addresses:覆盖原有IP(如果要追加,用+ipv4.addresses)
# 场景:服务器需要更换IP地址(立即生效,无需重启)
nmcli connection modify ens33 \
ipv4.addresses 192.168.1.101/24 \ # 新IP地址
ipv4.gateway 192.168.1.1 \ # 网关不变可省略
ipv4.dns "8.8.8.8" \ # 覆盖原有DNS
ipv4.method manual
# ========== 示例2:追加第二个IP(保留原有IP) ==========
# 命令拆解:
# +ipv4.addresses:追加IP(而非覆盖)
# 场景:单网卡需要绑定多个IP(如同时提供业务和管理IP)
nmcli connection modify ens33 +ipv4.addresses 192.168.1.102/24
# ========== 示例3:删除指定IP(保留其他IP) ==========
# 命令拆解:
# -ipv4.addresses:删除指定IP
# 场景:清理单网卡上的多余IP
nmcli connection modify ens33 -ipv4.addresses 192.168.1.102/24
# ========== 示例4:配置DNS搜索域(解析短域名) ==========
# 命令拆解:
# ipv4.dns-search "company.local,lab.local":DNS搜索域
# 场景:输入短域名(如server01)时,自动追加后缀(server01.company.local)
nmcli connection modify ens33 ipv4.dns-search "company.local,lab.local"
# ========== 示例5:设置默认路由(多网卡场景) ==========
# 命令拆解:
# ipv4.never-default no:允许此连接作为默认路由(默认no)
# ipv4.never-default yes:禁止此连接作为默认路由
# 场景:服务器有多个网卡(如内网+外网),指定外网网卡为默认路由
nmcli connection modify ens33 ipv4.never-default no
nmcli connection modify ens34 ipv4.never-default yes # 内网网卡禁止做默认路由
# ========== 示例6:修改MTU值(解决大报文传输问题) ==========
# 命令拆解:
# 802-3-ethernet.mtu 9000:设置MTU为9000(巨帧)
# 场景:服务器需要传输大文件(如数据库备份),提升传输效率
nmcli connection modify ens33 802-3-ethernet.mtu 9000
# ========== 示例7:修改连接开机自启状态 ==========
# 命令拆解:
# connection.autoconnect yes/no:开机是否自动激活
# 场景:测试用连接不需要开机自启(避免占用IP)
nmcli connection modify ens33 connection.autoconnect no
3. 连接启停与删除(生效 / 清理配置)
# ========== 示例1:激活连接(配置立即生效) ==========
# 场景:修改配置后,让新配置生效(无需重启系统/服务)
nmcli connection up ens33
# ========== 示例2:断开连接(临时断网) ==========
# 场景:临时禁用某个连接(如测试故障转移)
nmcli connection down ens33
# ========== 示例3:删除无用连接(清理配置文件) ==========
# 场景:删除测试用的DHCP连接(同时删除对应的ifcfg-*文件)
nmcli connection delete ens33-dhcp
# ========== 示例4:重新加载所有连接(手动改配置文件后) ==========
# 场景:手动修改ifcfg-*文件后,让NetworkManager加载新配置
nmcli connection reload
🛠️ 三、设备管理命令(硬件层面操作)
# ========== 示例1:激活物理网卡(设备层面) ==========
# 区别:connection up是激活配置,device up是激活硬件
# 场景:网卡被禁用(STATE=disconnected),先激活硬件
nmcli device up ens33
# ========== 示例2:禁用物理网卡(设备层面) ==========
# 场景:临时禁用网卡(所有绑定的连接都会断开)
nmcli device down ens33
# ========== 示例3:重置网卡设备(解决异常状态) ==========
# 场景:网卡配置不生效(如IP显示错误),重置设备后重新加载配置
nmcli device reapply ens33
# ========== 示例4:释放DHCP地址(仅DHCP连接有效) ==========
# 场景:DHCP获取的IP有问题,释放后重新获取
nmcli device disconnect ens33
📝 四、IPv6 配置命令
# ========== 示例1:配置静态IPv6 ==========
# 命令拆解:
# ipv6.method manual:静态IPv6
# ipv6.addresses 2001:db8::1/64:IPv6地址+前缀(/64是IPv6常用前缀)
# ipv6.gateway 2001:db8::254:IPv6网关
# 场景:服务器需要启用IPv6(如访问IPv6外网)
nmcli connection modify ens33 \
ipv6.method manual \
ipv6.addresses 2001:db8::1/64 \
ipv6.gateway 2001:db8::254 \
ipv6.dns "2001:4860:4860::8888" # Google IPv6 DNS
# ========== 示例2:自动获取IPv6(SLAAC/DHCPv6) ==========
# 场景:网络支持IPv6自动分配(如运营商网络)
nmcli connection modify ens33 ipv6.method auto
# ========== 示例3:禁用IPv6(解决兼容性问题) ==========
# 场景:应用不支持IPv6,禁用后避免解析异常
nmcli connection modify ens33 ipv6.method ignore
🚨 五、nmcli 排错命令
# ========== 示例1:实时监控NetworkManager日志 ==========
# 命令拆解:
# journalctl -u NetworkManager -f:实时跟踪日志(-f=follow)
# 场景:配置不生效时,查看实时错误信息(如IP冲突、网关不可达)
journalctl -u NetworkManager -f
# ========== 示例2:检查连接配置错误 ==========
# 场景:快速过滤连接配置中的错误信息
nmcli connection show ens33 | grep -E "ERROR|failed"
# ========== 示例3:验证DNS配置是否生效 ==========
# 注意:NetworkManager会自动生成/etc/resolv.conf,无需手动改
nmcli connection show ens33 | grep ipv4.dns # 查看配置的DNS
cat /etc/resolv.conf # 查看实际生效的DNS
# ========== 示例4:检查路由表(确认网关是否生效) ==========
# 输出解释:
# default via 192.168.1.1 dev ens33:默认路由(指向网关)
# 192.168.1.0/24 dev ens33 proto kernel scope link:内网路由
# 场景:确认默认网关是否正确添加
ip route show
📝 第二部分:手动修改配置文件
配置文件路径:/etc/sysconfig/network-scripts/ifcfg-<网卡名>,以下所有模板都逐行加注释,解释每个参数的「作用 + 取值 + 注意事项」。
🎯 模板 1:基础静态 IP 配置(最常用)
# 网卡类型:Ethernet(以太网)、Vlan(VLAN)、Bond(绑定)
TYPE=Ethernet
# IP获取方式:static(静态)、dhcp(自动)、none(手动,需写IP)
# 注意:static和none效果一致,推荐用static
BOOTPROTO=static
# 开机是否自动激活此连接:yes(推荐)、no(手动激活)
# 注意:设为no时,开机后网卡不会自动获取IP
ONBOOT=yes
# 静态IP地址(BOOTPROTO=static时必填)
# 注意:必须和网关在同一网段(如192.168.1.0/24)
IPADDR=192.168.1.100
# 子网掩码前缀长度(推荐用PREFIX,代替NETMASK)
# 取值:24=255.255.255.0,16=255.255.0.0,8=255.0.0.0
PREFIX=24
# 旧版子网掩码参数(兼容用,和PREFIX二选一)
# NETMASK=255.255.255.0
# 默认网关(路由器/交换机IP,必填否则无法访问外网)
# 注意:网关必须和IP在同一网段
GATEWAY=192.168.1.1
# 主DNS服务器(必填,否则无法解析域名)
DNS1=8.8.8.8
# 备用DNS服务器(可选,主DNS故障时使用)
DNS2=114.114.114.114
# DNS搜索域(解析短域名时自动追加后缀)
# 示例:输入server01,自动解析为server01.company.local
DNS_SEARCH=company.local
# 连接名称(需与DEVICE一致,否则可能识别失败)
NAME=ens33
# 网卡设备名(必须和物理网卡名一致,如ens33、eth0)
# 注意:通过ip addr查看实际网卡名,不能写错
DEVICE=ens33
# 连接标识(可选,与NAME一致即可)
CONNECTION=ens33
# 静态IP时,禁止DHCP自动覆盖/etc/resolv.conf(推荐设为no)
# 注意:DHCP配置时设为yes
PEERDNS=no
# 最大传输单元(MTU):默认1500,大文件传输设为9000(巨帧)
# 注意:需和交换机MTU一致,否则会丢包
MTU=1500
# 普通用户是否可控制此连接:no(推荐,避免误操作)
USERCTL=no
🎯 模板 2:DHCP 自动获取配置
TYPE=Ethernet
# IP获取方式:dhcp(自动从DHCP服务器获取IP)
BOOTPROTO=dhcp
# 开机自动激活
ONBOOT=yes
# 连接名和设备名一致
NAME=ens33
DEVICE=ens33
# 允许DHCP自动更新/etc/resolv.conf(DHCP配置必填yes)
PEERDNS=yes
# 普通用户不可控制
USERCTL=no
🎯 模板 3:单网卡多 IP 配置
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
# 第一个IP(主IP)
IPADDR=192.168.1.100
PREFIX=24
# 第二个IP(追加IP,后缀加1)
IPADDR1=192.168.1.101
PREFIX1=24
# 第三个IP(可选)
IPADDR2=192.168.1.102
PREFIX2=24
# 网关(所有IP共用一个网关)
GATEWAY=192.168.1.1
DNS1=8.8.8.8
NAME=ens33
DEVICE=ens33
PEERDNS=no
🎯 模板 4:VLAN 子接口配置(VLAN ID 10)
# 网卡类型:Vlan(必须大写V)
TYPE=Vlan
BOOTPROTO=static
ONBOOT=yes
# VLAN接口IP(需和VLAN ID对应网段)
IPADDR=192.168.10.100
PREFIX=24
GATEWAY=192.168.10.1
DNS1=8.8.8.8
# VLAN接口名(格式:物理网卡名.VLAN ID)
NAME=ens33.10
DEVICE=ens33.10
# 父物理网卡名(必须和实际网卡一致)
PHYSDEV=ens33
# VLAN ID(必须和交换机配置一致)
VLAN_ID=10
# 父接口激活时,自动激活此VLAN接口(推荐yes)
ONPARENT=yes
PEERDNS=no
🎯 模板 5:Bond 主备模式配置
# ========== bond0主配置文件(ifcfg-bond0) ==========
TYPE=Bond
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.4.100
PREFIX=24
GATEWAY=192.168.4.1
DNS1=8.8.8.8
NAME=bond0
DEVICE=bond0
# Bond参数:
# mode=active-backup:主备模式(一个工作,一个备用)
# miimon=100:每100ms检测一次链路状态
# primary=ens33:指定ens33为主网卡(可选)
BONDING_OPTS="mode=active-backup miimon=100 primary=ens33"
PEERDNS=no
# ========== 从网卡ens33配置文件(ifcfg-ens33) ==========
TYPE=Ethernet
# 从网卡无需IP,设为none
BOOTPROTO=none
ONBOOT=yes
NAME=bond0-slave1
DEVICE=ens33
# 指定主设备为bond0
MASTER=bond0
# 标记为从网卡
SLAVE=yes
USERCTL=no
# ========== 从网卡ens34配置文件(ifcfg-ens34) ==========
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
NAME=bond0-slave2
DEVICE=ens34
MASTER=bond0
SLAVE=yes
USERCTL=no
🔄 重启网卡服务的命令
# ========== CentOS 7 传统方式(依赖network服务) ==========
# 场景:CentOS 7系统,手动改配置文件后生效
# 注意:CentOS 8/9不推荐用,可能和NetworkManager冲突
systemctl restart network
# ========== CentOS 8/9 推荐方式(NetworkManager) ==========
# 步骤1:重新加载所有配置文件(手动改ifcfg-*后必须执行)
nmcli connection reload
# 步骤2:激活连接(让新配置生效)
nmcli connection up ens33
# ========== 强制重启网卡(解决异常状态) ==========
# 场景:配置不生效,先禁用再启用网卡
nmcli device down ens33 && nmcli device up ens33
# ========== 旧版系统(CentOS 6) ==========
# 场景:CentOS 6及更早版本
service network restart
🚨 手动配置排错命令
# ========== 检查配置文件语法(最常见错误:多余空格) ==========
# 场景:配置文件写错(如ONBOOT = yes,多余空格),用cat查看格式
cat /etc/sysconfig/network-scripts/ifcfg-ens33
# ========== 查看network服务日志(CentOS 7) ==========
# 场景:重启network服务失败,查看错误原因
journalctl -u network -f
# ========== 查看NetworkManager日志(CentOS 8/9) ==========
journalctl -u NetworkManager -f
# ========== 验证路由表(确认网关是否生效) ==========
ip route show
# ========== 测试连通性(分步排查) ==========
ping 192.168.1.1 # 第一步:ping网关(内网连通性)
ping 8.8.8.8 # 第二步:ping外网IP(路由是否生效)
ping www.baidu.com # 第三步:ping域名(DNS是否生效)
📊 核心总结(带注释的速记要点)
| 配置方式 | 核心优势 | 适用场景 | 关键注意事项 |
|---|---|---|---|
| nmcli 命令 | 1. 立即生效,无需重启2. 自动持久化到配置文件3. 支持高级配置(VLAN/Bond) | 1. 动态调整 IP2. 测试配置3. 高级网络配置 | 1. 确保 NetworkManager 服务运行(systemctl start NetworkManager)2. 连接名和网卡名建议一致 |
| 手动改配置文件 | 1. 稳定,不受服务影响2. 可批量分发(Ansible)3. 适合固定 IP 场景 | 1. 服务器长期固定 IP2. 批量配置多台服务器 | 1. 配置文件参数不能有多余空格2. 修改后必须重启服务生效3. PEERDNS 参数需根据 IP 类型调整 |
关键记忆点
- nmcli 核心流程 :
查询(device/connection show)→ 修改(modify)→ 生效(up)→ 验证(ip route/ping) - 配置文件核心参数 :
ONBOOT=yes(必设)、BOOTPROTO(static/dhcp)、IPADDR/GATEWAY/DNS1(静态IP必填) - 排错核心步骤 :
查日志(journalctl)→ 查配置(nmcli show/cat)→ 查路由(ip route)→ 测连通性(ping)
📜 第一部分:手动修改配置文件脚本模板(持久化)
脚本说明
- 所有脚本只需修改开头的「自定义参数」部分,其余内容无需改动
- 脚本会自动备份原有配置文件,避免误操作导致配置丢失
- 适配 CentOS 7/8/9、RHEL 7/8/9 系统
模板 1:静态 IP 配置脚本(手动改文件)
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
NETWORK_CARD="ens33" # 你的网卡名(如ens33、eth0)
IP_ADDR="192.168.1.100" # 静态IP地址
SUBNET_MASK="24" # 子网掩码(24=255.255.255.0,16=255.255.0.0)
GATEWAY="192.168.1.1" # 网关地址
DNS1="8.8.8.8" # 主DNS
DNS2="114.114.114.114" # 备用DNS
# ==================================================================
# 配置文件路径
CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-${NETWORK_CARD}"
# 备份原有配置文件
cp ${CONFIG_FILE} ${CONFIG_FILE}.bak.$(date +%Y%m%d%H%M%S)
# 写入静态IP配置
cat > ${CONFIG_FILE} << EOF
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
IPADDR=${IP_ADDR}
PREFIX=${SUBNET_MASK}
GATEWAY=${GATEWAY}
DNS1=${DNS1}
DNS2=${DNS2}
NAME=${NETWORK_CARD}
DEVICE=${NETWORK_CARD}
CONNECTION=${NETWORK_CARD}
EOF
# 重启服务生效(兼容不同系统)
if [ -f "/usr/bin/nmcli" ]; then
nmcli connection reload
nmcli connection up ${NETWORK_CARD}
else
systemctl restart network
fi
# 验证配置
echo -e "\n===== 配置结果验证 ====="
ip addr show ${NETWORK_CARD} | grep inet
ping -c 2 ${GATEWAY} > /dev/null && echo "网关连通性:成功" || echo "网关连通性:失败"
ping -c 2 www.baidu.com > /dev/null && echo "外网连通性:成功" || echo "外网连通性:失败"
模板 2:DHCP 自动获取 IP 脚本(手动改文件)
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
NETWORK_CARD="ens33" # 你的网卡名(如ens33、eth0)
# ==================================================================
# 配置文件路径
CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-${NETWORK_CARD}"
# 备份原有配置文件
cp ${CONFIG_FILE} ${CONFIG_FILE}.bak.$(date +%Y%m%d%H%M%S)
# 写入DHCP配置
cat > ${CONFIG_FILE} << EOF
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes
NAME=${NETWORK_CARD}
DEVICE=${NETWORK_CARD}
CONNECTION=${NETWORK_CARD}
EOF
# 重启服务生效
if [ -f "/usr/bin/nmcli" ]; then
nmcli connection reload
nmcli connection up ${NETWORK_CARD}
else
systemctl restart network
fi
# 验证配置
echo -e "\n===== 配置结果验证 ====="
ip addr show ${NETWORK_CARD} | grep inet
ping -c 2 www.baidu.com > /dev/null && echo "外网连通性:成功" || echo "外网连通性:失败"
模板 3:单网卡多 IP 配置脚本(手动改文件)
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
NETWORK_CARD="ens33" # 你的网卡名
MAIN_IP="192.168.1.100" # 主IP
MAIN_MASK="24" # 主IP子网掩码
SECOND_IP="192.168.1.101" # 第二个IP
SECOND_MASK="24" # 第二个IP子网掩码
GATEWAY="192.168.1.1" # 网关
DNS1="8.8.8.8" # DNS
# ==================================================================
# 配置文件路径
CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-${NETWORK_CARD}"
# 备份原有配置文件
cp ${CONFIG_FILE} ${CONFIG_FILE}.bak.$(date +%Y%m%d%H%M%S)
# 写入多IP配置
cat > ${CONFIG_FILE} << EOF
TYPE=Ethernet
BOOTPROTO=static
ONBOOT=yes
IPADDR=${MAIN_IP}
PREFIX=${MAIN_MASK}
IPADDR1=${SECOND_IP}
PREFIX1=${SECOND_MASK}
GATEWAY=${GATEWAY}
DNS1=${DNS1}
NAME=${NETWORK_CARD}
DEVICE=${NETWORK_CARD}
CONNECTION=${NETWORK_CARD}
EOF
# 重启服务生效
if [ -f "/usr/bin/nmcli" ]; then
nmcli connection reload
nmcli connection up ${NETWORK_CARD}
else
systemctl restart network
fi
# 验证配置
echo -e "\n===== 配置结果验证 ====="
ip addr show ${NETWORK_CARD} | grep inet
🚀 第二部分:nmcli 动态配置脚本模板(立即生效)
模板 1:nmcli 设置静态 IP 脚本
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
CONNECTION_NAME="ens33" # 连接名(通常和网卡名一致)
NETWORK_CARD="ens33" # 网卡名
IP_ADDR="192.168.1.100/24" # 静态IP+子网掩码(如192.168.1.100/24)
GATEWAY="192.168.1.1" # 网关
DNS="8.8.8.8,114.114.114.114" # DNS(多个用逗号分隔)
# ==================================================================
# 修改连接配置(静态IP)
nmcli connection modify ${CONNECTION_NAME} \
ipv4.addresses ${IP_ADDR} \
ipv4.gateway ${GATEWAY} \
ipv4.dns "${DNS}" \
ipv4.method manual \
connection.autoconnect yes
# 激活连接立即生效
nmcli connection up ${CONNECTION_NAME}
# 验证配置
echo -e "\n===== 配置结果验证 ====="
nmcli connection show ${CONNECTION_NAME} | grep -E "ipv4.addresses|ipv4.gateway|ipv4.dns"
ip addr show ${NETWORK_CARD} | grep inet
ping -c 2 ${GATEWAY} > /dev/null && echo "网关连通性:成功" || echo "网关连通性:失败"
模板 2:nmcli 恢复 DHCP 脚本
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
CONNECTION_NAME="ens33" # 连接名
# ==================================================================
# 修改连接为DHCP自动获取
nmcli connection modify ${CONNECTION_NAME} \
ipv4.method auto \
connection.autoconnect yes
# 激活连接立即生效
nmcli connection up ${CONNECTION_NAME}
# 验证配置
echo -e "\n===== 配置结果验证 ====="
nmcli connection show ${CONNECTION_NAME} | grep ipv4.method
ip addr show ${CONNECTION_NAME} | grep inet
ping -c 2 www.baidu.com > /dev/null && echo "外网连通性:成功" || echo "外网连通性:失败"
模板 3:nmcli 配置多 IP 脚本
#!/bin/bash
# ====================== 自定义参数(只需改这里)======================
CONNECTION_NAME="ens33" # 连接名
IP_LIST="192.168.1.100/24,192.168.1.101/24" # 多个IP用逗号分隔
GATEWAY="192.168.1.1" # 网关
DNS="8.8.8.8" # DNS
# ==================================================================
# 修改连接配置(多IP)
nmcli connection modify ${CONNECTION_NAME} \
ipv4.addresses "${IP_LIST}" \
ipv4.gateway ${GATEWAY} \
ipv4.dns ${DNS} \
ipv4.method manual \
connection.autoconnect yes
# 激活连接立即生效
nmcli connection up ${CONNECTION_NAME}
# 验证配置
echo -e "\n===== 配置结果验证 ====="
ip addr show ${CONNECTION_NAME} | grep inet
📝 脚本使用方法
-
保存脚本 :将上述脚本复制到 Linux 系统中,命名为
network-config.sh(如静态 IP 脚本命名为static-ip-config.sh) -
修改参数 :用
vim打开脚本,仅修改开头「自定义参数」部分的网卡名、IP、网关等信息 -
赋予执行权限 :
chmod +x network-config.sh -
执行脚本 :
./network-config.sh
⚠️ 注意事项
-
执行脚本前建议先执行
ip addr确认网卡名,避免改错配置文件 -
脚本会自动备份原有配置文件(后缀带时间戳),若配置出错可恢复:
cp /etc/sysconfig/network-scripts/ifcfg-ens33.bak.20260120100000 /etc/sysconfig/network-scripts/ifcfg-ens33 -
若执行后网络不通,检查 IP、网关、DNS 是否与局域网匹配(如网关是否为路由器 IP)
-
CentOS 8/9 建议优先使用 nmcli 脚本,避免传统
network服务冲突
总结
- 手动改配置文件脚本适合服务器长期固定 IP场景,修改后需重启服务生效,配置持久化;
- nmcli 脚本适合动态调整 IP场景,修改后立即生效,且自动同步到配置文件;
- 所有脚本均包含「配置 + 生效 + 验证」全流程,只需替换自定义参数即可复用,无需记忆复杂命令。