發表文章

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

Rootless Router(Part: 3): EtherGuard

圖片
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真的很靈 前情提要: 總之BIRD確定了要用python糊以後,我就來決定來搞多節點互連了 Mesh VPN 我決定弄一個layer 2 的mesh VPN,用於我之後會架設的多個節點之間的互聯。 至於為什麼我要自己弄這個VPN呢?  首先,因為幾乎沒見到別的VPN軟體支援VPP VPP雖然有內建VPN,但是沒有一個支援udp打洞 我想要有一個VPN能夠用在VPP上,又能夠udp打洞,似乎只能些修改/重寫了 比較過幾個,最後還是決定以go語言為基礎 因為之前弄 wireguard-go-vpp 的時候,go語言下的libmemif環境都弄好了 如果要基於C++的改成memif後端,不知道環境又要搞多久 順帶一提,go語言的環境設計,真的太神了,不得不吹 不像C++有各種路徑要設定,ld_library_path,還有gcc加上LDFLAGS之類的設定 還有namespace的問題,C++的include真的就只是單純把那段code貼到#include的地方 這個設計,簡單是很簡單,但是各種變數汙染也是不好弄 go語言就方便多了。go get XXX,go mod vender,所有需要的檔案通通搬去vender子資料夾 mod之間也不會互相汙染,真是太神奇了! go語言萬歲! EtherGuard 花了半個月,我終於寫完了! 最後我決定把新弄得VPN取名叫做Etherguard。為什麼叫做Etherg

(轉載) Azure for Students的一些改动

轉載自:  https://xrenblog.com/article/000007/.html 据观察,对于前些阵子的azure子域泛滥,微软也是对Azure for Students做出些许改动,改动包括但不限于以下几条: Azure for Students的资格认证从以往的只看域名变成了域名+许可,也就是说未激活的无许可账号将无法获取Azure for Students,只能获取到Azure for Students Starter。 Azure for Students Starter是Azure for Students的入门版,跟Azure for Students的区别在于,前者没有100美元的额度,所以只能用免费层的服务,而且超过90天不登录账号的话,账号就会被删除。 但并不是说az子域就不能用了,最廉价的方案就是偷渡a1搭配az子域,其余方案此处不变展开。 鉴于微软已经逐步对Azure for Students重拳出击,可以预测到Azure for Students会逐步加大审核力度,变成像是GitHub那样的人工证件审核也说不定。 就先说那么多,有什么新发现会再补充。 

Rootless Router(Part: 2): BIRD-vpp

圖片
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真的很靈 前情提要: exabgp / gobgp / frr / python3-http-server 沒有一個能正常運作,我正心灰意冷的時候,發現有一個居然能夠正常運作,就是BIRD BIRD-vpp https://zstas.github.io/jekyll/update/2020/03/07/vcl.html   這篇文章作者讓BIRD在VPP host stack底下成功運作起來了 我一開始一直沒辦法成功運作,出現 Socket error: IP_TTL: Operation not supported 詢問了群友們沒有結果,畢竟這個玩法不是這麼的常見,那麼只能自己看源碼了 發現... 沒辦法,只能改原碼,BIRD不提供任何設定檔關掉這個行為 經過一番 patch ,BIRD 終於運作起來了。 其中讓我覺得最雷的是這一段 因為VPP是按照POSIX規範進行實作,但BIRD居然沒有遵照POSIX規範呼叫,導致無法正常運作!! linux給你方便,其他人好歹也遵守一下POSIX標準吧。能遵守POSIX盡量遵守,害我在這邊花超多時間QQ 好的開始 但是我發現BIRD雖然起來了,但是peer一直都是idle狀態,就是不肯連線。 lsof查看,也沒有監聽任何port。 網路上查詢過以後發現別人也遇過這個問題,只要加上multihop就可以了。 此時我也不知道multihop是什麼,但是ipv4

Rootless Router(Re: 0): VPP Host stack

圖片
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真的很靈 前情提要: 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必定當掉 可以看到第3個wget就沒反應了 這邊看到第二個請求以後,disconnected VPP 裡面,可以看到API client died 之後我又陸續測試了 frr/bgpd(with no_k