如何在Linux中为单个网卡分配多个IP地址

时间:2020-03-21 11:44:07  来源:igfitidea点击:

将多个IP地址分配给基于DEB的系统中的单网卡

我在Ubuntu 16.04 LTS服务器版上测试了本教程。
但是,这将在Debian和其他基于Deb的系统上工作,如Linux Mint,小学操作系统等。

正如我们所知道的,我们可以使用命令在Ubuntu中找到IP地址:

$ifconfig

或者

$ip addr

示例输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:12:f8:c1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.105/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe12:f8c1/64 scope link 
 valid_lft forever preferred_lft forever

如上所述,我的网卡ENP0S3的IP地址为192.168.1.105.

很明显,我已经为我的网卡分配了A类IP系列:192.168.1.0。
如果我需要一个不同的系列,例如192.168.2.0是什么?

只需运行以下命令即可设置另外的IP。

$sudo ip addr add 192.168.2.105/24 dev enp0s3

这里24表示网络掩模:255.255.255.0。

现在,让我们检查是否已分配新IP。

$ip addr

示例输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:12:f8:c1 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.105/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.105/24 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe12:f8c1/64 scope link 
 valid_lft forever preferred_lft forever

如上所述,我的网卡现在有两个IP,例如:192.168.1.105和192.168.2.105.
同样,我们可以根据需要分配尽可能多的IP:192.168.3.105,192.168.4.105等。

让我们ping新的IP地址:

$sudo ping -c 3 192.168.2.105

示例输出:

PING 192.168.2.105 (192.168.2.105) 56(84) bytes of data.
64 bytes from 192.168.2.105: icmp_seq=1 ttl=64 time=0.040 ms
64 bytes from 192.168.2.105: icmp_seq=2 ttl=64 time=0.067 ms
64 bytes from 192.168.2.105: icmp_seq=3 ttl=64 time=0.066 ms
--- 192.168.2.105 ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.040/0.057/0.067/0.015 ms

恭喜!这是工作!!

等等,我还没完成。
到目前为止,我们所做的是我们暂时分配了新的IP。
重新启动系统后,新IP将消失。
你如何永久地使它成为?
这也很简单。

永久分配多个IP地址:

编辑/etc/network/interfaces文件:

$sudo nano /etc/network/interfaces

现在,添加添加IP地址,如下所示:

iface enp0s3 inet static
  address 192.168.2.105/24

保存并关闭文件。

运行以下命令以生效保存的更改。

$sudo ifdown enp0s3 && sudo ifup enp0s3

示例输出:

Killed old client process
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/enp0s3/08:00:27:12:f8:c1
Sending on LPF/enp0s3/08:00:27:12:f8:c1
Sending on Socket/fallback
DHCPRELEASE on enp0s3 to 192.168.1.1 port 67 (xid=0xe3877d4)
RTNETLINK answers: Cannot assign requested address
Internet Systems Consortium DHCP Client 4.3.3
Copyright 2004-2014 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/enp0s3/08:00:27:12:f8:c1
Sending on LPF/enp0s3/08:00:27:12:f8:c1
Sending on Socket/fallback
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 3 (xid=0x3080e44d)
DHCPDISCOVER on enp0s3 to 255.255.255.255 port 67 interval 7 (xid=0x3080e44d)
DHCPREQUEST of 192.168.1.105 on enp0s3 to 255.255.255.255 port 67 (xid=0x4de48030)
DHCPOFFER of 192.168.1.105 from 192.168.1.1
DHCPACK of 192.168.1.105 from 192.168.1.1
bound to 192.168.1.105 -- renewal in 42937 seconds.

现在,让我们运行以下命令来检查是否已分配新的IP地址。

$ip addr

示例输出:

此外,我们可以重新启动系统后检查。
我们将看到新IP是永久分配的。

在基于RPM的系统中为单个网卡分配多个IP地址

我在CentOS 7 64位服务器版上测试了这一点。
但是,相同的步骤应该适用于其他基于RPM的系统,例如Fedora,Red Hat Linux和Scientific Linux。

刚刚运行以下命令临时添加其他IP。

$sudo ip addr add 192.168.2.150/24 dev enp0s3

我们可以立即开始使用新的IP。

要将IP地址添加永久性,只需将网卡配置文件作为root用户:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

添加新的IP地址,如下所示。

IPADDR1="192.168.2.150"

对于其他IP地址,添加行"ipaddr2 ="192.168.3.150"。
我们可以逐个添加任意数量的IP地址。

保存并关闭文件。

使用命令重新启动网络服务:

# systemctl restart network

使用命令验证新的IP地址:

# ip addr

示例输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.150/24 brd 192.168.2.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link 
 valid_lft forever preferred_lft forever

同样,根据需要添加尽可能多的IP。

分配不同的类IP地址

有五类可用IP范围:A类,B类,C类,C类D和类A,B和C常用。

|类地址范围|支持|
|--- | --- | - - |
| A类| 1.0.0.1至126.255.255.254 |支持127个网络中的每一个的1600万个主机。 |
| B类| 128.1.0.1至191.255.255.254 |支持16,000个网络中的65,000个主机。 |
| c级192.0.1.1至223.255.254.254 |支持254个网络上的254个主机。 |
| D类| 224.0.0.0至239.255.255.255 |保留用于组播组。 |
| e Class. 240.0.0.0至254.255.255.254 |保留未来使用或者研发目的。 |

我们可能注意到,我在本教程中使用了C类地址。

我想分配不同的类IP,例如A类(1.0.0.0系列)。
是否可以?
当然是的。

只需在网卡配置文件中添加我们选择的IP地址。

在基于Ubuntu/Debian的系统中分配不同的类IP地址:

在基于DEB的系统中,编辑/etc/network/interfaces文件:

$sudo nano /etc/network/interfaces

添加IP地址:

iface enp0s3 inet static
  address 10.0.0.105/16

保存并关闭文件。

运行以下命令以生效更改。

$sudo ifdown enp0s3 && sudo ifup enp0s3

检查是否使用命令添加了新的IP:

$ip addr

示例输出:

使用命令ping新的IP地址:

$sudo ping -c 3 10.0.0.105

示例输出:

PING 10.0.0.105 (10.0.0.105) 56(84) bytes of data.
64 bytes from 10.0.0.105: icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from 10.0.0.105: icmp_seq=2 ttl=64 time=0.070 ms
64 bytes from 10.0.0.105: icmp_seq=3 ttl=64 time=0.055 ms
--- 10.0.0.105 ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.042/0.055/0.070/0.014 ms

像这样,我们可以在Ubuntu,Debian等ubuntu,debian等单个网卡中添加多个IPS,如Linux Mint,以及基本操作系统等。

在CentOS/Rhel/Sciencific Linux系统中分配不同的类IP地址:

编辑网络卡配置文件作为root用户:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

添加新的IP地址,如下所示。
请注意,我们必须为每个类IP范围添加正确的前缀(网络掩码)。

让我们添加类IP。
例如10.0.0.150。

IPADDR2="10.0.0.150"
[...]
PREFIX2=16

确保每个网络的iPaddr号码(ipaddr2)和前缀号(前缀2)相同。

保存并关闭文件。
重新启动网络服务以生效更改。

# systemctl restart network

使用命令检查新IP:

# ip addr

示例输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff
 inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 192.168.2.150/24 brd 192.168.255.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet 10.0.0.150/16 brd 10.255.255.255 scope global enp0s3
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe80:6319/64 scope link 
 valid_lft forever preferred_lft forever

让我们ping ip:

# ping -c 3 10.0.0.150

示例输出:

PING 10.0.0.150 (10.0.0.150) 56(84) bytes of data.
64 bytes from 10.0.0.150: icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from 10.0.0.150: icmp_seq=2 ttl=64 time=0.100 ms
64 bytes from 10.0.0.150: icmp_seq=3 ttl=64 time=0.105 ms
--- 10.0.0.150 ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.097/0.100/0.105/0.012 ms

已添加新的IP地址并工作。
无需购买新卡,做一些复杂的路由器配置,或者任何东西。
使用此方法,我们可以在几分钟内轻松添加多个不同的IP系列。