章节大纲

  •         自治系统(AS)是 BGP 的基本单位。stubAS 是不向其他 AS 提供中转服务的 AS 类型。大多数终端用户都是 stub AS,包括大学、组织和大多数公司。另一种类型的 AS 称为中转 AS。他们为其他 AS 提供中转服务,他们是互联网服务提供商。
            在这个任务中,我们将专注于 stub 自治系统,看看它们如何与其他自治系统进行互连。对于这种类型的自治系统,我们可以通过了解其 BGP 配置来获得对 BGP 工作方式的初步了解。学生在开始此任务之前应先阅读 章节 1-7

      •         AS-155 是一个 stub 自治系统,它有一个网络 (10.155.0.0/24) 和一个 BGP 路由器(10.155.0.254)。请在该路由器容器上获取终端,并研究 /etc/bird/bird.conf  中的 BGP 配置,然后完成以下任务。

               • 任务 1.a.1:从 BGP 配置文件中识别AS-155与其他哪个AS进行互连。目前可以忽略配置中的过滤部分。以下是配置文件中的一个条目。

        protocol bgp u_as2 {
            ipv4 {
                table t_bgp;
                import filter {
                    bgp_large_community.add(PROVIDER_COMM);
                    bgp_local_pref = 10;
                    accept;
                };
                export where bgp_large_community ~ [LOCAL_COMM, CUSTOMER_COMM];
                next hop self;
            };
            local 10.102.0.155 as 155;
            neighbor 10.102.0.2 as 2;
        }

               • 任务 1.a.2:AS-155 与其他多个 AS 进行互连,因此如果与其中一个 AS 的连接中断,它仍然可以继续连接到互联网上。请设计一个实验来证明这一点。可以从图中(见图2)或使用 birdc 命令(参见以下示例)来启用/禁用 BGP 会话。在您的实验中,请展示当特定的 BGP 会话被禁用/启用时路由表的变化。(您可以使用 "ip route" 来查看路由表的内容。)

        root@0c97d3ade85a / # birdc show protocols
        BIRD 2.0.7 ready.
        Name       Proto      Table      State  Since         Info
        u_as2      BGP        ---        up     14:51:40.447  Established
        u_as4      BGP        ---        up     14:51:39.500  Established
        
        root@0c97d3ade85a / # birdc disable u_as2  
        BIRD 2.0.7 ready.
        u_as2: disabled
        
        root@0c97d3ade85a / # birdc show protocols
        BIRD 2.0.7 ready.
        Name       Proto      Table      State  Since         Info
        u_as2      BGP        ---        down    16:32:14.883
        u_as4      BGP        ---        up      14:51:39.500 Established
      •         本任务的目的是了解 BGP  UPDATE 消息。在 AS-150 的 BGP 路由器上运行 tcpdump,使用它来监视 BGP 流量。此命令将把捕获的BGP数据包保存到 /tmp/bgp.pcap 中。

        # tcpdump -i any -w /tmp/bgp.pcap "tcp port 179"

                您的任务是通过 AS-155 的 BGP 路由器做一些事情来触发至少一个 BGP 路由撤销和一个 BGP路由通告消息。这些 UPDATE 消息会被 tcpdump 命令捕获并存储在 bgp.pcap 中。使用 "docker cp"命令将此文件复制到主机计算机,然后将其加载到 Wireshark 中。选择一个路由通告消息和一个路由撤销消息,提供对这两个消息的解释。屏幕截图应在实验报告中提供。

      •         当 BGP 路由器向其邻居发送路由时,并非会发送所有已知的路由。哪些路由被发送取决于许多因素,例如邻居的位置、邻居之间的业务关系以及策略。为了帮助 BGP 路由器做出这些决策,需要在每条路由上附加一些额外信息,预定义的路由属性无法包含此类信息。BGP 大型社区正是为此创建的。本任务的目标是在仿真实验中了解如何使用它来反映邻居之间的业务关系。

                假设由于某些技术问题,AS-4 与 AS-156 的连接中断了。我们可以通过关闭 AS-4 和 AS-156 之间的 BGP 互连来模拟此情况。由于 AS-4 是 AS-156 唯一的服务提供商,因此这实际上就将 AS-156 与互联网断开了。如果从 AS-156 的某个主机ping 另一个主机,可以看到以下结果(请勿在 BGP 路由器上运行 ping,在主机上做):

        // 在 10.156.0.72 上
        # ping 10.155.0.71
        PING 10.155.0.71 (10.155.0.71) 56(84) bytes of data.
        64 bytes from 10.155.0.71: icmp_seq=1 ttl=62 time=14.6 ms
        64 bytes from 10.155.0.71: icmp_seq=2 ttl=62 time=0.363 ms
        # ping 10.161.0.71
        PING 10.161.0.71 (10.161.0.71) 56(84) bytes of data.
        From 10.156.0.254 icmp_seq=1 Destination Net Unreachable
        From 10.156.0.254 icmp_seq=2 Destination Net Unreachable
        From 10.156.0.254 icmp_seq=3 Destination Net Unreachable

                我们看到 10.155.0.71 仍然可达,因为它属于 AS-155,AS-155 和 AS-156 还是互连的。然而,10.161.0.71(归属于 AS-161)则无法访问,因为没有人会为 AS-156 路由该包。AS-156 仍然与 AS155 进行互连,并且 AS-155 直接连接到互联网,那么为什么 AS-156 不能通过 AS-155 访问互联网呢?这是因为是否转发另一个自治系统中的流量取决于双方之间的业务关系。

                在 AS-156 和 AS-4 试图解决问题的同时,AS-156 找到了 AS-155,同意支付给 AS-155 一定的费用,暂时通过 AS-155 访问互联网。这需要对 AS-155 的 BGP 路由器进行一些更改,以便 AS-155 可以临时为 AS-156 提供中转服务。请参阅 Section 9 完成此任务,并确保运行以下命令重新加载 BIRD配置。

        # birdc configure
        BIRD 2.0.7 ready.
        Reading configuration from /etc/bird/bird.conf
        Reconfigured
        

      •         AS-180 已包含在仿真器中。它连接到 IX-105 互联网交换所,但不与任何人互连,因此未连接到互联网上。在本任务中,学生们需要完成AS-180的BGP路由器及其所有相关的BGP路由器的配置,以实现以下目标:

               • 和AS-171 进行互连,使得他们可以直接互相通信。

               • 和AS-2 和AS-3 这两个中转自治系统进行互连,以便它们可以通过这些中转到达其他目的地。

        Shell 脚本。   在本任务中,我们需要修改多个 BIRD 配置文件。逐个进入容器进行更改不是太方便,我们可以将所有 BIRD 配置文件从容器复制到主机虚拟机,在该主机上进行编辑,然后将它们复制回容器。我们在 task1 文件夹中包含了两个 shell 脚本,以简化此过程:
               • import_bird_conf.sh : 获取所有所需的 BIRD 配置文件。如果当前目录中已经存在这个配置文
        件,该文件不会被覆盖。
               • export_bird_conf.sh : 将 BIRD 配置文件复制到容器,并运行 "birdc configure"  命令以重新
                加载配置。
        调试。     如果结果不对,需要进行调试以找出哪里出了问题,特别是找到数据包去了哪里。例如,如果运行了 ping 但没有收到回复,可以使用地图客户端的过滤选项可视化流量,找到包去了哪里。过滤选
        项的语法和 tcpdump 的语法相同。我们给出了以下示例。

        "icmp" ➙显示所有 ICMP 流量
        "icmp and src 10.180.0.71" ➙显示来自 10.180.0.71 的 ICMP 流量
        "icmp and dst 10.180.0.71" ➙显示去往 10.180.0.71 的 ICMP 流量