从一键脚本到原理详解,让你轻松搞定 CentOS Stream 10 的静态 IP 配置
适用场景
- 操作系统:CentOS Stream 10
- 网卡名称:ens160
- 目标IP:192.168.6.102
- 网关:192.168.6.2(VMware NAT模式典型配置)
重要提示
在开始配置前,请务必确认你的网络环境:
bash
# 查看当前网络配置,确认网关地址
ip route show
VMware 网络模式对应网关:
- NAT模式:网关通常是
*.2(如 192.168.6.2) - 桥接模式:网关通常是
*.1(如 192.168.6.1)
一、一键配置脚本
直接以 root 权限执行以下脚本即可完成配置:
bash
#!/bin/bash
# CentOS Stream 10 网卡 ens160 一键配置静态 IP 脚本
# 目标 IP: 192.168.6.102
# 定义配置参数(请根据你的实际环境修改)
INTERFACE="ens160"
IP_ADDR="192.168.6.102/24" # IP地址 + 子网掩码(CIDR格式)
GATEWAY="192.168.6.2" # 网关地址(请确认你的实际网关)
DNS1="114.114.114.114"
DNS2="8.8.8.8"
# 检查目标 IP 是否已被占用
echo "🔍 检查 IP ${IP_ADDR%/24} 是否可用..."
if ping -c 1 -W 1 ${IP_ADDR%/24} > /dev/null 2>&1; then
echo "❌ 错误:IP ${IP_ADDR%/24} 已被占用!"
echo "请修改脚本中的 IP_ADDR 为一个未使用的 IP 地址。"
exit 1
else
echo "✅ IP ${IP_ADDR%/24} 可用"
fi
# 配置静态 IP
echo "⚙️ 开始配置静态 IP..."
sudo nmcli connection modify "$INTERFACE" ipv4.addresses "$IP_ADDR"
sudo nmcli connection modify "$INTERFACE" ipv4.gateway "$GATEWAY"
sudo nmcli connection modify "$INTERFACE" ipv4.dns "$DNS1 $DNS2"
sudo nmcli connection modify "$INTERFACE" ipv4.method manual
sudo nmcli connection modify "$INTERFACE" connection.autoconnect yes
# 重载并激活配置
sudo nmcli connection reload
sudo nmcli connection down "$INTERFACE" && sudo nmcli connection up "$INTERFACE"
echo "✅ 静态 IP 配置完成!"
echo "📋 当前网络信息:"
ip addr show "$INTERFACE" | grep inet
echo ""
echo "🌐 路由信息:"
ip route show | grep default
echo ""
echo "📡 DNS 信息:"
nmcli device show "$INTERFACE" | grep DNS
⚠️ 注意事项:
- 执行前请确认网关地址
GATEWAY与你的实际环境一致 - 如果目标 IP
192.168.6.102被占用,请更换为其他未被使用的 IP - 配置完成后 SSH 连接会短暂断开,需要用新 IP 重新连接
二、逐步详细讲解
第一步:确认网卡名称和当前网络配置
bash
# 查看所有网络设备
ip addr show
# 或使用
nmcli device status
确认网卡名称确实是 ens160,同时查看当前 IP 地址和网关信息。
第二步:了解 CentOS Stream 10 的网络配置方式
CentOS Stream 10 全面采用 NetworkManager 作为网络管理工具,配置文件位置:
- 旧方式(CentOS 7) :
/etc/sysconfig/network-scripts/ifcfg-* - 新方式(CentOS Stream 10) :
/etc/NetworkManager/system-connections/*.nmconnection
推荐使用 nmcli 命令行工具进行配置,避免手动编辑配置文件带来的格式错误。
第三步:使用 nmcli 配置静态 IP
以下每条命令的含义详解:
1. 设置 IP 地址和子网掩码
bash
nmcli connection modify ens160 ipv4.addresses 192.168.6.102/24
connection modify:修改现有连接配置ens160:连接名称(通常与网卡名称一致)ipv4.addresses:指定 IPv4 地址,/24表示子网掩码255.255.255.0
2. 设置网关地址
bash
nmcli connection modify ens160 ipv4.gateway 192.168.6.2
关键点 :在 VMware NAT 模式下,网关通常是 *.2。请先用 ip route show 确认你的实际网关。
3. 设置 DNS 服务器
bash
nmcli connection modify ens160 ipv4.dns "114.114.114.114 8.8.8.8"
多个 DNS 之间用空格分隔。这里配置了国内常用的 114DNS 和 Google 公共 DNS。
4. 设置为手动(静态)模式
bash
nmcli connection modify ens160 ipv4.method manual
manual:手动配置(静态 IP)auto:自动获取(DHCP)
⚠️ 重要顺序 :建议先设置 ipv4.addresses,再设置 ipv4.method manual,避免报错。
5. 设置开机自动连接
bash
nmcli connection modify ens160 connection.autoconnect yes
确保系统重启后网卡自动启用并应用静态 IP 配置。
第四步:重载并激活配置
bash
# 重载配置,将修改写入磁盘
nmcli connection reload
# 重启网卡连接,应用新配置(注意:SSH 会短暂断开)
nmcli connection down ens160 && nmcli connection up ens160
第五步:验证配置结果
bash
# 查看 IP 地址
ip addr show ens160 | grep inet
# 查看连接配置详情
nmcli connection show ens160 | grep -E "ipv4.method|ipv4.addresses|ipv4.gateway|ipv4.dns"
# 测试网关连通性
ping -c 3 192.168.6.2
# 测试外网连通性
ping -c 3 8.8.8.8
# 测试 DNS 解析
ping -c 3 www.baidu.com
如果 ipv4.method 显示为 manual,说明静态 IP 配置成功。
三、配置文件详解
配置文件存储位置
执行 nmcli 命令后,配置被写入以下文件:
bash
/etc/NetworkManager/system-connections/ens160.nmconnection
配置文件内容示例
ini
[connection]
id=ens160
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
type=ethernet
interface-name=ens160
autoconnect=true
[ipv4]
method=manual
address1=192.168.6.102/24,192.168.6.2
dns=114.114.114.114;8.8.8.8
[ipv6]
method=auto
手动编辑配置文件
你也可以直接编辑此文件,编辑后执行:
bash
nmcli connection reload
四、常见问题排查
Q1:配置后 IP 没变化,还是 DHCP 获取的地址?
原因及解决方案:
-
未执行重载和重启命令
bashnmcli connection reload nmcli connection down ens160 && nmcli connection up ens160 -
存在冲突的连接配置
bash# 查看所有连接 nmcli connection show # 删除不必要的连接 nmcli connection delete "连接名称" -
cloud-init 服务干扰(云服务器环境)
bashsudo systemctl disable --now cloud-init
Q2:配置静态 IP 后无法 ping 通外网?
排查步骤:
-
检查网关配置是否正确
baship route show | grep default -
检查 DNS 配置
bashcat /etc/resolv.conf nmcli device show ens160 | grep DNS -
检查物理网络或虚拟机网络模式
- VMware NAT 模式:确保虚拟机网络适配器设置为 NAT
- 桥接模式:确保网关地址正确
Q3:网卡名称不是 ens160 怎么办?
bash
# 查看实际网卡名称
ip addr show
# 或
nmcli device status
将脚本和命令中的 ens160 替换为实际名称即可。
Q4:配置后无法 SSH 连接?
情况分析:
- 配置过程中网络会短暂断开,SSH 连接会中断
- 需要用新 IP
192.168.6.102重新连接
紧急恢复方法(通过控制台):
bash
# 恢复到 DHCP
nmcli connection modify ens160 ipv4.method auto
nmcli connection down ens160 && nmcli connection up ens160
五、高级技巧
1. 单条命令完整配置
将所有配置合并为一条命令:
bash
nmcli connection modify ens160 \
ipv4.addresses 192.168.6.102/24 \
ipv4.gateway 192.168.6.2 \
ipv4.dns "114.114.114.114 8.8.8.8" \
ipv4.method manual \
connection.autoconnect yes
2. 查看配置变更历史
bash
# 查看 NetworkManager 日志
sudo journalctl -u NetworkManager -f
3. 备份和恢复配置
bash
# 备份配置
sudo cp /etc/NetworkManager/system-connections/ens160.nmconnection \
/etc/NetworkManager/system-connections/ens160.nmconnection.bak
# 恢复配置
sudo cp /etc/NetworkManager/system-connections/ens160.nmconnection.bak \
/etc/NetworkManager/system-connections/ens160.nmconnection
sudo nmcli connection reload
sudo nmcli connection down ens160 && sudo nmcli connection up ens160
六、总结
核心要点
✅ CentOS Stream 10 推荐使用 nmcli + NetworkManager 管理网络
✅ 配置文件存放在 /etc/NetworkManager/system-connections/
✅ 修改后务必执行 nmcli connection reload 和 nmcli connection up
✅ 用 ip route show 确认网关地址,VMware NAT 模式网关通常是 *.2
✅ 用 nmcli connection show ens160 | grep ipv4.method 确认是否为 manual 模式
快速命令速查
bash
# 查看网络状态
ip addr show
nmcli device status
# 配置静态 IP
nmcli connection modify ens160 ipv4.addresses 192.168.6.102/24
nmcli connection modify ens160 ipv4.gateway 192.168.6.2
nmcli connection modify ens160 ipv4.dns "114.114.114.114 8.8.8.8"
nmcli connection modify ens160 ipv4.method manual
nmcli connection modify ens160 connection.autoconnect yes
# 应用配置
nmcli connection reload
nmcli connection down ens160 && nmcli connection up ens160
# 验证配置
nmcli connection show ens160 | grep -E "ipv4.method|ipv4.addresses|ipv4.gateway|ipv4.dns"
ip addr show ens160 | grep inet
ping -c 3 192.168.6.2
ping -c 3 8.8.8.8
📌 温馨提示 :如果你是通过 SSH 远程配置,请确保在执行 nmcli connection up 后,用新 IP 地址重新连接。建议在配置前先打开另一个 SSH 会话或保持控制台访问,以防配置失败导致无法连接。
本文基于 CentOS Stream 10 实际环境验证,配置方法适用于 RHEL 10 及后续版本。如有问题,欢迎在评论区交流讨论。