本文详细介绍在 CentOS 6.x/7.x/8.x 及其他 Linux 发行版上添加 IP 地址的多种方法,包括单个 IP 添加、批量 IP 添加以及临时和永久配置方案。
应用场景:
服务器添加多个 IP 地址在以下场景中非常常见:
- 托管多个网站,每个网站使用独立 IP
- 配置高可用集群的虚拟 IP
- 实现基于 IP 的访问控制和负载均衡
- SSL 证书需要独立 IP 地址
- 应用程序需要监听多个 IP
无论您使用的是新加坡独立服务器、日本VPS还是其他地区的服务器,掌握 IP 地址管理技能都是服务器运维的基础能力。
准备工作:
在开始添加 IP 之前,请确认以下信息:
获取完整的 IP 信息:
- IP 地址或 IP 地址段
- 子网掩码(Netmask)
- 网关地址(Gateway)
- 网络接口名称(通常是 eth0、eth1 或 ens33 等)
确认网络接口:
查看当前网络接口:
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 等。
- 备份网络配置:
在修改前备份原有配置:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.backup
- 了解系统版本:
不同版本的网络配置方式略有差异:
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
注意事项:
网关配置: 虚拟网络接口通常不需要配置 GATEWAY,因为系统只能有一个默认网关。如果配置了多个网关,可能会导致路由冲突。建议只在主网卡(eth0)配置文件中设置网关。
子网掩码: 确保子网掩码与网络环境匹配,常见的子网掩码参考后文的对照表。
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 数 | 网络地址 | 广播地址 |
|---|---|---|---|---|---|
| /29 | 255.255.255.248 | 8 | 6 | 第 1 个 | 最后 1 个 |
| /28 | 255.255.255.240 | 16 | 14 | 第 1 个 | 最后 1 个 |
| /27 | 255.255.255.224 | 32 | 30 | 第 1 个 | 最后 1 个 |
| /26 | 255.255.255.192 | 64 | 62 | 第 1 个 | 最后 1 个 |
| /25 | 255.255.255.128 | 128 | 126 | 第 1 个 | 最后 1 个 |
| /24 | 255.255.255.0 | 256 | 254 | 第 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 或网络管理员确认正确的子网掩码