鏈路聚合路由器OpenMPTCProuter源碼編譯與運行

0.前言

前面寫了兩篇關于MPTCP的文章:

  • 《鏈路聚合技術——多路徑傳輸Multipath TCP(MPTCP)快速實踐》
  • 《使用MPTCP+BBR進行數據傳輸,讓網絡又快又穩》

對MPTCP有了基本的了解與實踐,并在虛擬的網絡拓撲中實現了鏈路帶寬的疊加。

1.OpenMPTCProuter簡介

在現網場景中,實現鏈路聚合并不會像我之前寫的文章中那樣,直接用裸linux機器當做鏈路聚合路由器,而是更傾向于使用更輕量級且專業的路由器系統來運行MPTCP,比如大名鼎鼎的OpenWRT。

OpenMPTCProuter就是OpenWRT+MPTCP的最佳實踐。

openmptcprouter
其官網地址為:http://www.openmptcprouter.com/

在OpenMPTCProuter的官網中也有關于它的詳細介紹,且所有源碼均已開源(向Ysurac大神致敬)。

如僅需使用OpenMPTCProuter,可直接下載OpenMPTCProuter官方已編譯好的鏡像,下載地址為:https://www.openmptcprouter.com/download

omr-download
x86、arm、香蕉派、樹莓派等各個版本的都有,按需所取就行。

2.OpenMPTCProuter源碼編譯

但有時,我們需要在OpenMPTCProuter(OMR)的基礎上進行一些二次開發,這時就需要采用源碼編譯的方式構建出OpenMPTCProuter的鏡像包了。

關于OMR的編譯文章網上不多,通過筆者的實踐在本文中記錄一下。

其編譯步驟可以參考OMR倉庫中的自動化腳本:workflows/main.yml

我們根據腳本中的內容可以提取出如下關鍵信息:

OMR_KERNEL: [6.6, 6.12]runs-on: ubuntu-latestsudo apt-get updatesudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc-s1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler python3-pyelftools llvm clangOMR_KERNEL="${OMR_KERNEL}" OMR_FEED_SRC="${SOURCE_NAME}" sh build.sh prepare {tools,toolchain}/install -j$(nproc) || OMR_KERNEL="${OMR_KERNEL}" OMR_FEED_SRC="${SOURCE_NAME}" sh build.sh prepare {tools,toolchain}/install -j1 V=s

提取出關鍵信息:

  • 在最新的ubuntu系統中運行,當前時間是2025/8/5,目前最新的ubuntu-LTS版本為:ubuntu24.04
  • 執行apt-get 更新,并安裝所需依賴
  • 指定OpenMPTCProuter(OMR)的內核版本,并執行build.sh腳本開始編譯

詳細也可參考OMR官方wiki中的說明:Create-image-for-unsupported-platform

在編譯的過程中,build.sh會自動拉取https://github.com/Ysurac/openmptcprouter-feeds倉庫的代碼,而對OMR的二次開發也主要是對openmptcprouter-feeds中代碼的修改,所以在編譯自己的源碼時,需要在build.sh中對其進行調整:

omr-github
將這里的OMR_FEED_URLOMR_FEED_SRC替換為自己倉庫的地址和分支。

再指定對應的編譯平臺類型,并執行編譯命令進行編譯:

OMR_TARGET=“x86_64” OMR_FEED_SRC=“master” OMR_KERNEL=“6.12” ./build.sh

如編譯成功,則會輸出如下信息:
omr-build
如編譯失敗,可在編譯參數后指定單線程并輸出詳細日志信息

OMR_TARGET=“x86_64” OMR_FEED_SRC=“master” OMR_KERNEL=“6.12” ./build.sh -j1 V=s

編譯成功的鏡像文件位于:openmptcprouter/x86_64/6.12/source/bin/targets/x86/64目錄中

omr-build-files
運行時,再根據自己的需要挑一個適合的鏡像文件運行即可。

3.OpenMPTCProuter鏡像運行(windows系統)

這里以在windows上的虛擬機運行OMR為例,使用的鏡像文件為:x86-64-generic-ext4-combined-efi.vmdk.gz

如:

VMware ext4 image (EFI): openmptcprouter-v0.62-6.6-r0+28431-92e020b50f-x86-64-generic-ext4-combined-efi.vmdk.gz (2025/03/13 - 79.90Mo - sha256sum)

之后解壓成vmdk文件。

omr-zip
再打開VMware,選擇創建新的虛擬機,選擇稍后安裝操作系統。
操作系統選擇為:其他Linux 5.x 內核64位。

之后再添加一個硬盤,(如有其他硬盤可以先刪除),選擇使用現在磁盤,將磁盤文件選擇為之前下載解壓后的vmdk文件。

omr-install-vm
之后啟動虛擬機:
start-omr
輸入用戶名root進入系統。
view-vm-network
我這里的網絡模式選擇的為NAT模式,NAT網關IP為192.168.81.2。
虛擬機的詳細網絡可在VMware的虛擬網絡編輯器中查看。

4.OpenMPTCProuter基本配置

OpenMPTCPRouter啟動后不會自動獲取IP地址,需要再手動設置一下。

以要將OMR的管理地址設置為192.168.81.3為例,輸入以下命令:

uci set network.lan.proto='static'
uci set network.lan.ipaddr='192.168.81.3'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='192.168.81.2'
uci commit network
/etc/init.d/network restart

重啟之后測試一下:

test-network-gateway
與NAT網關可達性正常。

再試一下在web瀏覽器中訪問:http://192.168.81.3/

輸入默認用戶名:root,默認無密碼
omr-web
可訪問到OpenMPTCPRouter的WEB界面,運行成功。

5.OpenMPTCProuter聚合效果演示

OMR支持的功能眾多,異地組網方面也已經內置了WireGuard。
鏈路聚合方面主要使用的是支持MPTCP的工具+VPS實現的。
omr-interfaces
OMR與vps建立mptcp連接,對于一些比較復雜的場景,還可以實現OMR與VPS流量的動態路由、負載均衡、策略分流等高級功能。

官網中對這部分也有一些說明:

If you have a router with enough CPU power, in System->OpenMPTCProuter, wizard tab, “Advanced settings” checkbox you can choose ……

關于OMR的vps詳細安裝與配置過程這里不詳細展開,可參考:Install-or-update-the-VPS。

想要體驗OMR的實際鏈路聚合功能,可以參考筆者的此拓撲:

omr-test-topo

其中的限速使用linux中自帶的tc工具實現,如果IP地址為內網IP則還需要對OMR中的bypass策略進行調整,以禁止繞過vps節點。

相關排查命令:

#查看omr中當前bypass規則
uci show omr-bypass
#查看當前策略
nft list ruleset

最后再來一張我在驗證omr時,實現雙接口鏈路聚合時的截圖:

link-agg-omr
從OMR的監控面板中實現了兩個接口的流量分擔,并達到了500+500=1000的鏈路聚合效果。

詳細的配置部分篇幅較多,這里不再詳細展開。

如在OMR搭建調試過程中遇到問題,可留言交流~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93768.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93768.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93768.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI時代企業轉型指南:用AI降本增效,銷售轉化翻3倍,獲客成本砍一半!

AI時代,大部分企業每天都在問同一個問題:AI到底能幫我做什么?無論你是做電商、做IP、做操盤手,還是傳統企業老板,你都會發現一個現實——AI真正的用途是用來在業務場景里直接降本增效的。對我個人來說,AI已…

【牛客刷題】最大公約數與最小公倍數:算法詳解與實現

文章目錄 一、題目介紹 1.1 輸入描述 1.2 輸出描述 1.3 示例(含詳細注釋) 二、考察的知識點 三、算法設計思路 3.1 最大公約數(GCD) 3.2 最小公倍數(LCM) 四、流程圖 五、題解實現 六、復雜度分析 七、關鍵算法知識點 一、題目介紹 計算兩個整數的**最大公約數(GCD)和最小公…

將 iPhone 聯系人轉移到 Infinix 的完整指南

從 iPhone 切換到 Infinix 設備是一次令人興奮的升級,但在切換過程中,轉移個人數據(尤其是聯系人)可能會有些棘手。聯系人是任何手機上最重要的信息類型之一,如果在切換過程中丟失它們,會帶來很大的不便。由…

Clipboard.js 復制內容

插件地址 clipboard.js 中文網 安裝 npm install clipboard --save使用示例 <template><div><div class"copyBtn" click"copyText">復制文本</div ></div> </template><script> // 引入clipboard.js import…

蛇形方陣構造

給出方陣的長寬&#xff0c;n 和 m &#xff0c;按照斜著的蛇形輸出該方陣 面試官給的送分題裸模擬&#xff0c;寫的太慢了沒過&#xff0c;實際確實慢&#xff0c;結束后起碼用了一個多小時才調完 找了下沒找到leetcode 提交的地方&#xff0c;各種oj 倒是有&#xff0c;不過是…

傳統方式部署(RuoYi-Cloud)微服務

實驗環境192.168.10.43和192.168.10.44內存不能小于4G一、安裝MySQL&#xff08;192.168.10.46&#xff09;1、安裝MySQL依賴庫dnf -y install ncurses-compat-libs2、上傳mysql-8.0.42-linux-glibc2.17-x86_64-minimal.tar.xz二進制包到/root目錄&#xff0c;解壓并移動到指定…

Linux網絡服務(一)——計算機網絡參考模型與子網劃分

文章目錄前言一、分層思想1.1 分層的基本概念1.2 點到點與端到端通信的區別二、OSI參考模型2.1 OSI七層模型的結構2.2 各層功能示例&#xff08;以QQ為例&#xff09;2.3 單工&#xff0c;半雙工和全雙工2.4 OSI七層模型總結三、TCP/IP模型3.1 TCP/IP四層與五層模型3.2 TCP/IP協…

Elasticsearch全文檢索中文分詞:IK分詞器詳解與Docker環境集成

目錄一、IK分詞器介紹與選擇1. IK分詞器詳細介紹1.1 基本概念1.2 核心功能1.3 適用場景2. 如果不使用IK分詞器&#xff0c;有哪些替代方案&#xff1f;2.1 默認分詞器的局限性2.2 替代方案及對比2.3 示例&#xff1a;Ngram Tokenizer配置3. 如何選擇分詞器&#xff1f;3.1 決策…

實用軟件推薦

作者給大家推薦兩個軟件&#xff1a;typedown,typora typedown在microsoft上即可下載&#xff0c;免費 如果有更多的需求建議下載typora,typora為付費軟件 typora官網&#xff1a;typora官網 typedown下載&#xff1a;typedown下載 作者曾經發布的一些以"md"為后…

地圖導航怎么測?

地圖導航的測試需要結合功能驗證、性能評估和場景模擬等多維度方法,以下是基于行業標準和實踐的系統化測試方案: 一、核心測試維度與方法 (一)功能測試:覆蓋導航全流程 1、基礎功能驗證 路線規劃:輸入起點 / 終點后,驗證系統是否能生成最短、最快或避開擁堵的路線,并…

力扣70:爬樓梯

力扣70:爬樓梯題目思路代碼題目 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f; 思路 首先我們先列出來前幾個臺階的答案從第一個開始&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;5。…

CoRL 2025|隱空間擴散世界模型LaDi-WM大幅提升機器人操作策略的成功率和跨場景泛化能力

內容源自計算機科研圈在機器人操作任務中&#xff0c;預測性策略近年來在具身人工智能領域引起了廣泛關注&#xff0c;因為它能夠利用預測狀態來提升機器人的操作性能。然而&#xff0c;讓世界模型預測機器人與物體交互的精確未來狀態仍然是一個公認的挑戰&#xff0c;尤其是生…

Rust 入門 生命周期-next2 (十九)

生命周期消除實際上&#xff0c;對于編譯器來說&#xff0c;每一個引用類型都有一個生命周期&#xff0c;那么為什么我們在使用過程中&#xff0c;很多時候無需標注生命周期&#xff1f;例如&#xff1a;fn first_word(s: &str) -> &str {let bytes s.as_bytes();f…

Three.js 動畫循環學習記錄

在上一篇文章中&#xff0c;我們學習了Three.js 坐標系系統與單位理解教程&#xff1a; Three.js 坐標系系統與單位理解教程 接下來我們要學習的是Three.js 的動畫循環 一、動畫循環基礎原理 1. 什么是動畫循環&#xff1f; 動畫循環是連續更新場景狀態并重新渲染的過程&am…

ktg-mes 改造成 Saas 系統

ktg-mes 改造成 Saas 系統 快速檢驗市場&#xff0c;采用最簡單的方案&#xff0c;即添加表字段 截止2025年8月16日上傳的ktg-mes搭建存在一些問題&#xff0c;搭建可看文章&#xff1a; 搭建ktg-mes 改造 1. 添加租戶表 create table sys_tenant (tenant_id bigint au…

【新手易混】find 命令中 -perm 選項的知識點

find 命令是 Linux/Unix 系統中強大的文件查找工具&#xff0c;廣泛用于根據文件名、類型、時間、權限等條件搜索文件。其中&#xff0c;-perm 選項用于按文件權限查找文件&#xff0c;而在 -perm /mode 中出現的斜杠 / 是一種特殊的語法&#xff0c;表示“按位或&#xff08;O…

gdb的load命令和傳給opeocd的monitor flash write_image erase命令的區別

問&#xff1a; "monitor flash write_image erase ${workspaceFolder}/obj/ylad_led_blink.elf", 和 "load", "executable" : "${workspaceFolder}/obj/ylad_led_blink.elf", 的區別&#xff1f;答&#xff1a; 你提到的 "monit…

1. Docker的介紹和安裝

文章目錄1. Docker介紹核心概念核心優勢與虛擬機的區別一句話總結2. Docker的安裝Windows 10/11 安裝 Docker Desktop&#xff08;推薦 WSL2 方式&#xff09;Linux&#xff08;以 Ubuntu / Debian 系為例&#xff09;Docker 是一個開源的容器化平臺&#xff0c;它允許開發者將…

fastdds.ignore_local_endpoints 屬性

Fast DDS 的 fastdds.ignore_local_endpoints 屬性用于控制同一 DomainParticipant 下的本地端點&#xff08;即 DataWriter 和 DataReader&#xff09;是否自動匹配。以下是對該功能的詳細解釋&#xff0c;并翻譯為中文&#xff0c;結合其上下文、實現原理和使用場景&#xff…

華清遠見25072班C語言學習day11

重點內容:函數&#xff1a;定義&#xff1a;返回值類型 函數名(參數列表) { //函數體 }函數的參數列表中可以有多個數據返回值&#xff1a;如果函數沒有返回值可以寫成void 返回值的作用&#xff0c;函數的結果用來返回給主調函數的&#xff0c;如果主調函數處不需要函數的結果…