一次(可能算是)失败的 BGP 尝试 December 6, 2019 ### 背景 教育网的 ipv6 大多是免流的。那么问题是如何找一个合适的梯子实现高速免流。教育网 ipv6 的出国线路大概有 HE、Cogentco、HKIX(有多个 ISP 都会经过 HKIX,就不详细列出了)。 HE 是大多数 ip 都会走线路,于是他 QoS 也比较严重。Cogentco 和 HKIX 则 QoS 的比较少。走 HKIX 的 VPS 还是有不少(自行搜索),不过价格一般还是不便宜。 而 Cogentco 线路有一些大服务商有,比如 vultr 的达拉斯回程和亚特兰大的去程,但是这两个的相反方向却都只是普通的HE 线路。要综合这两个线路得到一个双向 Cogentco 线路的梯子,其实可以通过一些操作,使得本地给 A 发包,如何 B 返回结果。但是感觉设置比较麻烦,就咕了。 这时我想到我恰好有一个(算是)闲置的 ASN 和一些 ipv6 资源,能不能用 BGP 实现这个双向 Cogentco 呢? ### 前提条件 一个 ASN,一些 ip 段。这些许多商家有售(比如 hostus)。比较便宜的可以去各大论坛或者群里问(比如 [https://t.me/MoeQing](https://t.me/MoeQing)) 首先在 vultr 开两台机,装好必要的软件。 接下来在两台机器上都配置广播 ip,可以参考 [https://blog.ni-co.moe/public/560.html](https://blog.ni-co.moe/public/560.html)。 ### 配置去程 由于我们想让这个 ip 段强制走其中一台进入,需要把他们之间连起来,并且再设置一下路由优先级。 把他们之间连起来可以参考 [https://lantian.pub/article/modify-website/join-dn42-experimental-network.lantian/](https://lantian.pub/article/modify-website/join-dn42-experimental-network.lantian/)。这里需要注意,为了让 zerotier 能正常分配公网 ipv6,需要运行 `zerotier-cli set 你的网络id allowGlobal=1`。 接下来是设置路由优先级。这里的需求很简单,只是为了让路由全都走某一台,那么可以让另一台的 AS Path 足够长,这样就不会被优先选择了。 具体来说,在 `/etc/bird/bird6.conf` 中,`protocol bgp vultr` 一段里,把 `export all;` 改成: ``` export filter { bgp_path.prepend(你的 AS 号); bgp_path.prepend(你的 AS 号); ... bgp_path.prepend(你的 AS 号); bgp_path.prepend(你的 AS 号); }; ``` 这里要加多少个就自己决定了,只要让别人走不过来就行。 配好之后,重启 bird6,等一会路由更新,然后 trace 一下,发现去程确实走了 Cogentco。 ### 配置回程 回程按理来说是不需要配置的,但是在达拉斯的机器上运行 ``` mtr 2402:f000:2:f001::240:1 ``` 是走 GTT 到 Cogentco;而运行 ``` mtr -a 你的ip 2402:f000:2:f001::240:1 ``` 却是走 NTT 到 HE。 为了配置这一部分,需要想办法调整回程线路,也就是 VPS 上的出口线路。 而根据 Vultr 给出的一些参考([https://www.vultr.com/docs/as20473-bgp-customer-guide](https://www.vultr.com/docs/as20473-bgp-customer-guide)),可以用 BGP Community 来控制宣告。 比如可以在 `export filter` 中加入 ``` bgp_community.add((64609, 3257)); bgp_community.add((64699, 3257)); bgp_community.add((20473, 6000)); ``` 来只对外宣告到 AS3257(GTT)。 然而,这样仍然不能使上面的 mtr 都走 Cogentco。 ### 问题分析 我找 Vultr 客服把我的 BGP 模式改成了全表。在所有出口路径中,我搜索了 45576(贵清的 ASN),发现只有 ``` 64515 65534 20473 6939 23911 23910 24348 45576 ``` 一条。也就是直接走 HE 的。 那么 GTT 和 Cogentco 是怎么走出来的就非常奇怪了。 这里我也分析不下去了,如果有人知道原因欢迎联系我。 后来我换了几个不同的贵清 ip 测试,发现有的是两种 mtr 都走 NTT-HE,有的是两种都走 GTT-Cogentco。 ### 总结 BGP 实在是玄妙啊。。。