發表文章

目前顯示的是 十月, 2021的文章

Rootless Router(Fin): 計畫終於完成,上線啦!

圖片
RootlessRouter系列: Rootless Router(Part: 0): 用戶態DN42節點 Rootless Router(Part: 1): wggo-vpp Rootless Router(Re: 0): VPP Host stack Rootless Router(Part: 2): BIRD-vpp Rootless Router(Part: 3): EtherGuard Rootless Router(Extra):蒐集的Userspace 網路棧 Rootless Router(Part: 4): 被VPP Host Stack衝康 Rootless Router(Part: 5): 完結 Rootless Router(Fin): UML版本上線啦! 不知道RootlessRouter是什麼的人,請點上面第一篇,了解整個故事線 最後,RootlessRouter終於上線了! 完結灑花! 在放棄VPP以後,最初我的計劃長這樣: 自己刻一個Simple Router代替原本的VPP,大致架構不變 原本VPP的LD_PRELIAD的kernel bypass部分拿掉,改成端口轉發。把遠端端口179轉發到localhist:10079 然後BIRD就和localhost:10079 建立session,同時把遠端發往SimpleRouter的179端口轉發到localhost:179 同時也不忘看看 這裡 一些其他選項,在我看UML的時候,其中一句話吸引了我: You can get extremely high performance for anything which is a “kernel specific task” such as forwarding, firewalling, etc while still being isolated from the host kernel. 我決定相信他所謂的extremely high performance。而且BIRD正好不怎麼fork,完美適合UML發揮的場景! 現在的架構長這樣: BIRD是運作在UML裡面的,圖片沒畫好又有點懶得改,附註一下 同時我決定把計畫更名,從原本的RootlessRouter改成RootlessRouter-UML,和以前做出區別 而且這個架構下,w

三分鐘搞懂DN42 wiki裡面的BIRD2範例設定檔

當初知道DN42的時候,還什麼都不懂 只會抄配置,抄來了也不懂意思。經過了好幾個月,才搞懂他到底在幹嘛 相信學程式語言的都有這種感覺,懂了一種,其他的也很好懂。 因為他們只是token不一樣,但是語法邏輯都非常相似。頂多多一些專有特性額外要背 不是procedural programming的另當別論,functional/return oriented邏輯差太多了 雖說大多BIRD的評價都是「很像程式語言」 但我也不是沒寫過程式,為啥我都看不懂在幹嘛呢? 因為我雖然會寫程式,但是我當初的癥結點,是卡在「 不知道他的交互對象 」 一旦搞懂這些,剩下的就迎刃而解了。 但我當初不知道,摸了很久才發現這點。 所以想花三分種講給你聽 不管是語法,還是操作,都可以之後在搞懂 但是,首先要搞清的是「你在和誰打交道」 只要這個搞懂了,就算沒學過他的語法,看過別人的範例,加上以前程式語言的經驗,很快就搞懂了 只要這個沒搞懂,看了在多與法定義,也還是搞不懂 路由是一個長類似這樣的資料結構 [1] 192.168.1.0/24 → 192.168.0.1 (加上一些額外標記) [2] 192.168.2.0/26 → 1.1.1.1 (加上一些額外標記) Kernel收到一個封包,DstIP=192.168.1.9。 查詢到路由表裡的 [1],就會把這個封包送往192.168.0.1 這就是路由表 首先,BIRD有2張路由表,叫做master4和master6 ,分別存放ipv4和ipv6路由。 以下只會提到master4,但ipv6的東西會放master6,但我省略了 這個是wiki裡面的BIRD範例設定檔: https://wiki.dn42.dev/howto/Bird2 首先,每個protocol都是一個打交道的對象。 import代表「對面發給我的東西,塞去master4」 export代表「把master4裡面的東西,丟給對面」 第一段 protocol static { route OWNNET reject; ipv4 { import all; export none; }; } route OWNNET reject: 這裡有一個靜態路由  OWNNET → unreachable import all