CentOS 7/8 修改 IP 地址详细指南
一、CentOS 版本网络管理差异
# CentOS 网络管理工具演变
# --------------------------------------------------
# CentOS 6 及之前: network (/etc/sysconfig/network-scripts/)
# CentOS 7: network (默认) 或 NetworkManager
# CentOS 8: NetworkManager (默认,推荐)
# RHEL 8/CentOS 8: NetworkManager (必须)
二、CentOS 7 修改 IP 地址
方法1:使用传统 network 服务(推荐用于服务器)
步骤1:查看网卡信息
# 查看所有网卡
ip link show
# 或
ifconfig -a
# 或
nmcli device status
# 查看具体网卡名称
ls /sys/class/net/
# 常见网卡命名:
# - ens33, ens34: VMware 虚拟网卡
# - eth0, eth1: 传统命名
# - enp0s3, enp0s8: 物理服务器常见
步骤2:编辑网卡配置文件
# 网卡配置文件位置
/etc/sysconfig/network-scripts/ifcfg-<网卡名>
# 例如,编辑 ens33 网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 或
nano /etc/sysconfig/network-scripts/ifcfg-ens33
步骤3:配置文件示例
静态 IP 配置:
# /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # static/none: 静态IP, dhcp: 动态获取
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes" # 开机自动启用
# 以下是静态IP相关配置
IPADDR="192.168.1.100" # IP地址
NETMASK="255.255.255.0" # 子网掩码
# 或使用 PREFIX
PREFIX="24" # CIDR前缀,与NETMASK二选一
GATEWAY="192.168.1.1" # 网关
DNS1="8.8.8.8" # 主DNS
DNS2="8.8.4.4" # 备用DNS
DNS3="114.114.114.114" # 备用DNS
DOMAIN="example.com" # 域名
DHCP 自动获取配置:
# /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="dhcp" # 使用DHCP
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERROUTES="yes"
IPV6_PEERDNS="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
步骤4:重启网络服务
# 重启网络服务(推荐)
systemctl restart network
# 或只重启特定网卡
ifdown ens33 && ifup ens33
# 或使用 nmcli
nmcli connection reload
nmcli connection up ens33
步骤5:验证配置
# 查看IP地址
ip addr show ens33
# 或
ifconfig ens33
# 查看路由
ip route show
# 或
route -n
# 查看DNS
cat /etc/resolv.conf
# 测试网络
ping -c 4 8.8.8.8
ping -c 4 google.com
方法2:使用 NetworkManager(CentOS 7 可选)
使用 nmcli 命令行工具:
# 查看所有连接
nmcli connection show
# 或
nmcli c s
# 查看设备状态
nmcli device status
# 或
nmcli d s
# 修改为静态IP
nmcli connection modify ens33 \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual \
connection.autoconnect yes
# 修改为DHCP
nmcli connection modify ens33 ipv4.method auto
# 应用更改
nmcli connection up ens33
# 或
nmcli c up ens33
使用 nmtui 文本界面:
# 启动文本界面
nmtui
# 操作步骤:
# 1. 选择 "Edit a connection"
# 2. 选择要编辑的网卡
# 3. 编辑配置:
# - IPv4 CONFIGURATION: Manual
# - Addresses: 192.168.1.100/24
# - Gateway: 192.168.1.1
# - DNS servers: 8.8.8.8,8.8.4.4
# 4. 选择 OK
# 5. 返回主菜单,选择 "Activate a connection"
# 6. 停用再启用连接
三、CentOS 8 修改 IP 地址
CentOS 8 必须使用 NetworkManager
方法1:使用 nmcli(推荐)
# 1. 查看当前网络连接
nmcli connection show
# 输出类似:
# NAME UUID TYPE DEVICE
# ens33 a5eb6490-cc20-3668-81f8-bdb0d95b2f9e ethernet ens33
# 2. 查看具体连接的详细信息
nmcli connection show ens33
# 3. 修改为静态IP
sudo nmcli connection modify ens33 \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual \
connection.autoconnect yes
# 4. 重新激活连接
sudo nmcli connection up ens33
# 5. 验证
ip addr show ens33
方法2:创建新的连接配置
# 删除旧连接(可选)
sudo nmcli connection delete ens33
# 创建新连接
sudo 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 8.8.4.4" \
ipv4.method manual \
autoconnect yes
# 激活新连接
sudo nmcli connection up ens33-static
方法3:使用 nmtui(同 CentOS 7)
# 文本界面工具
sudo nmtui
方法4:手动编辑配置文件
# CentOS 8 的 NetworkManager 配置文件位置
/etc/NetworkManager/system-connections/
# 查看配置文件
ls -la /etc/NetworkManager/system-connections/
# 备份并编辑
sudo cp /etc/NetworkManager/system-connections/ens33.nmconnection /etc/NetworkManager/system-connections/ens33.nmconnection.backup
sudo vim /etc/NetworkManager/system-connections/ens33.nmconnection
# 重新加载配置
sudo nmcli connection reload
四、不同场景配置示例
场景1:多个 IP 地址(IP别名)
CentOS 7 传统方法:
# 创建别名配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 内容:
DEVICE="ens33:0"
BOOTPROTO="static"
ONBOOT="yes"
IPADDR="192.168.1.101"
NETMASK="255.255.255.0"
CentOS 7/8 NetworkManager 方法:
# 添加多个IP
nmcli connection modify ens33 \
+ipv4.addresses "192.168.1.101/24" \
+ipv4.addresses "192.168.1.102/24"
nmcli connection up ens33
场景2:多网卡绑定(Bonding)
CentOS 7 传统方法:
# 1. 创建bond接口
vim /etc/sysconfig/network-scripts/ifcfg-bond0
# 内容:
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
IPADDR=192.168.1.100
PREFIX=24
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=1 miimon=100"
# 2. 配置物理网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
# 内容:
DEVICE=eth0
TYPE=Ethernet
NAME=eth0
MASTER=bond0
SLAVE=yes
ONBOOT=yes
BOOTPROTO=none
# 同理配置 eth1
CentOS 7/8 NetworkManager 方法:
# 创建bond连接
nmcli connection add type bond con-name bond0 ifname bond0 \
bond.options "mode=active-backup,miimon=100" \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8" \
ipv4.method manual
# 添加从属接口
nmcli connection add type ethernet slave-type bond \
con-name bond0-port1 ifname eth0 master bond0
nmcli connection add type ethernet slave-type bond \
con-name bond0-port2 ifname eth1 master bond0
场景3:VLAN 配置
CentOS 7 传统方法:
# 安装vlan工具
yum install vlan -y
# 创建VLAN接口
vim /etc/sysconfig/network-scripts/ifcfg-ens33.100
# 内容:
DEVICE=ens33.100
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
VLAN=yes
CentOS 7/8 NetworkManager 方法:
# 创建VLAN
nmcli connection add type vlan con-name vlan100 ifname vlan100 \
dev ens33 id 100 \
ipv4.addresses "192.168.100.10/24" \
ipv4.method manual
场景4:网桥配置
CentOS 7 传统方法:
# 1. 创建网桥
vim /etc/sysconfig/network-scripts/ifcfg-br0
# 内容:
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes
DELAY=0
# 2. 修改物理网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 内容:
DEVICE=ens33
TYPE=Ethernet
BRIDGE=br0
ONBOOT=yes
BOOTPROTO=none
NetworkManager 方法:
# 创建网桥
nmcli connection add type bridge con-name br0 ifname br0 \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.method manual
# 添加端口
nmcli connection add type ethernet slave-type bridge \
con-name br0-port1 ifname ens33 master br0
五、DNS 配置
方法1:通过网卡配置文件
# 在网卡配置文件中设置
DNS1="8.8.8.8"
DNS2="8.8.4.4"
DNS3="114.114.114.114"
方法2:直接修改 resolv.conf
# 编辑DNS配置文件
vim /etc/resolv.conf
# 内容:
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 114.114.114.114
search example.com
options timeout:2 attempts:3
# 防止NetworkManager覆盖(CentOS 8需要)
echo "PEERDNS=no" >> /etc/sysconfig/network-scripts/ifcfg-ens33
# 或
nmcli connection modify ens33 ipv4.ignore-auto-dns yes
方法3:使用 NetworkManager
# 修改DNS
nmcli connection modify ens33 ipv4.dns "8.8.8.8 8.8.4.4"
# 添加额外DNS
nmcli connection modify ens33 +ipv4.dns "114.114.114.114"
# 设置DNS搜索域
nmcli connection modify ens33 ipv4.dns-search "example.com"
六、主机名配置
CentOS 7/8 通用:
# 查看当前主机名
hostname
hostnamectl
# 临时修改(重启失效)
hostname new-hostname
# 永久修改
hostnamectl set-hostname new-hostname
# 或
vim /etc/hostname
# 更新 /etc/hosts
echo "192.168.1.100 new-hostname" >> /etc/hosts
七、防火墙和SELinux相关
开放网络服务端口:
# CentOS 7/8 防火墙
# 查看状态
systemctl status firewalld
firewall-cmd --state
# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-all
临时关闭防火墙(测试用):
# 临时关闭
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld
# 临时禁用SELinux
setenforce 0
# 永久禁用(编辑 /etc/selinux/config)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
八、故障排除
常见问题1:网络服务启动失败
# 查看网络服务状态
systemctl status network
systemctl status NetworkManager
# 查看日志
journalctl -xe
journalctl -u network
journalctl -u NetworkManager
# 检查配置文件语法
cat /etc/sysconfig/network-scripts/ifcfg-ens33
# 注意:BOOTPROTO不能是dhcp和static同时存在
常见问题2:IP地址不生效
# 检查IP是否设置成功
ip addr show ens33
# 检查路由
ip route show
# 检查DNS
cat /etc/resolv.conf
nslookup google.com
# 重启NetworkManager
systemctl restart NetworkManager
# 重新读取配置文件
nmcli connection reload
常见问题3:网卡不识别
# 查看网卡驱动
lspci | grep -i ethernet
ethtool -i ens33
# 查看内核模块
lsmod | grep e1000
# 或
modinfo e1000
# 重新加载网卡驱动
modprobe -r e1000 && modprobe e1000
常见问题4:NetworkManager 和 network 冲突
# CentOS 7 中如果两者冲突
# 停用NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
# 启用传统network
systemctl enable network
systemctl start network
# 或反之,只用NetworkManager
systemctl stop network
systemctl disable network
九、实用脚本
脚本1:一键修改IP(CentOS 7)
#!/bin/bash
# change_ip_centos7.sh
# 用法:sudo ./change_ip_centos7.sh 192.168.1.100 24 192.168.1.1 ens33
IP=$1
PREFIX=$2
GATEWAY=$3
INTERFACE=$4
# 备份配置
cp /etc/sysconfig/network-scripts/ifcfg-$INTERFACE /etc/sysconfig/network-scripts/ifcfg-$INTERFACE.backup.$(date +%Y%m%d)
# 生成新配置
cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE << EOF
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="$INTERFACE"
DEVICE="$INTERFACE"
ONBOOT="yes"
IPADDR="$IP"
PREFIX="$PREFIX"
GATEWAY="$GATEWAY"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
EOF
# 重启网络
systemctl restart network
# 验证
echo "新IP配置:"
ip addr show $INTERFACE
echo -e "\n测试网关连通性:"
ping -c 2 $GATEWAY
脚本2:一键修改IP(CentOS 8,使用nmcli)
#!/bin/bash
# change_ip_centos8.sh
# 用法:sudo ./change_ip_centos8.sh 192.168.1.100 24 192.168.1.1 ens33
IP=$1
PREFIX=$2
GATEWAY=$3
INTERFACE=$4
# 修改IP
nmcli connection modify $INTERFACE \
ipv4.addresses "$IP/$PREFIX" \
ipv4.gateway "$GATEWAY" \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual \
connection.autoconnect yes
# 应用更改
nmcli connection up $INTERFACE
# 验证
echo "新IP配置:"
ip addr show $INTERFACE
echo -e "\n测试网络:"
ping -c 2 $GATEWAY
ping -c 2 8.8.8.8
脚本3:网络诊断脚本
#!/bin/bash
# network_diagnose.sh
echo "=== CentOS 网络诊断报告 ==="
echo "时间: $(date)"
echo "主机名: $(hostname)"
echo ""
echo "1. 系统信息:"
echo "----------------"
cat /etc/redhat-release
uname -a
echo ""
echo "2. 网卡信息:"
echo "----------------"
ip link show
echo ""
ip addr show
echo ""
echo "3. 路由信息:"
echo "----------------"
ip route show
echo ""
echo "4. DNS配置:"
echo "----------------"
cat /etc/resolv.conf
echo ""
cat /etc/hosts | tail -10
echo ""
echo "5. 网络服务状态:"
echo "----------------"
systemctl status network 2>/dev/null | head -5
systemctl status NetworkManager 2>/dev/null | head -5
echo ""
echo "6. 连接测试:"
echo "----------------"
ping -c 2 127.0.0.1 && echo "本地回环: 正常" || echo "本地回环: 异常"
ping -c 2 $(ip route | grep default | awk '{print $3}' 2>/dev/null) && echo "网关: 正常" || echo "网关: 异常"
ping -c 2 8.8.8.8 && echo "外网: 正常" || echo "外网: 异常"
echo ""
echo "7. 网络配置文件:"
echo "----------------"
ls -la /etc/sysconfig/network-scripts/ifcfg-* 2>/dev/null || echo "无传统配置文件"
ls -la /etc/NetworkManager/system-connections/ 2>/dev/null || echo "无NetworkManager配置文件"
十、CentOS 7 和 8 的关键差异
| 特性 | CentOS 7 | CentOS 8 |
|---|---|---|
| 默认网络管理 | network 服务 | NetworkManager |
| 网络配置文件 | /etc/sysconfig/network-scripts/ |
/etc/NetworkManager/system-connections/ |
| 推荐工具 | ifcfg 文件 或 nmcli | nmcli (必须) |
| 防火墙 | firewalld (默认) | firewalld (默认) |
| 网络服务 | systemctl restart network | systemctl restart NetworkManager |
| DNS管理 | 网卡文件或 resolv.conf | NetworkManager 管理 |
| nmtui | 可用 | 可用 |
十一、最佳实践
- CentOS 7 服务器:建议使用传统 network 服务
- CentOS 8 所有系统:必须使用 NetworkManager
- 生产环境:修改前备份配置文件
- 远程连接时:先修改,后测试,最后重启
- 记录变更:记录IP、网关、DNS等变更信息
- 使用主机名:配置
/etc/hosts方便管理
快速参考命令卡
# 查看IP地址
ip a
hostname -I
# 查看网卡
ip link show
nmcli device status
# 修改IP (CentOS 7传统)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
# 修改IP (CentOS 7/8 nmcli)
nmcli connection modify ens33 ipv4.method manual ipv4.addresses "192.168.1.100/24"
nmcli connection up ens33
# 修改DNS
nmcli connection modify ens33 ipv4.dns "8.8.8.8 8.8.4.4"
# 查看路由
ip route
route -n
# 测试网络
ping -c 4 8.8.8.8
ping -c 4 google.com
按照这个指南,你可以根据你的 CentOS 版本选择合适的方法修改 IP 地址。如果是远程操作,建议在操作前确保有其他访问方式(如控制台或IPMI),以防网络中断无法连接。
作者:严锋 创建时间:2025-12-18 13:04
最后编辑:严锋 更新时间:2025-12-25 10:39
最后编辑:严锋 更新时间:2025-12-25 10:39