BGP作为一种去中心化的分布式路由协议,其本身并不会产生路由条目,需要将设备学习到的以及直连的路由通告或者引入进BGP协议才能发布路由条目。这句话怎么理解呢?我以我自己的理解来举个例子:
中国电信从APNIC分配到某个IP地址段,例如180.166.0.0/16。
中国电信再将180.166.0.0/16拆分为180.166.0.0/24、180.166.1.0/24、180.166.2.0/24……并分配给下一级的ISP,例如上海电信分到了180.166.169.0/24。
上海电信再将180.166.169.0/24这个网段分配给上海市浦东新区陆家嘴地段的企业用户使用。这个过程中还会进一步缩小子网的大小,以避免IP地址的浪费。例如将180.166.169.8/29分配给陆家嘴的XX企业使用,其中180.166.169.8是网络号,不可使用;180.166.169.15是广播号,不可使用;可使用的是180.166.169.9至180.166.169.14共6个IP地址,电信的网关使用180.166.169.9这个地址,剩下的180.166.169.10至180.166.169.14共5个地址由XX企业自己安排使用。
这里假设XX企业使用180.166.169.11这个地址给一台Web服务器使用,那么我们在浏览器输入180.166.169.11或者xx.com(假设为XX企业的域名,并解析到180.166.169.11)就可以访问XX企业的Web网页了(大陆环境下,还需要将IP地址申请ICP备案,才可以开通80端口,否则只能以180.166.169.11:1234来访问)。那么,我们电脑的访问请求是怎么到达XX企业的Web服务器呢?或者我们不是电信的用户是联通的用户呢?又或者我们干脆是在国外呢?
这里就涉及到了自治区域的概念,IANA将全球的互联网划分为5个片区,咱们中国所属于APNIC的片区当中,APNIC中包含很多的亚太区域国家和地区,每个国家和地区又包括很多的运营商(例如中国就包括中国电信、中国联通、中国移动、中国网通、教育网、科技网等等)。
例如B国的一位网民(PC2),从R5路由器(B国的某ISP)下接入互联网,PC2在浏览器输入180.166.169.11后,访问请求发给了R5,R5再将数据包传给ASN3333这个自治区域的出口设备R6,R6发现目的IP为180.166.169.11可以匹配180.166.0.0/16这条路由,180.166.0.0/16这条路由位于ASN1111,于是R6把数据包再传给ASN1111的出口设备R2,至此数据包已经开始跨AS传播了(EBGP路由)
ASN1111的R2查找路由表发现180.166.169.11这个目的IP可用被180.166.169.0/24这个路由条目匹配,并且是自己所属的区域(ASN1111以内,即IBGP路由),于是把数据包转发给R10(R10可能是上海电信的出口设备),R10再查找路由表,发现180.166.169.11这个IP地址由自己分给了陆家嘴地区的XX企业,于是直接将数据包转发给XX企业的网关设备Model,网关设备Model再将数据包直接传给XX企业的Web服务器。
至此,访问请求数据包就完成了单向的传输,XX企业的Web服务器在收到访问请求后,如果判断该访问合法(例如不是PC2使用的公网IP不是黑名单用户),那么XX企业的Web服务器将按照与上面相反的路径返回数据给PC2。
在上面这段关于IP路由传递的介绍中,我们看到不同的设备上关于IP地址段的路由条目的大小是不一样的,因为不同级别的运营商设备上,可能存在几万、几十万甚至上百条路由条目,而不可能仅仅存在180.166.0.0/16这一个路由条目,所以就需要将路由条目聚合,以达到高效转发的目的,以及减小核心设备的处理运算任务。
在BGP的路由聚合中,有自动聚合和手动聚合之分,这里介绍一种在实际项目中很少启用的自动路由聚合功能。那么你可能会说:既然在实际项目中很少启用,还有必要介绍吗?我认为非常有必要,至少我们得知道自动聚合这个工具的存在,以及它的一些特性,否则在Troubleshooting的时候,你就发现不了故障局点。
下图的实验场景,3个AS分别是AS65111、AS65222、AS65333,使用私有ASN来测试。
2009年1月份之前,只能使用最多2字节(即2*8=16bit)长度的ASN,即2^16-1=65535个。其中:
1至64511为公有ASN,公有ASN可用于公网间不同AS之间互连互通;
64512至65535为私有ASN,私有ASN不能用于公网,类似于私有IP地址,只能在AS内部使用。
2009年1月份之后,IANA决定使用4字节长度ASN,范围是1至4294967295。
使用物理接口建立EBGP邻居
R1
sys
sys ASN65111-R1
int loo0
ip add 1.1.1.1 24
int loo1
ip add 11.11.11.11 24
int g0/0/1
ip add 100.0.12.1 30
bgp 65111
rou 1.1.1.1
peer 100.0.12.2 as-n 65222
R2
sys
sys ASN65222-R2
int loo0
ip add 2.2.2.2 24
int loo1
ip add 22.22.22.22 24
int g0/0/1
ip add 100.0.12.2 30
int g0/0/2
ip add 200.0.23.1 30
bgp 65222
rou 2.2.2.2
peer 100.0.12.1 as-n 65111
peer 200.0.23.2 as-n 65333
R3
sys
sys ASN65333-R3
int loo0
ip add 3.3.3.3 24
int loo1
ip add 33.33.33.33 24
int g0/0/2
ip add 200.0.23.2 30
bgp 65333
rou 3.3.3.3
peer 200.0.23.1 as-n 65222
查询BGP邻居关系
可以看到R2与分属于不同AS的R1和R3都建立了BGP邻居关系。
开启BGP自动路由聚合功能(默认是关闭的)
在R1、R2、R3的BGP进程下,分别使能BGP路由自动聚合功能,Summary automatic默认是关闭的。
并且,BGP的自动路由聚合,只能聚合通过路由引入的路由条目,通过Network宣告的路由条目自动聚合不了。
通告路由进入BGP中
在R3设备的BGP进程下,使用Network命令将其所连的33.33.33.0/24这个网段通告到BGP进程下,那么随即R1和R2就应该能收到R3的路由条目更新。
在R1和R2上查看BGP路由表
显示33.33.33.0没有被聚合,是通过network通告的。
R2上也显示33.33.33.0没有被聚合,是通过network通告的。
在R1上使用路由引入再次测试
使用Ip-Prefix前缀列表筛选出11.11.11.0/24这个IP段,并引入到BGP协议中
Ip-Prefix是一款筛选工具,用于按照指定条件过滤路由条目,实现路由条目的精确引入。
在R2和R3上查看BGP路由表
可以看到R2的BGP表中,出现了11.0.0.0且没有掩码信息。
R3也可以看到11.0.0.0,同样没有掩码信息。
这正是聚合后的一个A类自然网络,在实际项目中,很少启用自动路由聚合功能。
本文由IEClub原创首发,原文标题《BGP自动路由聚合》,原文链接https://ieclub.net/protocol/2021/01/12/1818.html,转载请注明出处。