Rootless Router(Re: 0): VPP Host stack
- 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真的很靈
前情提要: wireguard和vpp終於串在一起了,接下來就是讓BGP Daemon跑起來了。
為什麼是Re:0 呢? 當然是因為進度歸零了。之前弄的東西,今天發現都不能用了,我難過QQ😢
因為主機上是看不到VPP裡面的interface的,所以socket() bind()一定連不到東西。
這時就如一開始預期的,使用VPP Host stack的功能。
VPP會內部維護一個網路堆疊,應用程式設定LD_PRELOAD來攔截程式內的socket(), bind(), sendmsg(), recvmsg(),轉去VPP內部的網路堆疊
理想是美好的...但是經測試這功能根本不是一個可以用的狀態
當初開始前有大致測試一下,python3 -m http.server 然後 wget ,能正常運作,我才放心地開始弄wggo-vpp
結果多測試幾下就不行了
先用普通的 python3 -m http.server 架設一個簡單的web server
我從另一端(普通的linux+wireguard)用 wget 10.127.111.1:8080 來發送請求,第2個請求以後,VPP端的python必定當掉
這邊看到第二個請求以後,disconnected |
VPP 裡面,可以看到API client died |
之後我又陸續測試了
frr/bgpd(with no_kernel and no_zebra option)
gobgp
exabgp
沒有一個能變成Established狀態
哀,我沒想到VPP Host stack的bug這麼多,連python3 -m http.server都沒能正常運作,更別指望exabgp之類要求更高的程式了...
現在又回到最初的狀態,弄一個在userspace運作的網路堆疊,並把bgp daemon+wireguard整合進去了
不知道gVisor和UML哪個比較好。
不過這2個無論哪個,相容性都變差了。
因為他們是用ptrace來達到kernel bypass的效果,然而docker預設不開放這個權限
我的dn42 in heroku計畫就🈚️了😭😭😭
目前我找到的用戶態網路堆疊/kernel bypass的程式列表: https://blog.kskb.eu.org/2021/09/userspace.html
留言
張貼留言