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 可用 可用

十一、最佳实践

  1. CentOS 7 服务器:建议使用传统 network 服务
  2. CentOS 8 所有系统:必须使用 NetworkManager
  3. 生产环境:修改前备份配置文件
  4. 远程连接时:先修改,后测试,最后重启
  5. 记录变更:记录IP、网关、DNS等变更信息
  6. 使用主机名:配置 /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