任何组织中最关键的网络链接之一就是与互联网的链接。当互联网建立起来(并快速响应)时,用户会感到很高兴。当互联网中断时,您会很快听到有关此问题的消息。

许多组织已经将互联网确定为绝不应该停机的重要资源。结果,冗余的Internet连接被配置为有助于确保始终有至少一个Internet连接。

在这篇文章中,我们将考虑具有使用边界网关协议(BGP)路由的冗余Internet连接的网络的拓扑。 BGP在这里将做两件事:学习Internet路由表,并向Internet通告可公开访问的本地网络。

为了使以前从未使用过BGP的人尽可能地简单,我们将使用一台互联网路由器来完成。

但是在研究设计之前,让我们仔细考虑一些与冗余互联网连接相关的重要点。

  1. 考虑第二个连接的物理电缆路径。
    如果可以,请在与建筑物不同的位置运行辅助Internet连接,然后通过与现有连接不同的路径将其路由到数据中心。这样可以确保电缆切断不会同时拉出两个链接。

    还请询问您当地的电信公司,他们是否可以使用城镇中的其他光纤路径将辅助连接路由到其他中央办公室。尽管答案可能是否定的,但还是值得提出这个问题。

  2. 如果可以帮助,请避免从同一ISP获得两个连接。
    如果您的ISP日子不好过,那么您不希望该问题影响到您的两个连接。理想情况下,您需要来自两个完全不同的运营商的互联网服务。如果一家运营商确实是具有独特基础架构的完全不同的运营商,那么有问题的一家运营商就不会影响另一家。
  3. 考虑是否需要提供商独立(PI)IP地址空间。
    大多数具有单个Internet连接的公司将使用其ISP为其分配的IP地址块。可以使用双归属作为理由,向您的地区注册中心索取IP地址的PI块,但我的建议是不要打扰。一些市场完全没有IPv4地址。在撰写本文时,受ARIN管辖的北美市场仅剩933/24 IP块。 (在这里检查 以查看ARIN IPv4可用性的当前状态。)此外,您可以宣布ISP通过其他ISP分配给您的/ 24或更大的块。
  4. 您需要一个用于标识网络的BGP自治系统号(ASN)。
    BGP将ASN视为分组在一起的路由器的集合。当您在全局Internet BGP路由表中宣布网络时,将包括您的原始ASN。 ARIN可以为您分配一个ASN 名义费用。

    请注意,如果您要从与主连接相同的运营商处获得辅助Internet连接,则无需使用“真实” ASN即可将路由器通告给运营商。您将可以使用您喜欢的任何私有ASN(如 RFC 6996,保留范围为64512–适用于16位ASN的65534或4200000000–32位ASN的4294967294。

完成初步讨论后,让我们开始设置BGP提要和辅助连接。

双ISP到具有BGP的单个路由器

我们将从参考图开始。在此实验室设置中,内部网络通过防火墙与Internet隔离。防火墙连接到分配了自治系统编号54321的Internet边缘路由器。(请勿使用ASN 54321或本文中的其他任何AS号。它们都属于真实公司。我在这里使用它们只是为了说明目的。)

互联网边缘路由器具有冗余连接。一个连接到达AS 7018中的ISP,该ISP宣布以12.12.x.x开头的网络。另一个连接到达AS 4323中的ISP,后者宣布以102.102.x.x开头的网络。在互联网上的某个地方,我们还有另一个使用AS 12345的虚拟ISP,宣布了1.23.45.1/32主机路由。

冗余Internet连接-图1

如果您不熟悉BGP和自治系统,这似乎有些令人困惑。路由器不通过分配了实际IP地址的链接与其他路由器通信吗?为什么要麻烦显示AS号?

好吧,请记住我之前提到的观点。从BGP的角度来看,是的,它了解特定的IP邻居,我们将在稍后说明。但是从全局的角度来看,BGP知道AS号。

要了解BGP如何做出“最佳路径”决策,网络管理员必须从AS的角度可视化BGP关系。 BGP认为流量在内部(在同一AS的路由器之间)和在外部(从一个AS到另一个AS)之间流动,但它不知道其他自治系统中路由器的详细信息。这就是为什么我像以前那样绘制参考图。今天,我们主要关注外部BGP。

设置外部BGP邻居:绝对基础

让我们看一下互联网边缘路由器上用于连接两个ISP连接的Cisco IOS代码。我将逐步解释每个命令。

冗余Internet连接-图2

INT-EDGE-RTR#show run | section router bgp
! Start the BGP process, and place the router in autonomous system 54321.
router bgp 54321
! When a BGP neighbor goes up or down, log that change. This is helpful in diagnosing BGP problems.
 bgp log-neighbor-changes
! BGP does not dynamically discover neighbors as is possible with interior gateway routing protocols like EIGRP or OSPF. Neighbors must be specifically defined. In addition, both BGP routers on either end of the connection must be explicitly configured for the connection to come up. It’s not enough for 一 side of the connection to have a neighbor statement.
! This neighbor statement tells the router to attempt to bring up a BGP session with a router using IP address 10.12.12.1 and located in AS 7018.
 neighbor 10.12.12.1 remote-as 7018
! This neighbor statement tells the router to attempt to bring up a BGP session with a router using IP address 10.102.102.1 and located in AS 4323.
 neighbor 10.102.102.1 remote-as 4323
INT-EDGE-RTR#

假设ISP已配置其BGP连接的一侧,则BGP路由器将成为对等体。完成此操作后,BGP对等状态应报告“已建立”状态。除“已建立”以外的任何状态均表示BGP会话未启动。会话可能正在进行中,或者可能遇到问题。

! Here, we’re asking our internet edge router to show us our BGP neighbors, but to only include lines with the words “neighbor” or “state” in them. That reduces the output to just what we’re looking for — in this case, whether or not our neighbors are in an established state.
INT-EDGE-RTR#show ip bgp neighbors | include neighbor|state
BGP neighbor is 10.12.12.1,  remote AS 7018, external link
  BGP state = Established, up for 16:39:43
  BGP table version 101, neighbor version 101/0
Connection state is ESTAB, I/O status: 1, unread input 通过 tes: 0
BGP neighbor is 10.102.102.1,  remote AS 4323, external link
  BGP state = Established, up for 16:25:40
  BGP table version 101, neighbor version 101/0
Connection state is ESTAB, I/O status: 1, unread input 通过 tes: 0
INT-EDGE-RTR#

BGP邻居状态的另一个快速检查是“ show ip bgp summary”命令。在此命令输出的底部附近,将报告BGP邻居的状态。

INT-EDGE-RTR#show ip bgp summary

... output skipped ...

! Here, we see that each neighbor has been up for over 16 hours. Up (established) is implied because there’s a number of prefixes received — 12. If the BGP neighbor was down, the connection state would be reported instead of number of prefixes received. 
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.12.12.1      4         7018    2224    2202      101    0    0 16:43:27       12
10.102.102.1    4         4323    2198    2167      101    0    0 16:29:24       12
INT-EDGE-RTR#

! Now, let’s compare output if 一 of the BGP neighbors is down.
INT-EDGE-RTR#show ip bgp summary

... output skipped ...

Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.12.12.1      4         7018    2234    2213      111    0    0 16:47:31       21
10.102.102.1    4         4323       0       0        1    0    0 00:00:12 Idle
INT-EDGE-RTR#

检查BGP路由和属性

从BGP获悉时,路由表中的路由是什么样的?它们看起来与其他任何路由一样,但是用“ B”表示,表示它们是从BGP路由过程中学到的。

接下来是“ show ip route”命令的编辑输出,因此一旦他们了解了我们想象的互联网路由,便可以看到BGP路由到互联网边缘路由器的样子。请注意,以12.12开头的路由来自AS 7018中的BGP邻居,而以102.102开头的路由来自AS 4323中的BGP邻居。

INT-EDGE-RTR# show ip route

... output skipped ...

      1.0.0.0/32 is subnetted, 1 subnets
B        1.23.45.1 [20/0] via 10.12.12.1, 16:54:11
      12.0.0.0/24 is subnetted, 8 subnets
B        12.12.1.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.2.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.3.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.4.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.5.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.6.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.7.0 [20/0] via 10.12.12.1, 16:58:22
B        12.12.8.0 [20/0] via 10.12.12.1, 16:58:22
      102.0.0.0/24 is subnetted, 8 subnets
B        102.102.1.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.2.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.3.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.4.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.5.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.6.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.7.0 [20/0] via 10.102.102.1, 00:02:48
B        102.102.8.0 [20/0] via 10.102.102.1, 00:02:48
INT-EDGE-RTR#

但是,BGP邻居之间交换的信息不仅仅是IP前缀信息。除了前缀(您可能将其视为路由)之外,还携带有关该前缀的许多BGP属性。

就我们今天的目的而言,最有趣的一种是AS路径。要查看这些BGP属性,请执行“ show ip bgp”。要查看一个特定前缀的BGP属性,请执行“ show ip bgp [prefix]”,这是我们在以下示例中所做的。

INT-EDGE-RTR#show ip bgp 12.12.1.0
BGP routing table entry for 12.12.1.0/24, version 50
! There are two paths 通过  which 12.12.1.0/24 is reachable, according to BGP. In this output, path #2 is the best path. Why? Path #2 is the fewest number of AS hops away.
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     2
  Refresh Epoch 1
! There are three autonomous systems to traverse if this path is followed: 4323, 12345, and 7018.
  4323 12345 7018
    10.102.102.1 from 10.102.102.1 (102.102.1.1)
      Origin IGP, localpref 100, valid, external
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
! There’s only 一 autonomous system to traverse if this path is followed: 7018. Therefore, this is chosen as the better path. The other path can be used if this path is no longer available to reach 12.12.1.0/24.
  7018
    10.12.12.1 from 10.12.12.1 (12.12.1.1)
      Origin IGP, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0
INT-EDGE-RTR#

至此,我们已经有了一个互联网边缘路由器,可以通过单独的ISP与互联网建立两个连接。 Internet边缘路由器正在学习Internet路由表,我们在此处使用来自12.x和102.x网络的一些路由进行了模拟,以使我们对路由器的外观有所了解。

请注意,如果您接受了两个ISP的整个路由表,则路由器中将需要大量RAM来处理负载。当前的IPv4 Internet路由表大约有509,000条IPv4路由(如果您正在运行IPv6,则为20,000条IPv6路由)。当您加载多个完整的BGP提要时,路由器内存需求将成比例增加。但是,就其价值而言,我已经将双互联网,完整的BGP馈入了具有2.5GB RAM的Cisco 2911,并具有足够的存储空间。

宣布通往公共互联网的路线

到目前为止,我们已经完成了从网站到互联网的访问。但是,互联网如何回到我们的网站呢?与任何路由协议一样,我们需要向BGP宣布我们负责的公共网络。而且,与许多路由协议一样,这可以通过 网络声明.

网络声明本身并不是神奇的。您的路由器实际上必须知道如何为网络声明中列出的路由传递流量,否则路由器的BGP进程不会宣布该路由。可以知道该路由,因为它是直接连接的,是通过静态路由获悉的,还是通过其他路由协议获悉的。

这是我们的“ router bgp”段落的第二部分,这次添加了“ network”语句。

INT-EDGE-RTR#show run | section router bgp
router bgp 54321
 bgp log-neighbor-changes
 network 5.43.21.1 mask 255.255.255.255
 neighbor 10.12.12.1 remote-as 7018
 neighbor 10.102.102.1 remote-as 4323
INT-EDGE-RTR#

尽管BGP可以用来宣布主机路由(如此处的示例所示),但是请理解,互联网骨干路由器不会将网络接受到小于/ 24的BGP表中。为什么?由于全局Internet路由表的大小。在超过500,000条路线上,它已经很大了!创建Internet冗余网络设计时,请牢记此限制。

不要成为传输BGP路由器!

要验证将哪些路由发布给BGP邻居,我们可以使用“ show ip bgp neighbors” advertised-routes”命令。请仔细查看下面我们宣布的路线的修改后列表。我们有一个重要的问题,需要理解和解决。

INT-EDGE-RTR#show ip bgp neighbors 10.12.12.1 advertised-routes
... output skipped ...

     Network          Next Hop            Metric LocPrf Weight Path
 *>  1.23.45.1/32     10.12.12.1          0 7018 12345 i
 *>  5.43.21.1/32     0.0.0.0             0 32768 i
 *>  12.12.1.0/24     10.12.12.1          0 7018 i
 *>  12.12.2.0/24     10.12.12.1          0 7018 i
 *>  12.12.3.0/24     10.12.12.1          0 7018 i
 *>  12.12.4.0/24     10.12.12.1          0 7018 i
 *>  12.12.5.0/24     10.12.12.1          0 7018 i
 *>  12.12.6.0/24     10.12.12.1          0 7018 i
 *>  12.12.7.0/24     10.12.12.1          0 7018 i
 *>  12.12.8.0/24     10.12.12.1          0 7018 i
 *>  102.102.1.0/24   10.102.102.1        0 4323 i
 *>  102.102.2.0/24   10.102.102.1        0 4323 i
 *>  102.102.3.0/24   10.102.102.1        0 4323 i
 *>  102.102.4.0/24   10.102.102.1        0 4323 i
 *>  102.102.5.0/24   10.102.102.1        0 4323 i
 *>  102.102.6.0/24   10.102.102.1        0 4323 i
 *>  102.102.7.0/24   10.102.102.1        0 4323 i
 *>  102.102.8.0/24   10.102.102.1        0 4323 i

这里的问题是我们 应该 确切地宣布 路由到我们的BGP对等体。该路线是我们负责的路线:本例中为5.43.21.1/32。但是我们可以看到我们实际上是在做广告 所有 我们学到的BGP路由返回给对等方。哎呀!

如果您的Internet边缘路由器是中转Internet路由器,充当两个ISP之间的对等点,则通告所有BGP路由将是适当的。但是您不想成为转接路由器。为您自己和您的组织保留Internet管道,而不是作为可能在两个ISP之间传播的任何旧流量的途径。

您的ISP也不希望您充当中转站,因为这限制了他们控制其互联网流量的能力。实际上,您的ISP会过滤您发送给它们的BGP公告,以严格执行其网络设计,但您也应该过滤所发送的BGP公告。

筛选的最简单方法是使用您要声明的路由创建前缀列表,并将该前缀列表应用于BGP邻居语句。

! Create a prefix-list that contains only the routes we 应该 be announcing into BGP.
INT-EDGE-RTR#show run | section ip prefix
ip prefix-list ANNOUNCE-ONLY-THESE seq 5 permit 5.43.21.1/32

! Apply the prefix-list as a filter to the outbound announcements to our BGP neighbors. You can set up different filters for different neighbors. In this case, we’re using the same filter on both. Note that when applying these filters, you might need to “clear ip bgp neighbor ” to cause the filter to take effect. It depends on your version of IOS. Even if you don’t need to clear the BGP session, the filter might take a minute or two to take effect. In other words, this isn’t an instant change, and might actually be disruptive when applying or updating the filter.
INT-EDGE-RTR#show run | section router bgp
router bgp 54321
 bgp log-neighbor-changes
 network 5.43.21.1 mask 255.255.255.255
 neighbor 10.12.12.1 remote-as 7018
 neighbor 10.12.12.1 prefix-list ANNOUNCE-ONLY-THESE out
 neighbor 10.102.102.1 remote-as 4323
 neighbor 10.102.102.1 prefix-list ANNOUNCE-ONLY-THESE out
INT-EDGE-RTR#

现在已经应用了过滤器(我们已经等了几分钟),我们只看到应该宣布要发布的路由。

INT-EDGE-RTR#show ip bgp neighbors 10.12.12.1 advertised-routes

... output skipped ...

     Network          Next Hop            Metric LocPrf Weight Path
 *>  5.43.21.1/32     0.0.0.0                  0         32768 i

Total number of prefixes 1
INT-EDGE-RTR#

好消息! Internet边缘路由器不再试图成为传输BGP路由器。完成此步骤后,我们现在已经配置了BGP,可以正常工作的冗余Internet连接。

如果您有兴趣进一步阅读该主题,我发现这些资源很有帮助。