驱蚊器喵的翻译平台

Can you hear the gravity?

  1. 1. 我无法发布 BGP 路由
  2. 2. 什么是 AS(autonomous system)(”自治系统”)?
  3. 3. 什么是 BGP 路由?
  4. 4. BGP 是什么?
  5. 5. 工具 1: 用 BGPView 查看你 ISP 的 AS
  6. 6. 工具 2: traceroute -A 和 mtr -z
  7. 7. mtr 使用 DNS 查找 ASN
  8. 8. 工具 3: PCH looking glass
  9. 9. 更多的 BGP looking glass
  10. 10. 工具 4: BGPlay
  11. 11. 也许了解一下 BGP 的情况很重要?
  12. 12. 发布 BGP 路由的一些方法
  13. 13. 暂时就这些了

原文地址:https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/
原文标题:Tools to explore BGP
原文作者:Julia Evans
原文写于:2021/10/05

译者:驱蚊器喵#ΦωΦ
翻译水平有限,有不通顺的语句,请见谅。


昨天,Facebook 发生了一次由 BGP 引起的大型服务中断事故。我对想要学习更多关于 BGP 的知识已经有很长一段时间了,所以我在阅读一些文章。

我感到很沮丧,因为没有一篇文章告诉我如何在我的电脑上实际查找与 BGP 有关的信息,所以我发了一条推特,寻求一些工具。

一如既往,我得到了一堆有用的回复,所以这篇博文展示了一些可以用来查询 BGP 信息的工具。因为我对 BGP 不是那么了解,所以本文中可能会有一些的常识性错误。

我无法发布 BGP 路由

我从来没有接触过 BGP 的一个原因是 - 据我所知,我没有办法在互联网上发布 BGP 路由。

对于大多数网络协议,如果你想的话,你可以很零散地获得一些办法来自己实践这个协议。例如,你可以:

  • 发行你自己的 TLS 证书
  • 编写你自己的 HTTP 服务器
  • 编写你自己的 TCP 实现
  • 为你的域名编写你自己的权威性 DNS 服务器(我现在正在为一个小项目尝试这样做)
  • 建立你自己的证书颁发机构

但对于 BGP,我认为除非你拥有自己的 ASN,否则你不能自己发布路由 (你可以在你的家庭网络上实现 BGP,但这对我来说有点无聊,当我试验一些东西时,我希望这些东西是在真实的互联网上)。

无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些工具来学习BGP :)

首先我们来谈谈 BGP 的一些术语。我打算讲得很快,因为我对工具更感兴趣,而且外面有很多关于 BGP 的高端解释(比如这篇 cloudflare 文章)。

什么是 AS(autonomous system)(”自治系统”)?

我们需要了解的第一件事是 AS。每一个 AS:

  1. 是由一个组织拥有的(通常是一个大型组织,如你的 ISP、政府、大学、Facebook 等)
  2. 控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)
  3. 有一个编号(如 1403)

下面是我通过做一些实验对 AS 的一些观察:

  • 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查询了 Patreon,就我所知,Patreon 没有自己的 AS - 他们的主网站(patreon.com,104.16.6.49)在Cloudflare 的 AS 中。
  • 一个 AS 可以包括许多国家的 IP。Facebook 的 AS(AS32934)肯定有新加坡、加拿大、尼日利亚、肯尼亚、美国和其他国家的 IP 地址。
  • IP 地址似乎可以在一个以上的 AS 中。例如,如果我查找 209.216.230.240,它有 2 个 与之相关的 ASN - AS6130 和 AS21581。显然,当这种情况发生时,会优先考虑更具体的路线 - 所以到该 IP 的数据包会被路由到 AS21581。

什么是 BGP 路由?

互联网上有很多的路由器。例如,我的 ISP 有路由器。

当我给我的 ISP 发送一个数据包时(例如通过运行 ping 129.134.30.0),我的 ISP 的路由器需要弄清楚如何将我的数据包实际送到 IP 地址 129.134.30.0

路由器计算的方法是,路由器有一个路由表 - 路由表有一堆 IP 范围的列表(比如 129.134.30.0/23 ),以及它知道的通往该子网的路由。

下面是一个 129.134.30.0/23 的真实路由的例子:( Facebook 的一个子网)。这个 IP 不是来自我的 ISP 的。

1
2
3
4
5
11670 32934
206.108.35.2 from 206.108.35.254 (206.108.35.254)
Origin IGP, metric 0, valid, external
Community: 3856:55000
Last update: Mon Oct 4 21:17:33 2021

我认为,这是在说通往 129.134.30.0 的一条路由是通过 206.108.35.2 机器,这是在本地网络上。所以路由器接下来可能会把我的 ping 包发送到 206.108.35.2,然后 206.108.35.2 会知道如何把它送到 Facebook 。开头的两个数字(11670 32934)是 ASN。

BGP 是什么?

我对 BGP 的理解很不稳定,但我理解的是,BGP 是一个协议,公司用于公布 BGP 路由。

昨天发生在 Facebook 身上的事情是,他们发布了 BGP 公告,撤销了他们所有的 BGP 路由,所以世界上每个路由器都删除了所有与 Facebook 有关的路由,所以没有流量可以到达那里。

好了,现在我们已经涵盖了一些基本的术语,让我们来谈谈你可以用来查看自治系统和 BGP 的工具吧!

工具 1: 用 BGPView 查看你 ISP 的 AS

为了使 AS 这个东西不那么抽象,让我们用一个叫 BGPView 的工具来看看一个真实的 AS。

我的 ISP (EBOX) 拥有 AS 1403。下面是我的 ISP 拥有的 IP 地址。如果我查找我计算机的公网 IPv4 地址,我可以检查到,这个地址是我的 ISP 拥有的 IP 地址之一 - 在 104.163.128.0/17 地址块中。

BGPView 还提供了我的 ISP 与其他 AS 连接情况的图表

工具 2: traceroute -A 和 mtr -z

好的,所以我们对自治系统感兴趣。让我们看看我会从哪些 AS 中经过。

traceroutemtr都有选项可以告诉你,每个 IP 所属的 ASN。选项分别是 traceroute -A and mtr -z

让我们使用 mtr 看看,在去 facebook.com 的路上经过了哪些自治系统!

1
2
3
4
5
6
7
8
9
10
11
$ mtr -z facebook.com
1. AS??? LEDE.lan
2. AS1403 104-163-190-1.qc.cable.ebox.net
3. AS??? 10.170.192.58
4. AS1403 0.et-5-2-0.er1.mtl7.yul.ebox.ca
5. AS1403 0.ae17.er2.mtl3.yul.ebox.ca
6. AS1403 0.ae0.er1.151fw.yyz.ebox.ca
7. AS??? facebook-a.ip4.torontointernetxchange.net
8. AS32934 po103.psw01.yyz1.tfbnw.net
9. AS32934 157.240.38.75
10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com

这很有趣 - 看起来我们直接从我的 ISP 的 AS(1403)到 Facebook 的 AS(32934),中间有一个 “互联网交换(internet exchange)”。

我不确定互联网交换是什么,但我知道它是互联网的一个极其重要的部分。不过这将是另一天的事了。我最好的猜测是,它是互联网中实现 “对等(peering)” 的部分 - 就像 IX 是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的计算机放在那里,这样他们就可以互相发送数据包。

mtr 使用 DNS 查找 ASN

我对 mtr 如何查找 ASN 感到好奇,所以我用了 strace。我看到它看起来像是在使用 DNS,所以我运行了 dnspeep,然后就看到了!

1
2
3
4
$ sudo dnspeep
...
TXT 1.190.163.104.origin.asn.cymru.com 192.168.1.1 TXT: 1403 | 104.163.176.0/20 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.160.0/19 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.128.0/17 | CA | arin | 2014-08-14
...

因此,看起来我们可以通过查询 1.190.163.104.origin.asn.cymru.com 上的 txt 记录,找到 104.163.190.1 的 ASN,像这样:

1
2
3
4
$ dig txt 1.190.163.104.origin.asn.cymru.com
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.160.0/19 | CA | arin | 2014-08-14"
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.128.0/17 | CA | arin | 2014-08-14"
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.176.0/20 | CA | arin | 2014-08-14"

这很好! 让我们继续前进吧。

工具 3: PCH looking glass

PCH(”packet clearing house”)是运行着大量互联网交换点的组织。looking glass 似乎是一个通用术语,指的是让你从另一个人的电脑上运行网络命令的终端。有一些 looking glass 不支持 BGP,但我只对那些能显示 BGP 路由信息的 looking glass 感兴趣。

这里是 PCH 的 looking glass 地址:https://www.pch.net/tools/looking_glass/。

在那个网站的网页表格中,我选了 Toronto IX(”TORIX”),因为 mtr 说我是用这个去访问 facebook.com 的。

第 1 件事:”show ip bgp summary”

下面是输出结果。我去掉了其中的一些内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IPv4 Unicast Summary:
BGP router identifier 74.80.118.4, local AS number 3856 vrf-id 0
BGP table version 33061919
RIB entries 513241, using 90 MiB of memory
Peers 147, using 3003 KiB of memory
Peer groups 8, using 512 bytes of memory

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
...
206.108.34.248 4 1403 484672 466938 0 0 0 05w3d03h 50
...
206.108.35.2 4 32934 482088 466714 0 0 0 01w6d07h 38
206.108.35.3 4 32934 482019 466475 0 0 0 01w0d06h 38
...

Total number of neighbors 147

我的理解是,Toronto Internet Exchange(”TORIX”)与我的 ISP(EBOX,AS 1403)和 Facebook(AS 32934)都直接相连。

第 2 件事: “show ip bgp 129.134.30.0”

下面是对 129.134.30.0(Facebook 的一个 IP)进行 “show ip bgp” 命令的输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
BGP routing table entry for 129.134.30.0/23
Paths: (4 available, best #4, table default)
Advertised to non peer-group peers:
206.220.231.55
11670 32934
206.108.35.2 from 206.108.35.254 (206.108.35.254)
Origin IGP, metric 0, valid, external
Community: 3856:55000
Last update: Mon Oct 4 21:17:33 2021

11670 32934
206.108.35.2 from 206.108.35.253 (206.108.35.253)
Origin IGP, metric 0, valid, external
Community: 3856:55000
Last update: Mon Oct 4 21:17:31 2021

32934
206.108.35.3 from 206.108.35.3 (157.240.58.225)
Origin IGP, metric 0, valid, external, multipath
Community: 3856:55000
Last update: Mon Oct 4 21:17:27 2021

32934
206.108.35.2 from 206.108.35.2 (157.240.58.182)
Origin IGP, metric 0, valid, external, multipath, best (Older Path)
Community: 3856:55000
Last update: Mon Oct 4 21:17:27 2021

这似乎是在说,从这个互联网交换中心到 Facebook 有 4 条路由。

Quebec 互联网交换中心似乎对 Facebook 啥都不知道

我也试过从 Quebec internet exchange QIX(这个地方可能离我更近,因为我住在 Montreal 而不是 Toronto)做同样的事。但 QIX 似乎对 Facebook 一无所知 - 当我输入 129.134.30.0 时,它只是说 “% 网络不在表中”。

所以我想这就是为什么我的数据包被送到 Toronto 的 IX 而不是 Quebec 的 IX。

更多的 BGP looking glass

这里还有一些带 looking glass 的网站,可以从其他角度给你类似的信息。他们似乎都支持相同的 show ip bgp 语法,也许是因为他们运行的是同一个软件?我不太确定。

似乎有很多这样的 looking glass 服务,远不止列出的这三个。

下面是一个与这个名单上的一个服务器进行会话的例子:route-views.routeviews.org。这次我是通过 telnet 连接的,而不是通过 web 表单,但输出的格式看起来是一样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$ telnet route-views.routeviews.org

route-views>show ip bgp 31.13.80.36

BGP routing table entry for 31.13.80.0/24, version 1053404087
Paths: (23 available, best #2, table default)
Not advertised to any peer
Refresh Epoch 1
3267 1299 32934
194.85.40.15 from 194.85.40.15 (185.141.126.1)
Origin IGP, metric 0, localpref 100, valid, external
path 7FE0C3340190 RPKI State valid
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
6939 32934
64.71.137.241 from 64.71.137.241 (216.218.252.164)
Origin IGP, localpref 100, valid, external, best
path 7FE135DB6500 RPKI State valid
rx pathid: 0, tx pathid: 0x0
Refresh Epoch 1
701 174 32934
137.39.3.55 from 137.39.3.55 (137.39.3.55)
Origin IGP, localpref 100, valid, external
path 7FE1604D3AF0 RPKI State valid
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
20912 3257 1299 32934
212.66.96.126 from 212.66.96.126 (212.66.96.126)
Origin IGP, localpref 100, valid, external
Community: 3257:8095 3257:30622 3257:50001 3257:53900 3257:53904 20912:65004
path 7FE1195AF140 RPKI State valid
rx pathid: 0, tx pathid: 0
Refresh Epoch 1
7660 2516 1299 32934
203.181.248.168 from 203.181.248.168 (203.181.248.168)
Origin IGP, localpref 100, valid, external
Community: 2516:1030 7660:9001
path 7FE0D195E7D0 RPKI State valid
rx pathid: 0, tx pathid: 0

这里有一些可选的路由。

  • 3267 1299 32934
  • 6939 32934
  • 701 174 32934
  • 20912 3257 1299 32934
  • 7660 2516 1299 32934

我想这些都有不止一个 AS 的原因是,31.13.80.36 是 Facebook 在 Toronto 的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,需要先连接到另一个 AS。所以所有的路由都有一个或多个 ASN 。

最短的路由是 6939(”Hurricane Electric”),这是一个 “全球互联网骨干”。他们也有自己的 looking glass 页面looking glass

工具 4: BGPlay

到目前为止,所有其他的工具都只是向我们展示了 Facebook 当前正常的路由状态,但这第四个工具让我们看到了这个Facebook BGP 互联网事故的历史,这是一个图形化的工具,所以我将放上一些屏幕截图。

这个工具是在 https://stat.ripe.net/special/bgplay 下载的。我输入了 IP 地址 129.134.30.12( Facebook 的一个 IP)。

首先,让我们看看一切出错之前的状态。我在 10 月 4 日 13:11:28 点击了时间线,得到了这个结果。

我最初发现这非常费解。发生了什么事?但后来有人在 Twitter 上指出,下一个要看的地方是点击 Facebook 事故发生后的时间线( 10 月 4 日 18 点 38 分)。

在这张图上,很明显可以看出,出了点问题 - 所有的 BGP 路由都消失了!天哪!

上面的文字显示了最后一条 Facebook BGP 路由的消失时间。

1
2
3
Type: W > withdrawal Involving: 129.134.30.0/24
Short description: The route 50869, 25091, 32934 has been withdrawn.
Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12

如果我再点击 “快进” 按钮,我们看到 BGP 路由开始回来了。

第一个公布的路由是 137409 32934。但我不认为这是第一个真正公布的路由 - 在同一秒内(在2021-10-04 21:00:40)有很多路由在公布,我认为 BGPlay 内部的排序是任意的。

如果我再次点击 “快进” 按钮,越来越多的路由开始回来,最后路由开始恢复正常。

我发现在 BGPlay 里看这个事故真的很有趣,尽管一开始界面很混乱。

也许了解一下 BGP 的情况很重要?

我在这篇文章的开头说,你不能改变 BGP 路由的 BGP,但后来我想起在 2016 年或 2017 年,有一个 Telia 的路由问题,导致我们在工作中的一些小网络有些问题。而当这种情况发生时,对于了解为什么你的客户无法访问你的网站,是很有用的,即便造成事故的原因你无法控制。当时我不知道这些工具,但我希望能知道!

我想对于大多数公司来说,你能做的就是 “什么都不做,等待它被修复” ,但能够自信地表明什么都不做,是正确的。

发布 BGP 路由的一些方法

如果你想(作为一个业余爱好者)真正发布 BGP 路由,这里有一些评论中的链接。

  • 获取自己的 ASN 的指南
  • dn42 dn42 是一个 BGP 的游乐场(它不在公共互联网上,但确实有其他人在上面玩,可能比你自己在家里做 BGP 更有趣)

暂时就这些了

我想,可能还有很多 BGP 工具(比如 PCH 有一堆路由数据的每日快照,看起来很有趣),但这篇文章已经很长了,而且我今天还有其他事情要做。

我对我作为一个普通人可以得到这么多关于 BGP 的信息感到惊讶,我一直认为它是一个 “私密的网络向导” 的东西,但显然有各种公开的服务器,任何人都可以直接 telnet 到那里,来查看路由表! 谁知道呢!

本文作者 : meow
This blog is under a CC BY-NC-SA 4.0 Unported License
本文链接 : https://translation.meow.page/post/tools-to-look-at-bgp-routes/

本文最后更新于 天前,文中所描述的信息可能已发生改变