本文详细介绍在 CentOS 6.x/7.x/8.x 及其他 Linux 发行版上添加 IP 地址的多种方法,包括单个 IP 添加、批量 IP 添加以及临时和永久配置方案。

应用场景:

服务器添加多个 IP 地址在以下场景中非常常见:

  • 托管多个网站,每个网站使用独立 IP
  • 配置高可用集群的虚拟 IP
  • 实现基于 IP 的访问控制和负载均衡
  • SSL 证书需要独立 IP 地址
  • 应用程序需要监听多个 IP

无论您使用的是新加坡独立服务器日本VPS还是其他地区的服务器,掌握 IP 地址管理技能都是服务器运维的基础能力。


准备工作:

在开始添加 IP 之前,请确认以下信息:

  1. 获取完整的 IP 信息:

    • IP 地址或 IP 地址段
    • 子网掩码(Netmask)
    • 网关地址(Gateway)
    • 网络接口名称(通常是 eth0、eth1 或 ens33 等)
  2. 确认网络接口:

查看当前网络接口:

ip addr show

或使用旧命令:

ifconfig

输出示例:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255

记录主网卡名称,通常为 eth0、eth1、ens33、ens192 等。

  1. 备份网络配置:

在修改前备份原有配置:

cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.backup

  1. 了解系统版本:

不同版本的网络配置方式略有差异:

cat /etc/redhat-release


方法一:单独添加 IP 地址(推荐)

这种方法适合添加少量 IP 地址,配置清晰明确,便于管理。特别适合在香港独立服务器韩国VPS等需要精确控制 IP 配置的场景。

配置步骤:

第一步:创建虚拟网络接口配置文件

进入网络配置目录:

cd /etc/sysconfig/network-scripts

创建新的配置文件,命名格式为 ifcfg-网卡名:序号:

vi ifcfg-eth0:0

注意命名规则:

  • 主网卡是 eth0,第一个虚拟接口是 eth0:0
  • 第二个虚拟接口是 eth0:1,依此类推
  • 序号必须唯一,不能重复

第二步:编辑配置文件

输入以下配置内容:

DEVICE=eth0:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 TYPE=Ethernet

配置参数详解:

  • DEVICE - 虚拟网络接口名称,必须与文件名一致(eth0:0)
  • ONBOOT - 系统启动时是否激活此接口(yes 表示激活)
  • BOOTPROTO - 获取 IP 的方式(static 表示静态 IP,dhcp 表示动态获取)
  • IPADDR - 要添加的 IP 地址
  • NETMASK - 子网掩码
  • GATEWAY - 网关地址(通常只在主网卡配置,虚拟接口可以省略)
  • TYPE - 网络类型,通常为 Ethernet

注意事项:

  1. 网关配置: 虚拟网络接口通常不需要配置 GATEWAY,因为系统只能有一个默认网关。如果配置了多个网关,可能会导致路由冲突。建议只在主网卡(eth0)配置文件中设置网关。

  2. 子网掩码: 确保子网掩码与网络环境匹配,常见的子网掩码参考后文的对照表。

  3. BROADCAST: 广播地址参数现在通常可以省略,系统会自动计算。

第三步:添加多个 IP 地址

如果需要添加更多 IP,继续创建配置文件:

添加第二个 IP:

vi ifcfg-eth0:1

DEVICE=eth0:1 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.101 NETMASK=255.255.255.0 TYPE=Ethernet

添加第三个 IP:

vi ifcfg-eth0:2

DEVICE=eth0:2 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.102 NETMASK=255.255.255.0 TYPE=Ethernet

序号管理建议:

使用 ifconfig 查看当前已有的虚拟接口:

ifconfig | grep eth0:

输出示例:

eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

根据已有的最大序号,新增接口从下一个序号开始。

第四步:重启网络服务

保存配置文件后,重启网络使配置生效。

CentOS 6.x:

service network restart

CentOS 7.x/8.x:

systemctl restart network

systemctl restart NetworkManager

注意: 重启网络会导致所有网络连接暂时中断(通常 1-3 秒),如果是远程连接,建议在本地控制台或 IPMI 界面操作,避免连接断开。

第五步:验证配置

检查 IP 是否添加成功:

ip addr show eth0

ifconfig eth0

输出应该显示所有配置的 IP 地址:

eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0 inet 192.168.1.100/24 brd 192.168.1.255 scope global secondary eth0:0 inet 192.168.1.101/24 brd 192.168.1.255 scope global secondary eth0:1 inet 192.168.1.102/24 brd 192.168.1.255 scope global secondary eth0:2

测试 IP 连通性:

ping -c 4 192.168.1.100

从外部测试(如果是公网 IP):

ping -c 4 公网IP地址


方法二:批量添加连续 IP 地址(高效)

当需要添加大量连续的 IP 地址时,使用 range 配置方式更加高效。这种方法特别适合在台湾独立服务器马来西亚VPS等需要配置大量 IP 的场景。

前提条件:

  • IP 地址必须是连续的(例如:10.0.0.1 到 10.0.0.254)
  • 所有 IP 使用相同的子网掩码
  • 适用于 CentOS/RHEL 系统

配置步骤:

第一步:创建 range 配置文件

cd /etc/sysconfig/network-scripts vi ifcfg-eth0-range0

配置文件内容:

DEVICE=eth0 BOOTPROTO=static IPADDR_START=10.0.0.1 IPADDR_END=10.0.0.254 CLONENUM_START=1 NETMASK=255.255.255.0 ONBOOT=yes TYPE=Ethernet

配置参数详解:

  • DEVICE - 物理网卡名称(不带序号)
  • BOOTPROTO - 必须设置为 static
  • IPADDR_START - IP 地址范围的起始地址
  • IPADDR_END - IP 地址范围的结束地址
  • CLONENUM_START - 虚拟接口的起始序号(例如 1 表示从 eth0:1 开始)
  • NETMASK - 子网掩码,所有 IP 使用相同的掩码
  • ONBOOT - 是否开机启动
  • TYPE - 网络类型

CLONENUM_START 说明:

这个参数定义虚拟接口的起始编号:

  • 设置为 1,生成 eth0:1, eth0:2, eth0:3...
  • 设置为 10,生成 eth0:10, eth0:11, eth0:12...
  • 设置为 100,生成 eth0:100, eth0:101, eth0:102...

查看当前最大序号:

ifconfig | grep eth0: | tail -1

例如输出 eth0:50,则新的 range 配置应该设置 CLONENUM_START=51。

第二步:添加多个 IP 段

如果有多个不连续的 IP 段,可以创建多个 range 配置文件:

第一个 IP 段(10.0.0.1 - 10.0.0.254):

vi ifcfg-eth0-range0

DEVICE=eth0 BOOTPROTO=static IPADDR_START=10.0.0.1 IPADDR_END=10.0.0.254 CLONENUM_START=1 NETMASK=255.255.255.0 ONBOOT=yes TYPE=Ethernet

第二个 IP 段(10.0.1.1 - 10.0.1.254):

vi ifcfg-eth0-range1

DEVICE=eth0 BOOTPROTO=static IPADDR_START=10.0.1.1 IPADDR_END=10.0.1.254 CLONENUM_START=255 NETMASK=255.255.255.0 ONBOOT=yes TYPE=Ethernet

注意: 第二个段的 CLONENUM_START 设置为 255,避免与第一个段的序号冲突(第一个段使用 1-254)。

第三个 IP 段(10.0.2.1 - 10.0.2.254):

vi ifcfg-eth0-range2

DEVICE=eth0 BOOTPROTO=static IPADDR_START=10.0.2.1 IPADDR_END=10.0.2.254 CLONENUM_START=509 NETMASK=255.255.255.0 ONBOOT=yes TYPE=Ethernet

命名规则:

  • 文件名格式:ifcfg-网卡名-range序号
  • 序号从 0 开始递增:range0, range1, range2...
  • 每个 range 文件代表一个连续的 IP 段

第三步:重启网络服务

service network restart

systemctl restart network

第四步:验证配置

检查添加的 IP 数量:

ip addr show eth0 | grep inet | wc -l

这个命令会显示网卡上配置的 IP 总数(包括主 IP)。

查看具体的 IP 列表:

ip addr show eth0 | grep "inet " | awk '{print $2}'

输出示例:

192.168.1.10/24 10.0.0.1/24 10.0.0.2/24 10.0.0.3/24 ... 10.0.0.254/24

测试部分 IP 的连通性:

ping -c 2 10.0.0.1 ping -c 2 10.0.0.100 ping -c 2 10.0.0.254


方法三:使用 ip 命令临时添加(快速测试)

这种方法添加的 IP 是临时的,重启网络或系统后会失效。适合快速测试或临时需求。

添加单个 IP:

ip addr add 192.168.1.200/24 dev eth0

或指定标签:

ip addr add 192.168.1.200/24 dev eth0 label eth0:100

参数说明:

  • 192.168.1.200/24 - IP 地址和子网掩码(/24 等于 255.255.255.0)
  • dev eth0 - 指定网络接口
  • label eth0:100 - 为这个 IP 设置别名(可选)

查看添加结果:

ip addr show eth0

删除临时添加的 IP:

ip addr del 192.168.1.200/24 dev eth0

批量临时添加 IP(脚本):

创建一个脚本快速添加多个 IP:

vi /tmp/add_ips.sh

输入以下内容:

#!/bin/bash

批量添加临时 IP 地址

INTERFACE="eth0" IP_PREFIX="10.0.0" START=1 END=50

for i in $(seq $START $END); do ip addr add IPPREFIX.{i}/24 dev INTERFACE label ${INTERFACE}:{i} echo "Added IPPREFIX.{i}" done

保存并执行:

chmod +x /tmp/add_ips.sh /tmp/add_ips.sh

这个脚本会添加 10.0.0.1 到 10.0.0.50 共 50 个 IP 地址。

删除所有临时 IP:

ip addr show eth0 | grep "inet.*secondary" | awk '{print $2}' | while read ip; do ip addr del $ip dev eth0 done


方法四:使用 nmcli 命令(NetworkManager,CentOS 7/8)

对于使用 NetworkManager 的系统,可以使用 nmcli 命令管理网络配置。

查看连接列表:

nmcli connection show

输出示例:

NAME UUID TYPE DEVICE eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0

添加 IP 地址:

nmcli connection modify eth0 +ipv4.addresses 192.168.1.200/24

添加多个 IP:

nmcli connection modify eth0 +ipv4.addresses "192.168.1.201/24, 192.168.1.202/24"

应用配置:

nmcli connection up eth0

查看配置:

nmcli connection show eth0 | grep ipv4.addresses

删除 IP 地址:

nmcli connection modify eth0 -ipv4.addresses 192.168.1.200/24


子网掩码参考对照表:

了解常用的子网掩码及其对应的可用 IP 数量,对于正确配置网络至关重要。

CIDR 表示法与十进制对照:

详细说明:

CIDR子网掩码总 IP 数可用 IP 数网络地址广播地址
/29255.255.255.24886第 1 个最后 1 个
/28255.255.255.2401614第 1 个最后 1 个
/27255.255.255.2243230第 1 个最后 1 个
/26255.255.255.1926462第 1 个最后 1 个
/25255.255.255.128128126第 1 个最后 1 个
/24255.255.255.0256254第 1 个最后 1 个
 

实际应用示例:

示例 1:/29 网络

  • IP 段:192.168.1.0/29
  • 网络地址:192.168.1.0(不可用)
  • 可用 IP:192.168.1.1 - 192.168.1.6
  • 广播地址:192.168.1.7(不可用)
  • 子网掩码:255.255.255.248

示例 2:/26 网络

  • IP 段:10.0.0.0/26
  • 网络地址:10.0.0.0(不可用)
  • 可用 IP:10.0.0.1 - 10.0.0.62
  • 广播地址:10.0.0.63(不可用)
  • 子网掩码:255.255.255.192

示例 3:/24 网络(最常用)

  • IP 段:172.16.0.0/24
  • 网络地址:172.16.0.0(不可用)
  • 可用 IP:172.16.0.1 - 172.16.0.254
  • 广播地址:172.16.0.255(不可用)
  • 子网掩码:255.255.255.0

重要提示: 网络地址和广播地址不能分配给主机使用,所以实际可用 IP 数量 = 总 IP 数 - 2。


不同系统版本的注意事项:

CentOS 6.x:

  • 网络配置文件位于 /etc/sysconfig/network-scripts/
  • 网络接口通常命名为 eth0, eth1...
  • 使用 service network restart 重启网络
  • 支持虚拟接口(eth0:0)和 range 配置

CentOS 7.x:

  • 默认使用 NetworkManager 管理网络
  • 网络接口可能命名为 ens33, ens192 等(基于设备属性)
  • 可以使用 systemctl restart network 或 nmcli 命令
  • 支持传统配置方式和 nmcli 命令行工具
  • 虚拟接口配置方式与 CentOS 6 相同

CentOS 8.x / Rocky Linux / AlmaLinux:

  • 完全使用 NetworkManager 管理网络
  • 推荐使用 nmcli 或 nmtui 进行配置
  • 传统的 network 服务已被移除
  • 配置文件格式保持兼容,但推荐使用新工具

网卡命名说明:

CentOS 7 之后使用可预测的网络接口命名(Predictable Network Interface Names):

  • en - Ethernet(以太网)
  • s - 热插拔插槽(slot)
  • p - PCI 地理位置
  • 数字 - 接口编号

常见命名示例:

  • ens33 - PCI 插槽 33 的以太网卡
  • ens192 - PCI 插槽 192 的以太网卡
  • enp0s3 - PCI 总线 0 插槽 3 的网卡
  • eno1 - 板载网卡 1

恢复传统命名(可选):

如果想使用传统的 eth0 命名方式,可以修改启动参数:

vi /etc/default/grub

在 GRUB_CMDLINE_LINUX 行末尾添加:

net.ifnames=0 biosdevname=0

更新 GRUB 配置:

grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统:

reboot


常见问题排查:

问题 1:添加 IP 后无法访问

  • 检查网络配置: 确认 IP、子网掩码、网关配置正确
  • 检查防火墙: 防火墙可能阻止了新 IP 的访问
  • 检查路由表: 使用 ip route show 查看路由配置
  • 测试本地连通: 在服务器上 ping 新添加的 IP

问题 2:重启后 IP 消失

  • 原因: 使用 ip 命令临时添加的 IP 不会保存
  • 解决: 使用配置文件方式永久添加 IP

问题 3:虚拟接口编号冲突

  • 原因: 使用了已存在的序号
  • 解决: 使用 ifconfig | grep eth0: 查看已有序号,选择未使用的序号

问题 4:批量添加后只有部分 IP 生效

  • 检查配置文件: 确认 IPADDR_START 和 IPADDR_END 正确
  • 检查 CLONENUM_START: 确保序号范围足够
  • 查看日志: journalctl -xe 或 /var/log/messages 查看错误信息

问题 5:网络重启后所有连接断开

  • 原因: 远程 SSH 连接在网络重启时会中断
  • 解决: 使用本地控制台、IPMI 或串口登录进行操作;或使用 screen/tmux 保持会话

问题 6:配置文件修改后不生效

  • 检查文件权限: 配置文件应该是 644 权限
  • 检查语法: 确保配置文件格式正确,没有多余空格或特殊字符
  • 重启网络服务: 确保执行了网络重启命令

问题 7:子网掩码设置错误导致网络不通

  • 原因: 子网掩码与实际网络环境不匹配
  • 解决: 向 IDC 或网络管理员确认正确的子网掩码