自己在家开运营商 Part.3 - 接入 IXP 与他人 peer

 

前言

上篇 Blog 中我们已经成功的将 IP 宣告到了整个 Internet, 本篇我们继续来讲 peer.

peering 与 IXP

我们的 AS214775 已经通过 xTom 的 IP transit 服务与整个互联网相连, 但上次还挖了个坑叫 “peering”.

peering 意为对等互连 —— 两个 AS 通过友好协商的方式, 直接在两者间拉起一条链路, 这样两个 AS 间的流量就无需经过上级运营商, 提高带宽降低延迟的同时还能节约一部分给上游的结算费.

IXP, 全称 Internet exchange point(互联网交换中心), 有时也简称 IX, 就是给大家提供 peering 的物理场所. 各个 AS 的运营者可以接入就近的 IXP, IXP 内各个 AS 就可以直接建立 BGP 会话进行 peer. 很多大型的互联网公司也会通过大量 peer 来提升自己的 connectivity 和降低带宽成本, 比如 Cloudflare 现在就有 2000+ peer.

实际设置

我们想要和其他 AS peer 的话我们就需要加入一个 IX. 商业化的 IX 通常要求物理接入, 且会收取一笔端口管理费用. 但也有一些相对开放和公益性质的 IX, 甚至会有一些实验性质的虚拟 IX (通过 VPN 进行 peer).

我们上次使用的 v.ps 就提供了多个 IX 的选择. 例如 AMS-IX 和 DE-CIX 就是商业化的 IX, 每月要交至少 70 EUR 的接入费用, 但也会有很多大公司位列其中, 例如加入 AMS-IX 就能直接和 Alibaba, Tencent, Cloudflare, Apple, Amazon 等一众公司 peer.

不过由于我太穷了由于我们目前只是实验目的, 我们先用 v.ps 赠送的 LocIX 做示例. LocIX peer 人数就相对较少, 且没有很多耳熟能详的大公司, 但不同 IX 配置方法是类似的.


在 IX 中, 我们可以直接连接到其他 AS 进行 peer. 但为所有其他上百个 AS 一一配置 BGP Session 显然过于繁琐了. IX 为解决这个问题准备了一个 “Route Server” (RS), 所有的 AS 可以直接和 RS 进行 peer, RS 会讲我们导出的路由转发给其他人, 其他人导出的路由转发给我们, 就实现了一个 BGP Session 和所有人 peer 的效果.

通过工单申请 LocIX 的访问后, 后台会为我的 vps 添加一张新的网卡用于接入 IX (我的为 eth1), 同时通过邮件发送 LocIX Dashboard 的登陆信息.

LocIX DashboardLocIX Dashboard

在 LocIX 控制台获得 eth1 对应的 IP 地址 2a0c:b641:701::a5:21:4775:1, 手动配置在 vps 的网口上.

同时在控制台可以得到 RS 的 IP 2a0c:b641:701::a5:20:2409:1 和 ASN 202409, 在上篇 Blog 的 BIRD 配置末尾再添加以下内容, 与 RS 建立 peer. 过滤器这里, 对于 peer 我们仍是接收所有路由, 只导出我们自己的地址段, 所以无需修改.

1
2
3
4
5
6
7
8
9
10
protocol bgp bgp_locix_v6 {
local 2a0c:b641:701::a5:21:4775:1 as ASN;
neighbor 2a0c:b641:701::a5:20:2409:1 as 202409;
ipv6 {
import filter import_filter_v6;
export filter export_filter_v6;
export limit 10;
};
graceful restart;
}

配置好后重启 BIRD, 同样是一段时间后, 我们可以在 BGP Tools 和 LocIX 控制台查询到我们的 peer.

BGP Tools 已经可以看到 PeersBGP Tools 已经可以看到 Peers

LocIX 控制台有一个 Peer 关系的可视化LocIX 控制台有一个 Peer 关系的可视化

检验效果

看起来我们的 peer 已经没有问题了, 同样是使用 birdc show protocols all 可以看到我们从 LocIX 导入了 1417 条路由.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bgp_locix_v6 BGP        ---        up     2024-09-06    Established   
Channel ipv6
State: UP
Table: master6
Preference: 100
Input filter: import_filter_v6
Output filter: export_filter_v6
Export limit: 10
Action: disable
Routes: 1417 imported, 1 exported, 1380 preferred
Route change stats: received rejected filtered ignored accepted
Import updates: 63354 0 0 4466 58888
Import withdraws: 33479 0 --- 1067 32412
Export updates: 2137470 61720 2075746 --- 4
Export withdraws: 128310 --- --- --- 0
BGP Next hop: 2a0c:b641:701:0:a5:21:4775:1 fe80::be24:11ff:fefa:9353

使用 ip -6 route | grep 'dev eth1' 可以看到这些路由, 我们可以尝试性地访问下邻居, 例如我尝试访问 xTom 的 2a03:d9c0:1000::1.

使用 tcpdump 可以在 eth1 上抓到对应的流量, 代表两个 AS 间的流量确实通过 IX 进行了交换:

1
2
06:54:40.064548 IP6 2a0e:8f01:1000:46:be24:11ff:fefa:9353 > cs01.q51.dus06.xtom.de: ICMP6, echo request, id 4432, seq 3, length 64
06:54:40.065748 IP6 cs01.q51.dus06.xtom.de > 2a0e:8f01:1000:46:be24:11ff:fefa:9353: ICMP6, echo reply, id 4432, seq 3, length 64

小结

我们已经通过了 RS 在 LocIX 上与他人 peer. LocIX 还有些其他用法这里没有涉及, 例如与他人 direct peer/使用 BGP Community 等, 你可以自行参阅你使用的 IX 的文档.

前三 part 中我们已经完成了较为基础的部分 - ASN 的注册, 宣告以及 peer. 在配网的路上还有很多内容没有完成, 例如:

  • 通过 BGP Community 筛选路由 (名字很怪, 但类似于附加给路由的一个自定义 tag)
  • 建立一个合理的 filter 和防火墙, 不盲目信任上游和 Route Server, 防止类似炸掉整个互联网的事故
  • 扩张我们现有的网络, 在自己的 AS 内使用 IGP 和 iBGP
  • 尝试在更加自由的 DN42 上建网, 然后炸掉 DN42

出于成本考量, 我可能不太会继续在 Internet 上扩大我的 AS 规模, 后续可以在 DN42 上实验. 关于 DN42 推荐大家看 Lantian 的这篇教程, 他的博客上还有其他不少进阶配网教程. 在 DN42 的相关社群 (TG群/IRC) 里你也更容易找到其他可以一起交流的爱好者.

虽然我不打算马上实现上面画的饼, 不过这个系列文章也不会到此结束, 我应该还会尝试探索一些(只能在 Internet 上实现的)其他内容…

本文采用 CC BY-NC-SA 4.0 许可协议发布.

作者: lyc8503, 文章链接: https://blog.lyc8503.net/post/asn-3-ixp-and-peer/
如果本文给你带来了帮助或让你觉得有趣, 可以考虑赞助我¬_¬