百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

「干货」怎么避免子网划分造成的IP地址浪费?

bigegpt 2024-08-01 11:43 9 浏览

01技术背景


交换网络中,VLAN技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。


但是在一般的三层交换机中,通常是采用一个VLAN对应一个VLANIF接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费。


因为一个VLAN对应的子网中,子网号、子网定向广播地址、子网缺省网关地址不能用作VLAN内的主机IP地址,且子网中实际接入的主机可能少于编址数,多出来的IP地址也会因不能再被其他VLAN使用而被浪费掉。



例如,如图所示的VLAN规划中,VLAN2预计未来有10个主机地址的需求,但按编址方式,至少需要给其分配一个掩码长度是28的子网10.1.1.0/28,其中10.1.1.0为子网号,10.1.1.15为子网定向广播地址,10.1.1.1为子网缺省网关地址,这三个地址都不能用作主机地址,剩下范围在10.1.1.2~10.1.1.14的地址可以被主机使用,共13个。


这样,VLAN2子网至少浪费3个IP地址,三个VLAN子网一起至少浪费9个IP地址。同时,VLAN2子网实际地址需求只有10个,剩余的3个也不能再被其他VLAN使用。网络中的VLAN越多,浪费的IP地址也就越多。


为了解决上述问题,VLAN聚合应运而生。它通过引入Super-VLAN和Sub-VLAN的概念,使每个Sub-VLAN对应一个广播域,并让多个Sub-VLAN和一个Super-VLAN关联,只给Super-VLAN分配一个IP子网,所有Sub-VLAN都使用Super-VLAN的IP子网和缺省网关进行三层通信。


这样,多个Sub-VLAN共享一个网关地址,节约了子网号、子网定向广播地址、子网缺省网关地址,且各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据各自主机的需求数目在Super-VLAN对应子网内灵活的划分地址范围,从而即保证了各个Sub-VLAN作为一个独立广播域实现广播隔离,又节省了IP地址资源,提高了编址的灵活性。


02VLAN聚合


VLAN聚合通过定义Super-VLAN和Sub-VLAN,使Sub-VLAN只包含物理接口,负责保留各自独立的广播域;Super-VLAN不包含物理接口,只用来建立三层VLANIF接口。


然后再通过建立Super-VLAN和Sub-VLAN间的映射关系,把三层VLANIF接口和物理接口两部分有机的结合起来,实现所有Sub-VLAN共用一个网关与外部网络通信,并用ProxyARP实现Sub-VLAN间的三层通信,从而在实现普通VLAN的隔离广播域的同时,达到节省IP地址的目的。


工作原理


相对每一个普通VLAN都有一个三层逻辑接口和若干物理接口,VLAN聚合定义的Super-VLAN和Sub-VLAN比较特殊:


?Sub-VLAN:只包含物理接口,不能建立三层VLANIF接口,用于隔离广播域。每个Sub-VLAN内的主机与外部的三层通信是靠Super-VLAN的三层VLANIF接口来实现的。


?Super-VLAN:只建立三层VLANIF接口,不包含物理接口,与子网网关对应。与普通VLAN不同的是,它的VLANIF接口的Up不依赖于自身物理接口的Up,而是只要它所含Sub-VLAN中存在Up的物理接口就Up。


一个Super-VLAN可以包含一个或多个Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个Super-VLAN中,无论主机属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN对应的子网网段内。


这样,Sub-VLAN间共用同一个网关,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的,消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。



按照VLAN聚合的实现方式,令VLAN10为Super-VLAN,分配子网10.1.1.0/24,VLAN2~VLAN4作为Super-VLAN10的Sub-VLAN,如上图所示。


可以看出,Sub-VLAN2、Sub-VLAN3和Sub-VLAN4共用一个子网10.1.1.0/24,这样,该网络中就只有一个子网号10.1.1.0、一个子网缺省网关地址10.1.1.1和一个子网定向广播地址10.1.1.255共三个IP地址不能被主机使用,其余都可以被主机使用。


而且,各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据其各自主机的需求数目在Super-VLAN对应子网内灵活的划分地址范围,比如Sub-VLAN2实际需要10个,就给它分配10.1.1.2~10.1.1.11的地址段。


Sub-VLAN之间的通信


VLAN聚合在实现不同VLAN共用同一子网网段地址的同时,也给Sub-VLAN间的三层转发带来了问题。


普通VLAN中,不同VLAN内的主机可以通过各自不同的网关进行三层互通。但是Super-VLAN中,所有Sub-VLAN内的主机使用的是同一个网段的地址,共用同一个网关地址,主机只会做二层转发,而不会送网关进行三层转发。


即实际上,不同Sub-VLAN的主机在二层是相互隔离的,这就造成了Sub-VLAN间无法通信的问题。


解决这一问题的方法就是使用ProxyARP。


假设Sub-VLAN2内的主机Host_1与Sub-VLAN3内的主机Host_2要通信,在Super-VLAN10的VLANIF接口上启用ProxyARP,如图所示。



Host_1与Host_2的通信过程如下(假设Host_1的ARP表中无Host_2的对应表项):


1.Host_1将Host_2的IP地址(10.1.1.12)和自己所在网段10.1.1.0/24进行比较,发现Host_2和自己在同一个子网,但是Host_1的ARP表中无Host_2的对应表项。


2.Host_1发送ARP广播报文,请求Host_2的MAC地址,目的IP为10.1.1.12。


3.网关L3Switch收到Host_1的ARP请求,由于网关上使能Sub-VLAN间的ProxyARP,开始使用报文中的目的IP地址在路由表中查找,发现匹配了一条路由,下一跳为直连网段(VLANIF10的10.1.1.0/24),VLANIF10对应Super-VLAN10,则向Super-VLAN10的所有Sub-VLAN接口发送一个ARP广播,请求Host_2的MAC地址。


4.Host_2收到网关发送的ARP广播后,对此请求进行ARP应答。


5.网关收到Host_2的应答后,就把自己的MAC地址回应给Host_1。


6.Host_1之后要发给Host_2的报文都先发送给网关,由网关做三层转发。


Sub-VLAN与其他网络的三层通信


以下图所示组网为例,介绍Sub-VLAN内主机与其他网络内的主机间通信过程。



用户主机与服务器处于不同的网段中,Switch_1上配置了Sub-VLAN2、Sub-VLAN3、Super-VLAN4和VLAN10,Switch_2上配置了VLAN10和VLAN20。


假设Sub-VLAN2下的主机Host_1想访问与Switch_2相连的Server,报文转发流程如下(假设Switch_1上已配置了去往10.1.2.0/24网段的路由,Switch_2上已配置了去往10.1.1.0/24网段的路由,但两交换机没有任何三层转发表项):


1.Host_1将Server的IP地址(10.1.2.2)和自己所在网段10.1.1.0/24进行比较,发现和自己不在同一个子网,发送ARP请求给自己的网关,请求网关的MAC地址,目的MAC为全F,目的IP为10.1.1.1。


2.Switch_1收到该请求报文后,查找Sub-VLAN和Super-VLAN的对应关系,知道应该回应Super-VLAN4对应的VLANIF4的MAC地址,并知道从Sub-VLAN2的接口回应给Host_1。


3.Host_1学习到网关的MAC地址后,开始发送目的MAC为Super-VLAN4对应的VLANIF4的MAC地址、目的IP为10.1.2.2的报文。


4.Switch_1收到该报文后,根据Sub-VLAN和Super-VLAN的对应关系以及目的MAC判断进行三层转发,查三层转发表项没有找到匹配项,上送CPU查找路由表,得到下一跳地址为10.1.10.2,出接口为VLANIF10,并通过ARP表项和MAC表项确定出接口,把报文发送给Switch_2。


5.Switch_2根据正常的三层转发流程把报文发送给Server。


Server收到Host_1的报文后给Host_1回应,回应报文的目的IP为10.1.1.2,目的MAC为Switch_2上VLANIF20接口的MAC地址,回应报文的转发流程如下:


?Server给Host_1的回应报文按照正常的三层转发流程到达Switch_1。到达Switch_1时,报文的目的MAC地址为Switch_1上VLANIF10接口的MAC地址。


?Switch_1收到该报文后根据目的MAC地址判断进行三层转发,查三层转发表项没有找到匹配项,上送CPU,CPU查路由表,发现目的IP为10.1.1.2对应的出接口为VLANIF4,查找Sub-VLAN和Super-VLAN的对应关系,并通过ARP表项和MAC表项,知道报文应该从Sub-VLAN2的接口发送给Host_1。


?回应报文到达Host_1。


Sub-VLAN与其他设备的二层通信


Switch_1上配置了Sub-VLAN2、Sub-VLAN3和Super-VLAN4,Switch_1的IF_1和IF_2配置为Access接口,IF_3接口配置为Trunk接口,并允许VLAN2和VLAN3通过;


Switch_2连接Switch_1的接口配置为Trunk接口,并允许VLAN2和VLAN3通过。



从Host_1进入Switch_1的报文会被打上VLAN2的Tag。在Switch_1中这个Tag不会因为VLAN2是VLAN4的Sub-VLAN而变为VLAN4的Tag。


该报文从Switch_1的Trunk接口IF_3出去时,依然是携带VLAN2的Tag。


也就是说,Switch_1本身不会发出VLAN4的报文。就算其他设备有VLAN4的报文发送到该设备上,这些报文也会因为Switch_1上没有VLAN4对应的物理接口而被丢弃。


因为Switch_1的IF_3接口上根本就不允许Super-VLAN4通过。对于其他设备而言,有效的VLAN只有Sub-VLAN2和Sub-VLAN3,所有的报文都是在这些VLAN中交互的。


这样,Switch_1上虽然配置了VLAN聚合,但与其他设备的二层通信,不会涉及到Super-VLAN,与正常的二层通信流程一样,此处不再赘述。


03配置VLAN聚合示例


组网需求


某公司拥有多个部门且位于同一网段,为了提升业务安全性,将不同部门的用户划分到不同VLAN中,如图1所示,VLAN2和VLAN3属于不同部门。


各部门均有访问Internet需求,同时由于业务需要,不同部门间的用户需要互通。





配置思路


可以在SwitchB上部署VLAN聚合,将不同部门的VLAN聚合到SuperVLAN中,这样,不同部门的用户可通过SuperVLAN访问Internet。


同时,为使部门间用户互通,在SuperVLAN上部署ProxyARP功能。采用如下思路配置VLAN聚合:


1.在SwitchA和SwitchB上配置VLAN和接口,将不同部门用户划分到不同VLAN中,并透传各VLAN到SwitchB。


2.在SwitchB上配置Super-VLAN及其对应的VLANIF接口、上行路由,使不同部门的用户能够访问Internet。


3.在SwitchB上启用Super-VLAN的ProxyARP功能,使不同部门的用户间三层互通。


操作步骤


1.配置VLAN和接口,将不同部门用户划分到不同VLAN中,并透传各VLAN到SwitchB。


a.配置SwitchA


#配置接口GE0/0/1为Access类型。接口GE0/0/2、GE0/0/3、GE0/0/4的配置与GE0/0/1类似,不再赘述。


<HUAWEI>system-view

[HUAWEI]sysname SwitchA

[SwitchA]interface gigabitethernet 0/0/1

[SwitchA-GigabitEthernet0/0/1]port link-type access

[SwitchA-GigabitEthernet0/0/1]quit


#创建VLAN2并向VLAN2中加入GE0/0/1和GE0/0/2。


[SwitchA]vlan 2

[SwitchA-vlan2]port gigabitethernet 0/0/1 0/0/2

[SwitchA-vlan2]quit

#创建VLAN3并向VLAN3中加入GE0/0/3和GE0/0/4。

[SwitchA]vlan 3

[SwitchA-vlan3]port gigabitethernet 0/0/3 0/0/4

[SwitchA-vlan3]quit


#配置SwitchA连接SwitchB的接口,透传VLAN2和VLAN3到SwitchB。


[SwitchA]interface gigabitethernet 0/0/5

[SwitchA-GigabitEthernet0/0/5]port link-type trunk

[SwitchA-GigabitEthernet0/0/5]port trunk allow-pass vlan 2 3

[SwitchA-GigabitEthernet0/0/5]quit


b.配置SwitchB


#创建VLAN2、VLAN3、VLAN4、VLAN10,并配置SwitchB连接SwitchA的接口,使VLAN2和VLAN3透传到SwitchB。


<HUAWEI>system-view

[HUAWEI]sysname SwitchB

[SwitchB]vlan batch 2 3 4 10

[SwitchB]interface gigabitethernet 0/0/5

[SwitchB-GigabitEthernet0/0/5]port link-type trunk

[SwitchB-GigabitEthernet0/0/5]port trunk allow-pass vlan 2 3

[SwitchB-GigabitEthernet0/0/5]quit


2.配置Super-VLAN及其对应的VLANIF接口


#在SwitchB上配置Super-VLAN4,并将VLAN2、VLAN3加入到Super-VLAN4,作为其Sub-VLAN。


[SwitchB]vlan 4

[SwitchB-vlan4]aggregate-vlan

[SwitchB-vlan4]access-vlan 2 to 3

[SwitchB-vlan4]quit


#创建并配置VLANIF4,使不同部门的用户可通过Super-VLAN4访问Internet。


[SwitchB]interface vlanif 4

[SwitchB-Vlanif4]ip address 10.1.1.1 255.255.255.0

[SwitchB-Vlanif4]quit


3.配置上行路由


#在SwitchB上配置上行接口GE0/0/1,透传SwitchB与出口网关Router的互联VLAN。


[SwitchB]interface gigabitethernet 0/0/1

[SwitchB-GigabitEthernet0/0/1]port link-type trunk

[SwitchB-GigabitEthernet0/0/1]port trunk allow-pass vlan 10

[SwitchB-GigabitEthernet0/0/1]quit


#创建并配置VLANIF10,指定其IP地址为SwitchB与出口网关Router对接的IP地址。


[SwitchB]interface vlanif 10

[SwitchB-Vlanif10]ip address 10.10.1.1 255.255.255.0

[SwitchB-Vlanif10]quit


#在SwitchB上配置一条到出口网关Router的缺省静态路由,使用户能够访问Internet。


[SwitchB]ip route-static 0.0.0.0 0.0.0.0 10.10.1.2

说明:

还需要在出口网关Router上配置其与SwitchB对接的接口,指定其IP地址为10.10.1.2.


4.配置用户IP地址


分别为各用户配置IP地址,并使它们和VLAN4处于同一网段。

配置成功后,各部门用户可以访问Internet,但VLAN2的用户与VLAN3的用户间不可以相互Ping通。


5.配置ProxyARP


#在SwitchB的Super-VLAN4下配置ProxyARP,使不同部门的用户间三层互通。


[SwitchB]interface vlanif 4

[SwitchB-Vlanif4]arp-proxy inter-sub-vlan-proxy enable

[SwitchB-Vlanif4]quit


6.验证配置结果


配置完成后,VLAN2的用户与VLAN3的用户可以相互Ping通,且都可以访问Internet。


相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...