擁有自己的 ASN

/ , , , ,
簡體中文正體中文
摘要:
個人如何取得一個 ASN,以及取得之後如何把自己的 IP 宣告到整個網際網路。

我第一次明確接觸到 ASN 這個概念,是在 COMP3331 的課堂上。不過,除了那些生澀的課堂定義,從小就愛玩代理、伺服器和 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 的主人呢。

AS198734 的 WHOIS 紀錄,附有顯示「21」的 ASCII 電腦圖案
給自己的 21 歲生日禮物

申請

全球有五個管理 ASN 與 IP 位址的機構,稱為區域網際網路註冊管理機構(RIR)。ARIN 負責北美,RIPE NCC 負責歐洲、中東和部分中亞地區,APNIC 負責亞太,LACNIC 負責拉丁美洲,AFRINIC 負責非洲。一般要向所屬區域的 RIR 申請 ASN,網路也必須在該區域實際運作。

不過,各個 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。

取得 ASN 後,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)。前面提到的歐洲 VPS 就是租在這裡,既用來證明網路在歐洲運作,也作為第一個上游。除了 LOA,幾乎沒有其他門檻,作為第一家 IP Transit Provider,使用體驗很好。

第二家是 Misaka Network,建立 BGP session 需要支付一次性的開通費,大約幾十美元。

第三家是 BuyVM,這家最划算。最便宜的方案只要 2.5 美元,不限流量,還提供免費 BGP session,只需透過客服工單申請;手動新增的前綴則要提供 LOA。

能提供 BGP session 的服務商還有很多,網路上有人整理了一份列表 bgp.services,列出哪些方案提供 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...