拥有自己的 ASN

/ , , , ,
摘要:
个人如何拿到一个 ASN,以及拿到之后怎样把自己的 IP 广播到整个互联网。

我最早明确地听到 ASN 的具体概念,是在 COMP3331 的课上,不过除了课堂上这些比较生涩的定义,作为一个打小就折腾代理、服务器和 IP 的人,每次查询一个 IP 的详细信息,最先出来的就是这个 IP 的 ASN,比如 AS13335 是 Cloudflare,AS15169 是 Google。

ASN 和 BGP

互联网是由成千上万个各自独立运营的网络连在一起组成的。每一个这样的网络叫做一个自治域(Autonomous System),ASN 就是它的编号。运营商、大学、云厂商、CDN 都是一个或者多个自治域。

自治域之间靠 BGP 协议互相沟通。我把我拥有的一段 IP,告诉我的上游,上游再告诉它的邻居,一层一层传下去,过一会儿,全世界的路由器就都知道要去这一段 IP 应该往我这里走了。所以在查 IP 的时候看到的 ASN,一般就是在 BGP 里宣告这一段 IP 的那个自治域。

然而,ASN 并不仅仅面向 ISP 和大企业,实际上任何个人或者组织,只要找对了路子都可以申请。谁又能拒绝拥有一个写着自己名字的 ASN,让一段 IP 后面跟的是自己,成为这些 IP 的主人呢。

申请

全球管理 ASN 和 IP 地址的机构一共有五个,叫做 RIR。ARIN 管北美,RIPE NCC 管欧洲、中东和中亚的一部分,APNIC 管亚太,LACNIC 管拉丁美洲,AFRINIC 管非洲。ASN 一般要向自己所在区域的 RIR 申请,申请的网络需要在这个区域里有存在。

但是不同的 RIR 的门槛和价格差得挺多。

RIPE 的正式会员叫 LIR,大家一般戏称为"大会员",每年的会员费是 1550 欧元,新加入还要一笔 1000 欧元的入会费。不过 RIPE 允许由一个 LIR 做赞助者,替没有会员资格的个人或者组织去提交申请,这是个人最常见的方式。

APNIC 的大会员第一年大概是 1680 澳元,之后每年 1180 澳元,新会员会给一个 IPv4 的 /24、一个 IPv6 的 /48 和一个 ASN。提供的材料里还有身份证明和公司注册、业务运营的证明,审核也要一两个星期,而且 IPv4 已经耗尽,地址资源需要排队等待。当然,APNIC 也允许已有的会员替客户提交申请,不过这样的赞助者没有 RIPE 那边多,价格也不占优势。

ARIN 的 ASN 是按年收费的,要求在北美有网络。LACNIC 和 AFRINIC 就更远了,基本不用考虑。

我最后选了 RIPE,因为它是最好申请且最便宜的。APNIC 也可以申请,但需要提供更多的材料,审核时间也会长一些。另外 RIPE 很多的设置可以通过它非常好用的 LIR Portal 来操作,而 APNIC 的很多设置只能通过邮件和工单来处理。

流程

对个人来说,找到赞助者去申请一个 ASN 是最实惠的。

在网上搜索 RIPE 的 ASN 赞助,可以找到很多提供这种服务的人,他们一般是主机商、小型的网络运营商或者网络爱好者,自己就是 RIPE 的会员,有自己的 LIR 账号,所以也愿意用这个账号帮忙申请 ASN 和 IP 地址,一般会收一点年费。

我的赞助者是 Soha Jin,申请是他帮我处理的,从提交到 ASN 下来只用了一两天。

需要向赞助者提供的材料不多,身份证明、地址、一个接收 abuse 投诉的邮箱、两个上游的 ASN,以及这个网络在欧洲有存在的证明。两个上游是申请时就要填的,所以上游得在申请之前找好,我的证明用的是一台欧洲机房的 VPS。

拿到之后,RIPE 数据库里会出现几个对象,aut-num 是 ASN 本身,另外还有 maintainer、联系人和 organisation,以后要改信息都用 maintainer 来操作。

光有 ASN 还不行,要广播的话还得有 IP 地址。IPv4 的前缀最小是 /24,IPv6 最小是 /48,再小的前缀大部分网络都会过滤掉。IPv4 现在又少又贵,所以赞助者一般会送一块 IPv6,我拿到的是一个 /44,和 ASN 差不多是同时下来的。

找上游

除了管理机构的申请和交钱,还有一个更加重要的,就是找到能提供 BGP session 的上游,把 IP 广播出去。我当时找了三家。

第一家是 Vultr,云主机可以免费开 BGP session,用的是 Vultr 自己的私有 ASN(AS64515)。前面说的欧洲机房的那台机器就是在这里开的,申请的证明和第一个上游都是它。基本除了 LOA 没有什么门槛,作为第一个 IP Transit Provider 体验极佳。

第二家是 Misaka Network,开通 BGP session 要一次性收一笔开通费,大概几十刀。

第三家是 BuyVM,这家是最实惠的。它最便宜的一档只需要 2.5 刀,给无限流量,还给免费 BGP session,只需要开工单申请,手动添加的前缀要提供 LOA。

能提供 BGP session 的服务商还有很多,网上有人整理了一份列表 bgp.services,写明了哪些套餐提供 BGP session,或者额外加 BGP session 需要多少服务费,找自己需要的可以去翻一翻。

用 BIRD 广播

有了上游,剩下的就是在服务器上跑一个路由软件,去和上游建立 BGP session。由于一般提供 IP Transit 的都是 VPS 厂商,所以在 Linux 上使用 BIRD 2 是最方便的选择。

BASH
apt install bird2

先把要广播的地址配在本机上。单台服务器的话配在 lo 上就行,不要配在出口网卡上。

BASH
ip addr add 2a0e:aa07:e0a0::1/128 dev lo

然后是 /etc/bird/bird.conf。下面是只广播 IPv6 的最小配置,邻居地址、ASN 和密码都由上游提供,这里用的是示例值。

TEXT
router id 203.0.113.10;

protocol device {
}

protocol static announce_v6 {
    ipv6;
    route 2a0e:aa07:e0a0::/44 reject;
}

protocol bgp upstream_v6 {
    local as 198734;
    neighbor 2001:db8:ffff::1 as 64515;
    multihop 2;
    password "your-password";

    ipv6 {
        import none;
        export where net ~ [ 2a0e:aa07:e0a0::/44+ ];
    };
}

protocol static 里写的是要广播的前缀,用 reject 是为了让路由表里有这条路由,但不真的转发流量。protocol bgp 里 local as 是自己的 ASN,neighbor 是上游的地址和 ASN,云主机上的 session 一般是 multihop 的,按上游给的参数填就行。由于我只需要把前缀发出去,不需要上游的路由表,所以 import none,想接默认路由或者全表的话再改 import,并加上 protocol kernel。

改完之后让 BIRD 重新加载,再看 session 的状态。

BASH
birdc configure
birdc show protocols
birdc show route export upstream_v6

show protocols 里 session 的状态是 Established 就说明连上了,show route export 可以看到实际发给上游的路由。连不上的话,检查一下邻居能不能 ping 通,上游是不是要求 multihop,以及 179 端口有没有被防火墙拦住。

上游一般还会检查前缀有没有对应的 IRR route6 对象和 RPKI 的 ROA,这两样需要在 RIPE 数据库里建好,用赞助者给的地址块的话,可能需要叫赞助者处理。

前缀广播出去之后,过几个小时就能在 bgp.tools 上搜到自己的 ASN,有的上游传播得慢,可能要等上几天。之后再去查我的这些 IP,最前面显示出来的,就是自己的 ASN 了。

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...