0.前言
前面寫了兩篇關于MPTCP的文章:
- 《鏈路聚合技術——多路徑傳輸Multipath TCP(MPTCP)快速實踐》
- 《使用MPTCP+BBR進行數據傳輸,讓網絡又快又穩》
對MPTCP有了基本的了解與實踐,并在虛擬的網絡拓撲中實現了鏈路帶寬的疊加。
1.OpenMPTCProuter簡介
在現網場景中,實現鏈路聚合并不會像我之前寫的文章中那樣,直接用裸linux機器當做鏈路聚合路由器,而是更傾向于使用更輕量級且專業的路由器系統來運行MPTCP,比如大名鼎鼎的OpenWRT。
而OpenMPTCProuter就是OpenWRT+MPTCP的最佳實踐。
其官網地址為:http://www.openmptcprouter.com/
在OpenMPTCProuter的官網中也有關于它的詳細介紹,且所有源碼均已開源(向Ysurac大神致敬)。
如僅需使用OpenMPTCProuter,可直接下載OpenMPTCProuter官方已編譯好的鏡像,下載地址為:https://www.openmptcprouter.com/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_FEED_URL和OMR_FEED_SRC替換為自己倉庫的地址和分支。
再指定對應的編譯平臺類型,并執行編譯命令進行編譯:
OMR_TARGET=“x86_64” OMR_FEED_SRC=“master” OMR_KERNEL=“6.12” ./build.sh
如編譯成功,則會輸出如下信息:
如編譯失敗,可在編譯參數后指定單線程并輸出詳細日志信息
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目錄中
運行時,再根據自己的需要挑一個適合的鏡像文件運行即可。
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文件。
再打開VMware,選擇創建新的虛擬機,選擇稍后安裝操作系統。
操作系統選擇為:其他Linux 5.x 內核64位。
之后再添加一個硬盤,(如有其他硬盤可以先刪除),選擇使用現在磁盤,將磁盤文件選擇為之前下載解壓后的vmdk文件。
之后啟動虛擬機:
輸入用戶名root進入系統。
我這里的網絡模式選擇的為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
重啟之后測試一下:
與NAT網關可達性正常。
再試一下在web瀏覽器中訪問:http://192.168.81.3/
輸入默認用戶名:root,默認無密碼
可訪問到OpenMPTCPRouter的WEB界面,運行成功。
5.OpenMPTCProuter聚合效果演示
OMR支持的功能眾多,異地組網方面也已經內置了WireGuard。
鏈路聚合方面主要使用的是支持MPTCP的工具+VPS實現的。
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的實際鏈路聚合功能,可以參考筆者的此拓撲:
其中的限速使用linux中自帶的tc工具實現,如果IP地址為內網IP則還需要對OMR中的bypass策略進行調整,以禁止繞過vps節點。
相關排查命令:
#查看omr中當前bypass規則
uci show omr-bypass
#查看當前策略
nft list ruleset
最后再來一張我在驗證omr時,實現雙接口鏈路聚合時的截圖:
從OMR的監控面板中實現了兩個接口的流量分擔,并達到了500+500=1000的鏈路聚合效果。
詳細的配置部分篇幅較多,這里不再詳細展開。
如在OMR搭建調試過程中遇到問題,可留言交流~