边界网关协议(BGP)用于通告,学习和选择全球Internet内的最佳路径。当两个ISP连接时,它们通常使用BGP交换路由信息。世界各地的ISP集体使用BGP交换Internet的路由表。而且企业有时会使用BGP与一个或多个ISP交换路由信息,从而使企业路由器能够学习Internet路由。
将BGP与常规IGP路由协议进行比较时,一个关键区别是BGP的健壮最佳路径算法。BGP使用该算法来选择最佳BGP路径(路由),其使用的规则远远超出了仅选择最低度量标准的路由。
这种更复杂且最佳路径的算法使BGP能够让工程师配置许多不同的设置,这些设置会影响BGP最佳路径选择,从而为路由器选择最佳BGP路由提供了极大的灵活性。
BGP基础
BGP,特别是BGP版本4(BGPv4),是当今流行的一种路由协议,被设计为外部网关协议(EGP)而不是内部网关协议(IGP)。因此,BGP的某些目标与IGP的目标不同,例如开放式最短路径优先(OSPF)或增强型内部网关路由协议(EIGRP),但某些目标保持不变。
首先,考虑BGP与各种IGP之间的相似性。BGP需要像IGP一样发布IPv4前缀。BGP还需要发布一些特定信息,以便路由器可以为给定前缀选择众多路由之一作为当前最佳路由。至于协议的机制,BGP在与邻居路由器交换拓扑信息之前先建立邻居关系。
接下来是差异。BGP不需要将邻居连接到同一子网。取而代之的是,BGP路由器使用路由器之间的TCP连接(端口179)来传递BGP消息,从而允许相邻路由器位于同一子网上或被多个路由器隔开。看到没有连接到同一子网的BGP邻居是相对常见的。
BGP与其他协议的最大区别可能是此路由协议如何选择最佳路由。BGP不仅使用整数度量标准来选择最佳路由,还使用了更复杂的过程,使用了称为BGP路径属性(PA)的各种信息,这些信息在BGP路由更新中交换,就像IGP度量标准信息一样。
下表总结了其中一些关键比较点。
BGP ASN和AS_SEQ路径属性
BGP将路径属性用于多种目的。PA定义有关通过网络的路径或路由的信息。一些BGP PA使用最佳路径算法描述了在选择最佳BGP路由时可能有用的信息。BGP除了选择最佳路径外,还将某些PA用于其他目的。默认情况下,如果未明确设置BGP PA,则BGP路由器在许多竞争路由中选择最佳路由时将使用BGP AS_PATH(自治系统路径)PA。
整数BGP ASN唯一标识一个认为自己独立于其他组织的组织。企业网络连接到Internet的每个公司都可以视为一个自治系统,并且可以为其分配BGP ASN。(IANA / ICANN还分配了全球唯一的ASN。)此外,每个ISP都有一个ASN,或者可能有多个,具体取决于ISP的大小。
当路由器使用BGP通告路由时,前缀/长度与一组PA关联,包括AS_PATH。与前缀/长度关联的AS_PATH PA列出了ASN,这些ASN将是使用BGP获悉的该前缀的端到端路由的一部分。从某种意义上说,AS_PATH包含如下信息:“如果使用此路径(路由),则该路径将通过此ASN列表。”
BGP使用AS_PATH执行两个关键功能:
- 根据最短的AS_PATH(列出的ASN的最少数量)为前缀选择最佳路由。
- 防止路由循环。
AS路径示例
下图仅显示每个ISP中的几个路由器,也没有显示两个公司的许多企业网络。但是,该图确实显示了足够的细节,以演示一些关键的BGP概念。
为了便于讨论,假设路由器之间的每条线代表正在运行的某种物理介质。每个路由器将使用BGP,并且每个路由器将与每个链路另一端的路由器形成BGP邻居关系。例如,ISP1的I1-2路由器将与路由器I1-1和I2-1具有BGP邻居关系。
考虑到这一点,请考虑下图,该图显示了针对其他ASN的前缀192.31.7.32/29的BGP更新的公告。该图显示了四个步骤,如下所示:
- 在ASN 12中,I2在ASN 12外部发布路由。因此,I2在发布路由时将其自己的ASN(12)添加到AS_PATH PA。
- 当在ASN 2外部发布路由时,ASN 2内部的路由器在发布路由时将其自己的ASN(2)添加到AS_PATH PA。他们的广告AS_PATH为(12,2)。
- ASN 3内的路由器I3-1先前已通过AS_PATH(12,2)从ASN 2了解了192.31.7.32/29的路由。因此,I3-1在将其自己的ASN(3)添加到AS_PATH之后将路由发布到ASN 1,从而AS_PATH为(12,2,3)。
- 同样,位于ASN 1中的路由器I1-1将路由通告给ASN3。由于ASN 3是不同的ASN,因此I1-1将其自己的ASN(1)添加到AS_PATH PA,以便AS_PATH列出ASN 12、2和1。
现在,从细节上退后一步,考虑ASN中路由器共同学习的两条替代路由:
- 192.31.7.32/29,AS_PATH(12,2)
- 192.31.7.32/29,AS_PATH(12,2,3)
由于BGP路径选择算法使用最短的AS_PATH,因此假设没有其他PA被操纵,ASN 1中的路由器将使用这两个路径中的第一个,然后将数据包发送到ASN 2,而不使用通过ASN 3的路径。 ,因此请注意,从ASN 1到ASN 11的广告列出了一个AS_PATH,它反映了ASN 1内部路由器的最佳路径选择,并在最佳路由的AS_PATH末尾添加了ASN 1(12 ,2,1)。
BGP路由器还使用AS_PATH中列出的ASN防止路由循环。当BGP路由器接收到更新,并且路由公告列出具有其自己的ASN的AS_PATH时,路由器将忽略该路由。这是因为该路由已经通过本地ASN发布;相信路由然后进一步通告它可能会导致路由循环。
内部和外部BGP
BGP定义了两类邻居(对等体):内部BGP(iBGP)和外部BGP(eBGP)。这些术语使用单个路由器的观点,这些术语指的是BGP邻居是在同一ASN(iBGP)还是在不同ASN(eBGP)中。
BGP路由器的行为根据对等体(邻居)是iBGP还是eBGP对等体而在几种方式上有所不同。区别包括关于在两个路由器成为邻居之前必须满足的规则,关于BGP最佳路径算法选择最佳路由的规则不同,甚至关于路由器如何更新BGP AS_PATH PA的规则也不同。
向eBGP对等体通告时,BGP路由器会更新AS_PATH PA,但向iBGP对等体通告时不会这样做。例如,下图显示了与图1相同的设计和相同的路由公告。但是,在这种情况下,所有BGP连接都被列为iBGP或eBGP。
该图突出显示了从ASN 12到通过ASN 2和3的较低路径的路由通告。请注意,在步骤1,向IBGP对等体通告的路由器I2将其自己的ASN添加到AS_PATH。在步骤2,路由器I2-1向iBGP对等体(I2-2)通告,因此它不会将其自己的ASN(2)添加到AS_PATH。然后,在步骤3中,路由器I2-2将自己的ASN(2)添加到AS_PATH,然后再将更新发送给eBGP对等体I3-2,依此类推。
公共和私人ASN
为了使Internet使用BGP正常工作,IANA就像使用IP地址前缀一样管理ASN的分配。必须将ASN分配为唯一值的一个关键原因是,如果ASN被复制,则BGP环路阻止过程实际上会阻止Internet的某些部分了解路由。
例如,考虑下图,该图具有与前几张图相同的设计,但是这次具有重复的ASN。
在此图中,ISP1和公司1都使用ASN12。该示例的BGP更新如图2和3所示开始,其中公司1发布了其前缀。ISP1中的路由器接收BGP更新,该更新列出了公司1使用的相同前缀,但是两个更新都列出了包含ASN 12的AS_PATH。
因为ISP1认为它使用ASN 12,所以ISP1认为这些BGP更新应作为BGP环路预防过程的一部分而被忽略。结果,ISP1的客户无法到达公司1中路由器通告的前缀。
为防止此类问题, IANA 控制ASN编号空间。使用与IPv4地址相同的通用过程 ,可以将ASN分配给不同的组织。16位BGP ASN表示十进制范围为0到65,535。
前面的表格显示了IANA当前ASN分配约定的一些细节。
专用ASN允许AS内的路由器参与BGP,同时使用与许多其他组织相同的ASN。通常,在AS仅连接到另一个ASN的情况下,AS可以使用专用AS。
在某些情况下,也可以使用专用ASN连接到多个ASN。原因是只有一个连接点到另一个ASN,在BGP拓扑中就不会在该点发生环路,因此在该网络的该部分不再需要唯一的ASN。
由于BGP最佳路径算法背后的逻辑,加上BGP仅通告给定前缀的最佳路径,因此无法发生环路。
注册 ASN
我找了某个 LIR 注册的 APNIC 的 ASN ,下号用时 3 个工作日。
需要提供的信息有这些(带有 [保密]
标签的是非公开信息,只有你的 LIR 和 APINC 会知道):
- [保密] 身份证明材料
- 主标识
- 联系人邮箱
- noc 邮箱
- abuse 邮箱
- 国家
- 联系人地址
- 联系人姓名
- 联系人电话
- ASN 的标识
- ASN 的全名
- ASN 所属国家
- [保密] 两个上游 ASN
- [保密] ASN 将要部署在的物理位置
然后等了 3 个工作日,我的 ASN 申请终于通过审核并下号了。
需要注意的是 APNIC 每半年会向联系人邮箱发送一封验证邮件,所以邮箱需要保持畅通,并且及时查看新邮件。
申请 Vultr 的 BGP 广播功能
Vultr 的 BGP 广播功能可以称得上是「新手友好」的了。Vultr 良好的过滤系统保证了一般情况下即使发送了错误的路由表也不会漏到公网去,不怕搞炸,方便学习时使用。
点击 https://my.vultr.com/bgp/ 进入 Vultr BGP 广播功能的开通页面。
点击页面中的 Get Started 进入 BGP 开通申请页面。
- 将 I have my own IP space 和 I have my own ASN 设置为 YES 。
- 在 My ASN 处填写 ASN (不含
AS
前缀)。 - 在 BGP Password 处填写你想要的 BGP 密码。
- 在 IP Prefixes 处填写你的 IP 前缀(CIDR 格式)。
- Routes we shoule send you 选择 Full Table 。
- LOA 按照下方提供的模板照抄即可。
然后点击 Setup 即可。
LOA 模板
提交完毕之后会出现如图所示的界面,点击 Start 即可开始验证进程。
以 AS141776 的验证为例,选择好接收验证邮件的邮箱,然后点击 Send 即可。
点击邮箱里的链接即可(第一个是允许,第二个是拒绝)
验证成功后的提示。
之后等待客服开通即可。
由于我是在晚上申请的 Vultr BGP 服务,所以几分钟就开通好了。
之后不要忘记去控制台重启实例哦~
使用 BIRD2 广播 IP
一些注意事项
拆分 IP 段
由于我一下子用不了那么多 IP ,所以我决定把我的 /44
拆分成几个 /48
来用。
如果不涉及 whois 信息的修改操作,那么只需要修改一下 bird 的配置分开广播即可。
APNIC 修改 whois 信息的流程可以参考 Sending updates by email - APNIC 页面上的指引发送邮件。
网络交换中心(Internet Exchange)
加 IX 的操作流程和 Peer 差不多,注意只发送自己和自己下游(如果有)的路由,不能把上游发来的路由也塞进去,否则会被断开连接。