如何在Linux中为单个网卡分配多个IP地址
将多个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系列。