在单个网络接口上创建或配置多个 IP 地址的概念称为 IP 别名,这对于在 Web 服务器上使用单个网络接口、在同一个子网内使用不同的 IP 地址 来设置多个虚拟站点非常有用。

使用这种 IP 别名的主要优势在于,你不需要为每个 IP 配备一个物理适配器。相反,你可以为一张物理网卡创建多个或许多虚拟接口(别名)。

此处给出的说明适用于所有基于 RHEL 的发行版,例如 Fedora、CentOS、Rocky 和 Alma Linux。手动创建多个接口并为其分配 IP 地址是一项艰巨的任务。

在这里,我们将了解如何通过定义一组 IP 范围来分配 IP 地址。我们还将了解如何创建虚拟接口并一次性为其分配不同范围的 IP 地址。

在本文中,我们使用了局域网 IP,请将它们替换为你将要使用的 IP。

如何为单个网络接口创建多个 IP 地址

这里,我有一个名为 ‘ifcfg-eth0’ 的接口,它是以太网设备的默认网络接口卡。如果你连接了第二个以太网设备,它将显示为 ‘ifcfg-eth1’,其他额外的设备依此类推。

这些设备的网络文件位于 ‘/etc/sysconfig/network-scripts/’ 目录中,你可以使用以下 ls 命令列出所有设备。

ls -l /etc/sysconfig/network-scripts/

示例输出:

ifcfg-eth0   ifdown-isdn    ifup-aliases  ifup-plusb     init.ipv6-global
ifcfg-lo     ifdown-post    ifup-bnep     ifup-post      net.hotplug
ifdown       ifdown-ppp     ifup-eth      ifup-ppp       network-functions
ifdown-bnep  ifdown-routes  ifup-ippp     ifup-routes    network-functions-ipv6
ifdown-eth   ifdown-sit     ifup-ipv6     ifup-sit
ifdown-ippp  ifdown-tunnel  ifup-isdn     ifup-tunnel
ifdown-ipv6  ifup           ifup-plip     ifup-wireless

假设我们要创建三个额外的虚拟接口,以便将三个 IP 地址(172.16.16.126、172.16.16.127 和 172.16.16.128)绑定到网卡。

因此,我们需要创建三个额外的别名文件,而 “ifcfg-eth0” 保持相同的主 IP 地址。以下是我们为绑定以下 IP 地址而设置三个别名的步骤。

适配器            IP 地址                类型
-------------------------------------------------
eth0              172.16.16.125            主
eth0:0            172.16.16.126            别名 1
eth0:1            172.16.16.127            别名 2
eth0:2            172.16.16.128            别名 3

其中 ":X" 表示用于为网络接口 eth0 创建别名的设备(接口)编号。对于每个别名,你必须按顺序分配一个编号。

例如,我们将接口 “ifcfg-eth0” 中的现有参数复制到名为 ifcfg-eth0:0、ifcfg-eth0:1 和 ifcfg-eth0:2 的虚拟接口。

切换到网络目录并按如下所示创建文件。

cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:0
cp ifcfg-eth0 ifcfg-eth0:1
cp ifcfg-eth0 ifcfg-eth0:2

打开文件 “ifcfg-eth0” 并查看内容。

vi ifcfg-eth0

示例输出:

DEVICE="eth0"
BOOTPROTO=static
ONBOOT=yes
TYPE="Ethernet"
IPADDR=172.16.16.125
NETMASK=255.255.255.224
GATEWAY=172.16.16.100
HWADDR=00:0C:29:28:FD:4C

在这里,我们只需要两个参数(DEVICE 和 IPADDR)。因此,用你喜欢的编辑器打开每个文件,将 DEVICE 名称更改为其对应的别名,并修改 IPADDR 地址。

例如,使用 VI 编辑器打开文件 ‘ifcfg-eth0:0’、‘ifcfg-eth0:1’ 和 ‘ifcfg-eth0:2’,并更新这两个参数。

最终,它将类似于以下示例。

ifcfg-eth0:0
DEVICE="eth0:0"
BOOTPROTO=static
ONBOOT=yes
TYPE="Ethernet"
IPADDR=172.16.16.126
NETMASK=255.255.255.224
GATEWAY=172.16.16.100
HWADDR=00:0C:29:28:FD:4C
ifcfg-eth0:1
DEVICE="eth0:1"
BOOTPROTO=static
ONBOOT=yes
TYPE="Ethernet"
IPADDR=172.16.16.127
NETMASK=255.255.255.224
GATEWAY=172.16.16.100
HWADDR=00:0C:29:28:FD:4C
ifcfg-eth0:2
DEVICE="eth0:2"
BOOTPROTO=static
ONBOOT=yes
TYPE="Ethernet"
IPADDR=172.16.16.128
NETMASK=255.255.255.224
GATEWAY=172.16.16.100
HWADDR=00:0C:29:28:FD:4C

完成所有更改后,保存所有更改并重新启动/启动网络服务以使更改生效。

systemctl restart network

要验证所有别名(虚拟接口)是否已启动并正常运行,你可以使用 “ifconfig” 或 “ip” 命令。

ifconfig

示例输出:

eth0      Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.125  Bcast:172.16.16.100  Mask:255.255.255.224
          inet6 addr: fe80::20c:29ff:fe28:fd4c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:237 errors:0 dropped:0 overruns:0 frame:0
          TX packets:198 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:25429 (24.8 KiB)  TX bytes:26910 (26.2 KiB)
          Interrupt:18 Base address:0x2000

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.126  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.127  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.128  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

现在尝试从另一台机器 ping 它们中的每一个。如果一切设置正确,你将收到每个的 ping 响应。

ping 172.16.16.126
ping 172.16.16.127
ping 172.16.16.128

示例输出:

ping 172.16.16.126
PING 172.16.16.126 (172.16.16.126) 56(84) bytes of data.
64 bytes from 172.16.16.126: icmp_seq=1 ttl=64 time=1.33 ms
64 bytes from 172.16.16.126: icmp_seq=2 ttl=64 time=0.165 ms
64 bytes from 172.16.16.126: icmp_seq=3 ttl=64 time=0.159 ms

ping 172.16.16.127
PING 172.16.16.127 (172.16.16.127) 56(84) bytes of data.
64 bytes from 172.16.16.127: icmp_seq=1 ttl=64 time=1.33 ms
64 bytes from 172.16.16.127: icmp_seq=2 ttl=64 time=0.165 ms
64 bytes from 172.16.16.127: icmp_seq=3 ttl=64 time=0.159 ms

ping 172.16.16.128
PING 172.16.16.128 (172.16.16.128) 56(84) bytes of data.
64 bytes from 172.16.16.128: icmp_seq=1 ttl=64 time=1.33 ms
64 bytes from 172.16.16.128: icmp_seq=2 ttl=64 time=0.165 ms
64 bytes from 172.16.16.128: icmp_seq=3 ttl=64 time=0.159 ms

一切似乎都运行得很顺利。利用这些新的IP,您可以在Apache中设置虚拟站点、FTP账户以及许多其他服务。

分配多个IP地址范围

如果您想为一个名为“ifcfg-eth0”的特定接口创建多个IP地址的范围,我们使用“ifcfg-eth0-range0”并将ifcfg-eth0的内容复制到它上面,如下所示。

cd /etc/sysconfig/network-scripts/
cp -p ifcfg-eth0 ifcfg-eth0-range0

现在打开“ifcfg-eth0-range0”文件。

vi ifcfg-eth0-range0

并添加“IPADDR_START”和“IPADDR_END”IP地址范围,如下所示。

#DEVICE="eth0"
#BOOTPROTO=none
#NM_CONTROLLED="yes"
#ONBOOT=yes
TYPE="Ethernet"
IPADDR_START=172.16.16.126
IPADDR_END=172.16.16.130
IPV6INIT=no
#GATEWAY=172.16.16.100

保存文件并重启/启动网络服务

systemctl restart network

验证虚拟接口是否已创建并带有IP地址。

ifconfig

示例输出:

eth0      Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.125  Bcast:172.16.16.100  Mask:255.255.255.224
          inet6 addr: fe80::20c:29ff:fe28:fd4c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1385 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1249 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:127317 (124.3 KiB)  TX bytes:200787 (196.0 KiB)
          Interrupt:18 Base address:0x2000

eth0:0     Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.126  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.127  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.128  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:3    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.129  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

eth0:4    Link encap:Ethernet  HWaddr 00:0C:29:28:FD:4C
          inet addr:172.16.16.130  Bcast:172.16.16.100  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:18 Base address:0x2000

通过遵循这些方法,您可以在Red Hat Enterprise Linux系统中有效地在单个网络接口上创建和管理多个IP地址。这种灵活性使您能够根据特定需求优化网络通信和连接。