mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-31 23:30:11 +08:00
Merge pull request #23465 from wxy/20211005-Tools-to-explore-BGP
PRF&PUB:20211005 tools to explore bgp
This commit is contained in:
commit
c2102305d1
@ -3,13 +3,15 @@
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-13857-1.html"
|
||||
|
||||
由 Facebook 事故引发的 BGP 工具探索
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202110/07/093743krr8ftrpvgfrvffx.jpg)
|
||||
|
||||
昨天,Facebook 发生了由 BGP 引起的离线事故。我对学习更多关于 BGP 的知识已经隐约感兴趣了很长时间,所以我阅读了一些文章。
|
||||
|
||||
我感到很沮丧,因为没有一篇文章告诉我如何在我的电脑上实际查找与 BGP 有关的信息,因此我 [写了一条询问有关工具的推特][1]。
|
||||
@ -25,12 +27,12 @@
|
||||
* 发行你自己的 TLS 证书
|
||||
* 编写你自己的 HTTP 服务器
|
||||
* 编写你自己的 TCP 实现
|
||||
* 为你的域名编写你自己的权威 DNS 服务器(我现在正在为一个小项目尝试这样做)。
|
||||
*建立你自己的证书机构(CA)
|
||||
* 为你的域名编写你自己的权威 DNS 服务器(我现在正在为一个小项目尝试这样做)
|
||||
* 建立你自己的证书机构(CA)
|
||||
|
||||
但是对于 BGP,我认为除非你拥有自己的 ASN,否则你不能自己发布路由(你*可以*在你的家庭网络上实现 BGP,但这对我来说有点无聊,当我做实验的时候,我希望它们真的在真正的互联网上)。
|
||||
|
||||
无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些工具来学习 BGP。
|
||||
无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些用来学习 BGP 的工具。
|
||||
|
||||
首先我们来谈谈 BGP 的一些术语。我打算很快掠过,因为我对工具更感兴趣,而且网上有很多关于 BGP 的高水平解释(比如这篇 [cloudflare 的文章][2])。
|
||||
|
||||
@ -39,14 +41,14 @@
|
||||
我们首先需要了解的是 AS(“<ruby>自治系统<rt>autonomous system</rt></ruby>”)。每个 AS:
|
||||
|
||||
1. 由一个组织拥有(通常是一个大型组织,如你的 ISP、政府、大学、Facebook 等)。
|
||||
2.控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)。
|
||||
2. 控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)。
|
||||
3. 有一个编号 ASN(如 1403)。
|
||||
|
||||
下面是我通过做一些实验对 AS 的一些观察:
|
||||
|
||||
* 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查看了 Patreon,就我所知,他们没有自己的 AS,他们的主要网站(patreon.com,[104.16.6.49][3])在 Cloudflare 的 AS 中。
|
||||
* 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查看了 Patreon,就我所知,他们没有自己的 AS,他们的主要网站(`patreon.com`,[104.16.6.49][3])在 Cloudflare 的 AS 中。
|
||||
* 一个 AS 可以包括许多国家的 IP。Facebook 的 AS([AS32934][4])肯定有新加坡、加拿大、尼日利亚、肯尼亚、美国和其他国家的 IP 地址。
|
||||
* 似乎 IP 地址可以在一个以上的 AS 中。例如,如果我查找[209.216.230.240][5],它有 2 个 ASN 与之相关:AS6130 和 AS21581。显然,当这种情况发生时,更具体的路线会被优先考虑--所以到该 IP 的数据包会被路由到 AS21581。
|
||||
* 似乎 IP 地址可以在一个以上的 AS 中。例如,如果我查找 [209.216.230.240][5],它有 2 个 ASN 与之相关:`AS6130` 和 `AS21581`。显然,当这种情况发生时,更具体的路线会被优先考虑 —— 所以到该 IP 的数据包会被路由到 `AS21581`。
|
||||
|
||||
### 什么是 BGP 路由?
|
||||
|
||||
@ -54,9 +56,9 @@
|
||||
|
||||
当我给我的 ISP 发送一个数据包时(例如通过运行 `ping 129.134.30.0`),我的 ISP 的路由器需要弄清楚如何将我的数据包实际送到 IP 地址 `129.134.30.0`。
|
||||
|
||||
路由器计算的方法是,它有一个**路由表**:有一堆 IP 地址范围的列表(比如 `129.134.30.0/23`),以及它知道的到达该子网的路由。
|
||||
路由器计算的方法是,它有一个**路由表**:这是个有一堆 IP 地址范围的列表(比如 `129.134.30.0/23`),以及它知道的到达该子网的路由。
|
||||
|
||||
下面是一个 `129.134.30.0/23` 的真实路由的例子(Facebook 的一个子网)。这不是来自我的 ISP。
|
||||
下面是一个 `129.134.30.0/23` (Facebook 的一个子网)的真实路由的例子。这不是来自我的 ISP。
|
||||
|
||||
```
|
||||
11670 32934
|
||||
@ -70,7 +72,7 @@
|
||||
|
||||
### BGP 是什么?
|
||||
|
||||
我对 BGP 的理解很不牢靠,但它是一个公司用来公布 BGP 路由的协议。
|
||||
我对 BGP 的理解非常浅薄,它是一个公司用来公布 BGP 路由的协议。
|
||||
|
||||
昨天发生在 Facebook 身上的事情基本上是他们发布了一个 BGP 公告,撤销了他们所有的 BGP 路由,所以世界上的每个路由器都删除了所有与 Facebook 有关的路由,没有流量可以到达那里。
|
||||
|
||||
@ -80,7 +82,7 @@
|
||||
|
||||
为了使 AS 这个东西不那么抽象,让我们用一个叫做 [BGPView][6]的 工具来看看一个真实的 AS。
|
||||
|
||||
我的 ISP(EBOX)拥有 [AS 1403][7]。下面是 [我的 ISP 拥有的 IP 地址][8]。如果我查找我的计算机的公共 IPv4 地址,我可以看到它是我的 ISP 拥有的IP地址之一:它在 `104.163.128.0/17` 块中。
|
||||
我的 ISP(EBOX)拥有 [AS 1403][7]。这是 [我的 ISP 拥有的 IP 地址][8]。如果我查找我的计算机的公共 IPv4 地址,我可以看到它是我的 ISP 拥有的IP地址之一:它在 `104.163.128.0/17` 块中。
|
||||
|
||||
BGPView 也有这个图,显示了我的 ISP 与其他 AS 的连接情况。
|
||||
|
||||
@ -92,7 +94,7 @@ BGPView 也有这个图,显示了我的 ISP 与其他 AS 的连接情况。
|
||||
|
||||
`traceroute` 和 `mtr` 都有选项可以告诉你每个 IP 的 ASN。其选项分别是 `traceroute -A` 和 `mtr -z`。
|
||||
|
||||
让我们看看我用 `mtr` 在去 facebook.com 的路上经过了哪些自治系统!
|
||||
让我们看看我用 `mtr` 在去 `facebook.com` 的路上经过了哪些 AS!
|
||||
|
||||
```
|
||||
$ mtr -z facebook.com
|
||||
@ -108,11 +110,11 @@ $ mtr -z facebook.com
|
||||
10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com
|
||||
```
|
||||
|
||||
这很有意思,看起来我们直接从我的 ISP 的 AS(1403)到 Facebook 的 AS(32934),中间有一个“互联网交换”。
|
||||
这很有意思,看起来我们直接从我的 ISP 的 AS(`1403`)到 Facebook 的 AS(`32934`),中间有一个“互联网交换”。
|
||||
|
||||
我不确定 <ruby>[互联网交换][10]<rt>internet exchange</rt></ruby>(IX)是什么,但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我最好的猜测是,它是互联网中实现“对等”的部分,就假设它是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的电脑放在里面,这样他们就可以互相发送数据包。
|
||||
> 我不确定 <ruby>[互联网交换][10]<rt>internet exchange</rt></ruby>(IX)是什么,但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我猜是,它是互联网中实现“对等”的部分,就假设它是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的电脑放在里面,这样他们就可以互相发送数据包。
|
||||
|
||||
### mtr 用 DNS 查找 ASN
|
||||
#### mtr 用 DNS 查找 ASN
|
||||
|
||||
我对 `mtr` 如何查找 ASN 感到好奇,所以我使用了 `strace`。我看到它看起来像是在使用 DNS,所以我运行了 [dnspeep][11],然后就看到了!
|
||||
|
||||
@ -140,7 +142,7 @@ PCH(“<ruby>数据包交换所<rt>packet clearing house</rt></ruby>”)是
|
||||
|
||||
这里是 PCH 的观察镜: <https://www.pch.net/tools/looking_glass/> 。
|
||||
|
||||
在该网站的 Web 表单中,我选择了多伦多 IX(“TORIX”),因为 `mtr` 说我是用它来访问 facebook.com 的。
|
||||
在该网站的 Web 表单中,我选择了多伦多 IX(“TORIX”),因为 `mtr` 说我是用它来访问 `facebook.com` 的。
|
||||
|
||||
#### 操作 1:显示 ip bgp 摘要
|
||||
|
||||
@ -169,7 +171,7 @@ Total number of neighbors 147
|
||||
|
||||
#### 操作 2:显示 ip bgp 129.134.30.0
|
||||
|
||||
这是挑选自 `show ip bgp` 对 `129.134.30.0`(Facebook 的一个 IP 地址)的输出:
|
||||
这是筛选自 `show ip bgp` 对 `129.134.30.0`(Facebook 的一个 IP 地址)的输出:
|
||||
|
||||
```
|
||||
BGP routing table entry for 129.134.30.0/23
|
||||
@ -217,9 +219,9 @@ Paths: (4 available, best #4, table default)
|
||||
* <http://www.routeservers.org/>
|
||||
* <https://lg.he.net/>
|
||||
|
||||
似乎有很多这样的观察镜服务,远不止这 3 个列表:
|
||||
似乎有很多这样的观察镜服务,远不止这 3 个列表。
|
||||
|
||||
这里有一个与这个列表上的一个服务器进行会话的例子:route-views.routeviews.org。这次我是通过 telnet 连接的,而不是通过 Web 表单,但输出的格式看起来是一样的。
|
||||
这里有一个与这个列表上的一个服务器进行会话的例子:`route-views.routeviews.org`。这次我是通过 telnet 连接的,而不是通过 Web 表单,但输出的格式看起来是一样的。
|
||||
|
||||
```
|
||||
$ telnet route-views.routeviews.org
|
||||
@ -271,15 +273,15 @@ Paths: (23 available, best #2, table default)
|
||||
* `20912 3257 1299 32934`
|
||||
* `7660 2516 1299 32934`
|
||||
|
||||
我想这些都有不止一个 AS 的原因是,`31.13.80.36` 是 Facebook 在多伦多的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN
|
||||
我想这些都有不止一个 AS 的原因是,`31.13.80.36` 是 Facebook 在多伦多的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN。
|
||||
|
||||
最短的是 6939(“Hurricane Electric”),它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜][12] 页面。
|
||||
最短的是 `6939`(“Hurricane Electric”),它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜][12] 页面。
|
||||
|
||||
### 工具 4:BGPlay
|
||||
|
||||
到目前为止,所有其他的工具都只是向我们展示了 Facebook 路由的当前状态,其中一切正常,但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史 这是一个 GUI 工具,所以我将包括一堆屏幕截图。
|
||||
到目前为止,所有其他的工具都只是向我们展示了 Facebook 路由的当前状态,其中一切正常,但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史。这是一个 GUI 工具,所以我将包括一堆屏幕截图。
|
||||
|
||||
该工具在 <https://stat.ripe.net/special/bgplay>。我输入了 IP 地址 129.134.30.12(Facebook 的一个 IP),如果你想一起试试。
|
||||
该工具在 <https://stat.ripe.net/special/bgplay>。我输入了 IP 地址 `129.134.30.12`(Facebook 的一个 IP),如果你想一起试试。
|
||||
|
||||
首先,让我们看看一切出错之前的状态。我点击了在 10 月 4 日 13:11:28 的时间线,得到了这个结果:
|
||||
|
||||
@ -320,7 +322,7 @@ Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12
|
||||
如果你想(作为一个业余爱好者)真正发布 BGP 路由,这里有一些评论中的链接:
|
||||
|
||||
* [获取你自己的 ASN 的指南][17]
|
||||
* [dn42][18] 似乎有一个 BGP 的实验场(它不在公共互联网上,但确实有其他人在上面,这似乎比自己在家里做 BGP 实验更有趣
|
||||
* [dn42][18] 似乎有一个 BGP 的实验场(它不在公共互联网上,但确实有其他人在上面,这似乎比自己在家里做 BGP 实验更有趣)
|
||||
|
||||
### 目前就这些了
|
||||
|
||||
@ -335,7 +337,7 @@ via: https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
Loading…
Reference in New Issue
Block a user