ASN 初體驗 Part 2

在 ASN 與 IP 發下來後
我們接著需要將擁有的 IP 廣播出去
讓世界知道如果要連過來這些 IP 該怎麼走

要廣播到全世界
我們必須透過 BGP 這個協議 來與他人 (AS) 對等
接著透過不同分級的 AS 將你的路由一路廣播到其他地方
這才算完成 IP 宣告

What is BGP?

全名 Border Gateway Protocol
使用 port 179
用於 AS 之間交換路由表
所以這也是為什麼上一篇說一定要先有 ASN 才能做接下來的動作
因為需要宣告你的 ASN 給對方 (當然這部分可以偽造,只是大多數都會手動驗證該 ASN 是否真的是你擁有)

兩個 host 之間做連接透過 BGP 交換路由表 稱為 peering (對等)
於 AS 內的對等稱為 iBGP (Interior BGP)
跨 AS 的對等則稱為 eBGP (Exterior BGP)

通常大量對等的地方會發生在一個叫做 IX (Internet Exchange) 的地方
IX 裡面會有大量的機器互相用實體線連接對等
或是使用打 tunnel 的方式來跟別人對等 (ex. VPN)

AS 分級

在全球的這樣繁雜的路由交互作用下
AS 不單單只為了宣告自己的路由而用
也有某些 AS 為了要處理他人的路由而存在
大致上分為三個階級

  • T1
    全世界路由能互相轉送的維護者
    負責提供給其他階級 AS transit 服務
    所有 T1 AS 呈現全連接的星狀網路結構

  • T2
    提供給他人 transit
    同時也會跟 T1 transit
    藉此來讓底下 AS 的路由能送往全世界

  • T3
    只送出自己要廣播的路由
    而不會 transit 任何他人的路由

那當然我們最一開始只須要當個 T3 菜雞就好 (x

DIY Time

上面大致介紹了相關的概念後
接著就實際來操作一遍吧
想要便宜就能 peering 的話
Vultr 或是 iFog 都有免費提供 BGP 宣告
只要你有租用他們的 VPS 的話
Vultr 最便宜 5 USD /mon
iFog 最便宜 3.5 EUR /mong
Vultr 全世界很多地方都有
iFog 則是專門提供歐洲區域 因此 ping 有點高

那由於這次 demo 的 ASN 是使用 RIPE 核發的
因此根據其規定需在歐洲服務區域內使用
所以當然就選 iFog 啦
地點是 Frankfurt 台灣直連大概 ping 213

Install Service

首先我們需要先使用能夠使用BGP協議的服務
目前大宗有 BirdFRRounting
那今天就先選用 Bird 來做示範
所以就先來安裝吧

系統為 Debian 10
由於 Bird 版本有 1.X2.X 的差異
設定幾乎大改 等於不兼容
如果要裝 2.X 且 Debian <= 11
請記得先加上 backports 的 apt source

1
sudo apt install -y bird2

安裝完成後
設定檔位於 /etc/bird/
我們需要修改其中的 bird.conf 來宣告 BGP

Peering

我們直接來看設定檔

在這個步驟之前
你需要先跟 iFog 申請好 BGP session
他會要求你提供你的 ASN 以及你想要宣告的 IP Range

審核完後
他會給你一些關於對等的資訊
包括 iFog 的 ASN, neighbor ip 或是建立BGP連線時所需的密碼 (不一定有)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
log syslog all;

router id 193.148.249.81;

protocol device {
}

protocol static MY_v6
{
ipv6;
route 2a0f:607:1500::/48 reject;
}

filter BGP_OUT
{
if proto = "MY_v6" then accept;
reject;
}

protocol bgp ifog_v6
{
local 2a0c:9a40:1030::355 as 210932;
neighbor 2a0c:9a40:1030::1 as 34927;

graceful restart on;

ipv6
{
import none;
export filter BGP_OUT;
};
}

在這份設定檔中

  • 首先記得 router id 的部分
    通常是填寫這台機器的世界唯一編號 (通常就直接填 VPS 供應商當初給你的 IPv4 就好)

  • 接著是 protocol static 的部分
    這個是即將會被你往外宣告的 IP Range

  • 最後是 protocol bgp 的部分
    這邊填的就是對等資訊
    包括

    • 你的 ASN 以及該台機器對方要求跟你溝通的 IP 位址 填在 local
    • 對方提供給妳的資訊填在 neighbor
    • 最後是 ipv6 區域
      我們要透過該 filter 去指定要 export 出去的路由
      詳細可以去翻其他教學看看 filter 怎麼寫 這邊不贅述
      (filter 非常重要,如果沒寫好不只造成自己路由表大亂,也可能會給對方造成極大的麻煩)

當設定檔完成後
我們需要使用 sudo birdc 進入 Bird 的互動畫面
接著使用 configure 來 reload 剛剛的設定

如果沒噴錯
就可以使用 show protocols 來檢查看看 BGP 連線是否正常

當出現 Established 就代表該 BGP 連線正常運作了

如果還需要更詳細的訊息可以使用 show protocols all [name]
大概長得像下面這樣

Verify

在成功宣告後
通常這些供應商傳路由都非常迅速
應該宣告出去過個幾分鐘就好了
或是可以先使用 iFog 自己的 Looking Glass 服務來檢查
由於我在 Frankfurt 就使用當地的服務吧 iFog lg in Frankfurt

裡面有一些方便工具可以使用
這裡推薦使用 mtr
它同時具備 ping 以及 traceroute 的功能
如果在 server 上使用請裝 mtr-tiny
MacOS 的話就直接 brew install mtr 就好

回到 Looking Glass
這邊就輸入自己擁有的某一個 IP 並且將它給在剛剛那台建立 BGP 的機器上

拿我的舉例

我的機器給了 2a0f:607:1500::2 在我的某個網卡上
那在 LG 上面就輸入這個 IP 看它是否抓的到

看來非常正常的從 iFog 內部連線找到了
通常到了這邊就代表你的路由已經宣告出去
只要 iFog 那邊沒搞事就會正常散播到 T1 AS 那邊讓全世界看見了~

Final

這邊補個我從其他 server mtr 的結果
這是大老 SteveYi 自己的建的 Looking Glass

可以看到它從美國一路往上走走走到了 iFog 那邊
接著才到了我的 Server