發表文章

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

Rootless Router(Part: 0): 用戶態DN42節點

圖片
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版本上線啦! Rootless Router(Afterword): Azure App Service真的很靈 起因是網路上有些免費的容器,例如heroku,或是Azure web service之類,給的權限有夠小 沒有tun/tap,沒有wireguard。這些功能都是kernel獨有,但都沒給 但是我想把它變成一台 dn42 節點! 理論上來說,一個 dn42 節點,說穿了不過就只是從A收udp wireguard封包,然後弄一弄轉給B而已嗎?,完全不需要root權限 理想中的這隻程式,對外維持許多wireguard udp session,沒別的東西了。 對內則是維護一個network stack,wg解包出來丟進stack,經過BGP daemon+routing以後跑去另一個wireguard。在這之中完全沒有kernel的參與 於是我想,一般的路由功能,全部都大量依賴linux kernel。 frr/bird等常見的bgp daemon,也都是把收到的路由表寫入linux kernel。 難道就不能在userspace實現嗎? 要做到這個目的,必須要實現2點: 1: 用戶態的網路堆疊+路由轉發表 2: 在上面的堆疊裡面運作一個BGP daemon 我查了查,用戶態的網路堆疊還不少。但是第二點才是困難的 眾多現有的程式,有一個吸引了我的注意: fd.io/VPP。 因為linux kernel網卡驅動模型的特性,每個packet都是一個CPU中斷,注定快不起來。所以有人搞了個DPDK,讓