Linux下一个网卡配置多个ip(虚拟ip)

Linux下一个网卡配置多个ip(虚拟ip),第1张

1、设置子ip配置文件

2、创建新文件 vim ifcfg-eth0:0,添加以下内容,保存退出

3、重启网卡

4、临时清除ip别名

5、当然你也可以用同一配置文件配置多个ip,也是可行的。

    前段时间在调试时,将外网接入内部局域网,然后使用向日葵远程连接调试。Windows一个网络适配器只能设置一个IP地址,后面才发现可以通过网络子接口来设置虚拟IP,内部网络通过正常的IP地址通信,外部网络通过子接口来进行通信,即一个物理网口上连接两个子网。Windows可以设置网络子接口,笔者就延申到Linux系统上,总结在不同平台设置网络子接口的方法。需要明确的是,虚拟IP的数据还是经过真实的物理网络接口。简而言之,网卡设备都有一个MAC地址,但是却可以有多个网络层IP地址。

    本文以Windows10和CentOS8为例。

 Windows平台上:

    微软官网对于网络子接口有这样的描述:

1)一个逻辑IP网络正在使用中,并且此计算机需要使用多个IP地址才能在该网络上进行通信。

2)正在使用多个逻辑IP网络,并且此计算机需要一个不同的IP地址才能与每个不同的逻辑IP网络进行通信。

    当不使用“常规”选项卡上的“自动获取IP地址”时,才可以使用“高级TCP/IP设置”进行此网络连接,来完成高级IP寻址。在设置里面,Interface metric 接口度量标准(跃点数)可以设置该接口的优先级,接口度量标准的值越小,表示使用该接口的优先级越高。自动度量标准(自动跃点),最高速度的接口具有最低的接口度量值,优先级越高。

Linux平台上:

    Linux平台上虚拟ip基本上都用于高可用的架构上,比如keepalived就是通过托管VIP里完成飘逸,可以参考笔者以前的文章-Keepalived让树莓派也可以VIP漂移。其实这一篇文章对于keepalived也会有很好的理解了。看一下文章里面的Keepalived后通过ip addr查看的结果。

    VRRP协议来通信完成心跳检测,然后使用辅助IP的ip addr add 来添加虚拟IP地址,主用不在线就del掉VIP,然后在从机上add 同样的VIP。为什么不是ifconfig命令呢,那就需要你仔细看看关键信息找区别了,如果你安装了的话可以使用ifconfig来确定是否能够查看到VIP。

    接下里我们就看看在Linux中创建虚拟IP有两种方法,分别是:别名IP(IP aliases)和辅助IP(secondary IP addresses)。

    1、别名IP是通过ifconfig命令去创建和 *** 作的虚拟ip。

sudo ifconfig enp0s3:1 192.168.31.5 broadcast 192.168.31.255 netmask 255.255.255.0 up

    删除别名IP,将up改为down。

sudo ifconfig enp0s3:1 192.168.31.5 broadcast 192.168.31.255 netmask 255.255.255.0 down

    如果开机就需要别名IP地址的话,需要到/etc/sysconfig/network-scripts目录下新建一个子接口来永久性修改配置文件。将原ifcfg-enp0s3文件复制后,然后修改其中的IP地址信息。

    cp ifcfg-enp0s3 ifcfg-enp0s3:1

    为了方便也可以将ifconfig命令去创建和 *** 作的虚拟ip的命令加入到开机启动中,详情参考笔者以前的文章-Linux设置脚本开机启动的四种方法。

2、辅助IP是由linux的ip命令去创建和 *** 作的。

sudo  ip addr add 192.168.31.5/24 brd 192.168.31.255 dev enp0s3 label enp0s3:1

    设置完成后,也可以通过ifconfig来查看。但是如果在命令后面不添加label enp0s3:1的话,那么ifconfig就不能查看了。

    删除辅助IP,将add替换成del即可。

sudo  ip addr del 192.168.31.5/24 brd 192.168.31.255 dev enp0s3 label enp0s3:1

    辅助IP需要持久化的话,只能将ip命令去创建和 *** 作的虚拟ip的命令加入到开机启动中了。

    路由器通信设备:

    路由器接口有限, 一个物理接口可以配置子接口(逻辑接口)的方式来实现一当多的功能。具体配置参考笔者的文章-eNSP模拟实验-单臂路由实现VLAN间通信。

使用 虚拟ip最多的场景可能是双机 ,往往结合着keepalived使用。其实没有双机软件也可以使用虚拟ip,下面介绍两种方法ip addr和ifconfig进行增删查虚拟ip。增加虚拟ip : ip addr add ip/netmask dev 网口名称,比如ip addr add 192.168.88.0/24 dev eth0查看虚拟ip : ip addr show device_name或ip addr | grep eth0 ip addr =ip a= ip add list 查看网卡的ip和mac等,即使网卡处于down状态,也能显示出网卡状态,但是ifconfig查看就看不到。删除虚拟ip:ip addr del ip/netmask dev 网口名称,比如ip addr del 192.168.88.0/24  dev eth0清空指定网卡的所有ip: ip addr flush dev 接口ip addr *** 作时的注意事项:说明:网卡配置的ip一般为Primary ip,虚拟ip一般为Secondary ip,当删除Primary ip时Secondary ip也有可能同时被删除。 先查看ipv4或ipv6相应网卡开启提升参数promote_secondaries为1,当Primary ip被删除后,它的第1个Secondary ip将继承为Primary ip。 #  cat /etc/sysctl.conf  | grep promote_secondariesnet.ipv4.conf.eth0.promote_secondaries=1 默认不开启,查不到结果则表明未开启。 Secondary ip和Primary ip标注如下[root@localhost ~]# ip addr show eth0 2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000     link/ether 00:19:b9:ef:44:8b brd ff:ff:ff:ff:ff:ff     # Primary ip    inet 172.16.0.230/24 brd 172.16.0.255 scope global eth0     inet 10.1.1.230/24 scope global eth0     # Secondary ip     inet 10.1.1.231/24 scope global secondary eth0在linux中在一个网卡上配置的同一个网段的ip有Primary IP和Secondary address之分,如果不是同一个网段的ip总有一个是Primary IP,一条链上的吊链结构中上面的那条主链中的IP是Primary IP,Secondary address是主链结点的子链结点中的IP,一 旦主链上一个节点被删除了,那么它的子链也将不复存在,随之被删除。 可以通过调整一个参数来实现,当一个primary ip被删除时,如果它有secondary ip的话,那么它的第1个secondary地址(长子)成为primary地址,这样就显得很合理了,要不然在删除 primary地址的时候,如果有程序用secondary地址,要么延迟删除,要么程序崩溃。 开启的方法(主机重启后仍然生效的)echo "net.ipv4.conf.eth0.promote_secondaries=1" >>/etc/sysctl.confifconfig eth1:1 192.168.5.10/24  up:起别名 ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 up ifconfig eth1:1 192.168.5.10/24 down : 删别名 ifconfig eth0:1 192.168.8.5 netmask 255.255.255.0 downifconfig eth1 up :启用eth1网卡 ifconfig eth1 down : 禁用eth1网卡,这种禁用是从数据链路层断掉,但是网络层ip还在,有时候能ping 通,大概率是缓存表没有更新 ifdown eth0 : 禁用网卡,删除了网络层ip 二者本质上没有什么区别,只是表述方式不同。如果你非常理解网络协议的原理以及网络的分层架构那么我想你就不会有这个问题,实际上 每一个网卡设备都有一个mac地址 , 但是却可以有多个网络层地址 ,比如IP地址,然而这个事实无法很好地像用户提供 *** 作接口,所以就引出了ip别名(IP aliases)和辅助ip(secondary IP addresses)的概念。其实很容易理解这个事实,按照分层的思想,下层总是为上层服务,也就是为上层提供舞台,上层利用下层的服务,而不必让下层知道自己的情况,如果一个拥有合理mac地址的网卡没有配置网络层地址(比如IP地址)这件事合理的话,那么为这个设备配置多个IP地址也是合理的,好比一个ip可以对应多个应用层端口一样,也就是说,下层对上层总是一对多的关系,在分层架构中这种关系是合理的。 比如一台机器上运行着一个代理服务器或者负载均衡服务,代理服务器或者负载均衡服务和主服务器要监听相同的端口,那么就可以用secondary ip来解决,只要需要在同一网段监听同一个端口的应用都是吊链中子链存在的原因,因此可以说,主链对外部或者说对下面链路层虚拟了多块网卡, 而子链向上层虚拟了多台机器,配置了吊链结构的linux主机如果说只有一块网卡,那么外部会认为它有多块网卡,对于内部,应用层会认为彼此在不同的主机 上,这就是效果。 添加地址可以通过2个用户空间程序搞定,一个是ifconfig,另一个是ip addr add,ifconfig是基于ioctl进行添加地址的,而ip是基于netlink进行添加地址的,不管哪一种方式都可以达到目的。 但为何用ip addr add添加的ip地址用ifconfig看不到,而ifconfig设置的地址ip addr show却是可以看到?这个问题先放一放。 ip addr增加的虚拟ip在物理主机或虚拟机重启后失效。 方法1:把命令加到/etc/rc.local里面 ip addr add 192.168.26.74/32 dev eth1 方法2:高可用双机倒换后进行虚拟ip的增加 方法3:在/etc/sysconfig/network-scripts添加网卡名字,比如ifcfg-eth0:0,DEVICE=eth0:1 ---->子接口名 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.109.108 NETMASK=255.255.255.0ip addr *** 作ip时需要注意 ip addr和ifconfig的区别


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8291485.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存