nmcli 命令和手动修改网卡配置文件详细讲解(最后附带配置脚本参考学习)

🚀 第一部分: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 类型调整

关键记忆点

  1. nmcli 核心流程查询(device/connection show)→ 修改(modify)→ 生效(up)→ 验证(ip route/ping)
  2. 配置文件核心参数ONBOOT=yes(必设)、BOOTPROTO(static/dhcp)、IPADDR/GATEWAY/DNS1(静态IP必填)
  3. 排错核心步骤查日志(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

📝 脚本使用方法

  1. 保存脚本 :将上述脚本复制到 Linux 系统中,命名为network-config.sh(如静态 IP 脚本命名为static-ip-config.sh

  2. 修改参数 :用vim打开脚本,仅修改开头「自定义参数」部分的网卡名、IP、网关等信息

  3. 赋予执行权限

    复制代码
    chmod +x network-config.sh
  4. 执行脚本

    复制代码
    ./network-config.sh

⚠️ 注意事项

  1. 执行脚本前建议先执行ip addr确认网卡名,避免改错配置文件

  2. 脚本会自动备份原有配置文件(后缀带时间戳),若配置出错可恢复:

    复制代码
    cp /etc/sysconfig/network-scripts/ifcfg-ens33.bak.20260120100000 /etc/sysconfig/network-scripts/ifcfg-ens33
  3. 若执行后网络不通,检查 IP、网关、DNS 是否与局域网匹配(如网关是否为路由器 IP)

  4. CentOS 8/9 建议优先使用 nmcli 脚本,避免传统network服务冲突

总结

  1. 手动改配置文件脚本适合服务器长期固定 IP场景,修改后需重启服务生效,配置持久化;
  2. nmcli 脚本适合动态调整 IP场景,修改后立即生效,且自动同步到配置文件;
  3. 所有脚本均包含「配置 + 生效 + 验证」全流程,只需替换自定义参数即可复用,无需记忆复杂命令。
相关推荐
北京盟通科技官方账号2 小时前
Docker 容器化部署 EtherNet/IP 协议栈(ESDK):Windows 与国产银河麒麟 V10 实测对比
网络·网络协议·tcp/ip·docker·国产系统·ethernet/ip·工业协议
slongzhang_2 小时前
从0配置Apache+PHP+SSL开发环境
php·apache·ssl
Tipriest_2 小时前
排查一个多网卡的机器上不了网的问题(更改默认路由)
网络·网关·路由·多网卡
2401_873587822 小时前
Linux——网络编程套接字
linux·服务器·网络
德迅云安全—珍珍2 小时前
什么是 DNS 缓存投毒攻击,有什么防护措施
网络·缓存
catchadmin2 小时前
PHP 应用性能分析 从假设到数据与修复优先级
php
乾元2 小时前
兵器谱——深度学习、强化学习与 NLP 在安全中的典型应用场景
运维·网络·人工智能·深度学习·安全·自然语言处理·自动化
举手2 小时前
UDP Echo Server(学习版)
linux·服务器·网络·网络协议·学习·udp
上海云盾安全满满2 小时前
网络安全威胁是什么,类型有哪些
网络·安全·web安全