CARRIER ROUTER / 我們的方向

以軟體為本。
為電信而生。

我們的宗旨:致力打造一套真正以軟體為主,卻能抗衡硬體的電信級路由器!

宗旨是工程目標,不代表效能認證。

系統基底 / 安全性

升級 Debian 13 基底

Carrier Router 已採用 Debian 13(Trixie);更新基底不代表吞吐量較高,但意味著諸多安全性得到修正與補強,未來我們也會盡可能跟進新版核心確保資訊安全。

Kernel + VPPIPv4 / IPv6
專案起源

Carrier Router 以 VyOS 1.5 開發分支(rolling)為基礎,後續由 GPT-6 Astra 協助進行大幅度改寫。本專案獨立發展,並非 VyOS 官方發行版本。

BEYOND THE BASELINE

熟悉的基礎,不同的演進方向。

重新設計設定儲存系統

設定分模組序列化,採用不可變更的修訂版本,並以原子切換更新目前版本。明確區分已 commit 與已 save 的狀態,升級時保留設定遷移版本資訊。這是設定儲存架構的改進,不是另造一套檔案系統。

提交檢查與故障復原

提供 commit check、各元件開機結果,以及可自訂週期的已提交設定自動存檔;尚未確認的 commit-confirm 不會自動存檔。可選配 FRR 記憶體上限,降低路由服務耗盡記憶體的影響,但不保證所有故障都能維持轉送不中斷。

深化 Kernel 與 VPP 整合

擴充 VPP WireGuard 來源選擇、PPPoE 輪替、介面名稱對應與統一監控命令。VyOS 也有 VPP 開發,差異在於我們的整合與擴充,而非只有我們支援 VPP。VPP 連線監控使用取樣估算,並非精確計費數據。

可組合 BGP 路由策略

以有順序的 route-map 組合重複使用策略,減少為每種組合建立獨立策略的需求。設定與轉送行為仍須依實際拓樸驗證。

有基準版本的升級途徑

相容的修改可在支援的基準版本內透過累積更新套件升級。核心或不相容的原生元件變更需要新基準,並可能需要重新開機或重啟服務;不是每一版 ISO 都能免重啟升級。

原始碼與授權

為保持開發來源與版本清楚,目前不公開內部開發倉庫與完整 Git 歷史。對 GPL 等授權要求提供原始碼的元件,每次 ISO 發行皆同步以獨立封存檔提供對應完整原始碼、修改內容、必要建置資料與授權聲明;不會以僅提供差異檔取代授權要求的完整對應原始碼。

下載對應原始碼
網路維運者的實用手冊

少一點猜測。
多一點可用指令。

選擇主題、了解修改內容,再帶走需要的指令。

參考版本 exp68 · 2026 年 9 月 10 日

統一 WAN 切換,包含雙 PPPoE

支援固定制/固定制、固定制/PPPoE、PPPoE/PPPoE,並以綁定來源的 ICMP 或 TCP 檢查線路。

01使用雙 PPPoE 選擇出口

本例與下方固定制範例擇一使用,不要將同一隧道同時綁定兩個群組。兩組 PPP 須先設定完成並連線,分別位於不同 VRF,且 ISP 允許同時在線。VPP WireGuard 需要兩組 PPP 都設定 dataplane vpp。請將文件示意的健康檢查目標換成可達位址。本例是在已連線的成員間選擇出口,不會延後第二組撥號,也不會每 36 小時定時輪替。確認管理連線正常後再 save。

CLI 範例
configure
set service wan-handover group DUALPPP member pppoe1
set service wan-handover group DUALPPP member pppoe2
set service wan-handover group DUALPPP member-options pppoe1 priority 200
set service wan-handover group DUALPPP member-options pppoe2 priority 100
set service wan-handover group DUALPPP health-check target reach address 192.0.2.1
set service wan-handover group DUALPPP health-check target reach protocol icmp
set service wan-handover group DUALPPP preempt enable
set service wan-handover group DUALPPP preempt-delay 60
set service wan-handover group DUALPPP minimum-residence 120
set interfaces vpp wireguard vppwg0 source-group DUALPPP
compare
commit check
commit

02優先使用固定制,恢復後延遲切回

數值較高者優先;未指定時為 100,同分依保存的成員加入順序。預設不搶回,須明確啟用 preempt。請將文件位址換成可達且由您控制的目標;介面與隧道本身必須先配置完成。

CLI 範例
set service wan-handover group CHT member eth4
set service wan-handover group CHT member pppoe0
set service wan-handover group CHT member-options eth4 priority 200
set service wan-handover group CHT member-options pppoe0 priority 100
set service wan-handover group CHT health-check target reach address 192.0.2.1
set service wan-handover group CHT health-check target reach protocol icmp
set service wan-handover group CHT preempt enable
set service wan-handover group CHT preempt-delay 60
set service wan-handover group CHT minimum-residence 120
set interfaces vpp wireguard vppwg0 source-group CHT

03只延後首次 PPPoE 撥號

只適用 PPPoE,單位為秒,此例為 36 小時。路由器每次開機會重新計算首次延後;控制程式重啟或修改描述不會重算。已連線者不會被斷開,之後重連也不再延後。主要 WAN 明確故障時,會提前啟動仍在等待的備援。計時器不會強迫切換或修改優先權;恢復搶回仍依設定。拔線與 PPP 明確斷線會跳過評分和等待,但備援須可用,不保證零掉包或零延遲。

CLI 範例
set service wan-handover group DUALPPP member pppoe2 rotation-interval 129600
commit check
commit
run show wan-handover group DUALPPP

04共同故障後重新錯開 PPPoE(exp90)

需要 exp90,且群組須先配置恰好兩個持續撥號的 PPPoE 成員,使用相同 source-interface、服務/集中器選擇及 dataplane。不可套用下方固定制或混合 WAN 範例。故障後兩條正常重連;若實際連線成功時間差少於一小時,待主用 session 達 36 小時,確認雙線健康維持 60 秒且已設定的隧道內 IPv4/IPv6 檢查通過,才重撥非主用成員。避開主用線路預估 72 小時到期前的窗口。資訊不明就不重撥,控制服務重啟不重複執行;間隔正常時不定時輪替。非群組流量若直接使用被重撥介面,仍可能中斷。首次延後撥號仍是獨立設定。

CLI 範例
set service wan-handover group DUALPPP pppoe-restagger interval 129600
set service wan-handover group DUALPPP pppoe-restagger minimum-gap 3600
set service wan-handover group DUALPPP pppoe-restagger stable-time 60
set service wan-handover group DUALPPP pppoe-restagger session-lifetime 259200
commit check
commit
run show wan-handover group DUALPPP

05比較 TCP 平均連線延遲

測量 TCP connect 時間,不是 TLS 或 HTTP 回應時間。所有 WAN 比較同一個具名目標,各累積十次連續成功結果後計算移動算術平均,不是中位數。平均改善至少 3 ms 才符合條件;設定 improvement-ms 1 就依 1 ms 判斷。百分比預設停用,明確設定非零值才增加第二項門檻。仍須滿足穩定時間並啟用 preempt。失敗檢查會清空受影響的取樣窗口,不會當成零延遲。ICMP/TCP 正常不代表 ISP 的 WireGuard UDP 一定走同一路徑。

CLI 範例
set service wan-handover group CHT health-check target web address 198.51.100.1
set service wan-handover group CHT health-check target web protocol tcp
set service wan-handover group CHT health-check target web port 443
set service wan-handover group CHT selection-mode latency
set service wan-handover group CHT latency target web
set service wan-handover group CHT latency window 10
set service wan-handover group CHT latency improvement-ms 3
set service wan-handover group CHT latency improvement-percent 0
set service wan-handover group CHT latency hold-time 30

06改用百分比判斷

取代前一例的 ms 設定。百分比以目前 WAN 的平均延遲為基準:10 ms 降至 9 ms 即符合 10%。省略 ms 且啟用百分比時,不會隱藏要求改善 3 ms。若兩者都設定,則須同時滿足(AND);再設定 improvement-ms 3 就會加上該條件。明確設定為零可停用該門檻;刪除 improvement-percent 可改回只看 ms。測試次數與穩定時間仍然有效。

CLI 範例
delete service wan-handover group CHT latency improvement-ms
set service wan-handover group CHT latency improvement-percent 10

07明確啟用 Kernel WireGuard 支援

安全範圍:bind-udp-to-all 允許未綁定介面的 UDP 監聽服務跨 VRF 接收,不只影響 WireGuard。其他 UDP 服務應明確綁定或設定入站過濾。此選項不開放 TCP;控制程式不會自行啟用,VPP WireGuard 也不需要此設定。

CLI 範例
set vrf bind-udp-to-all
set interfaces wireguard wg0 source-group CHT

08查看出口選擇與健康狀態(exp90.1)

預設以表格顯示成員角色、介面/健康狀態、RTT 與首次撥號倒數。pending / waiting 表示等待排程,不是故障。自動化程式須明確加上 json;指定群組回傳物件,全部群組回傳陣列。這些查詢不會觸發切換或重撥。

CLI 範例
show wan-handover group CHT
show wan-handover group CHT json
show wan-handover json
語法核對版本 exp90.3

讓靜態路由跟隨 WAN 群組

自動沿用目前成員的介面與下一跳 VRF,不必寫死 pppoe0。

01引用目前的群組出口

若要取代既有 interface 路由,請在同一份候選設定中先移除原本的 interface 選項,再一起 commit。

CLI 範例
set protocols static route 100.64.100.64/32 group CHT

02明確指定固定制的下一跳

選填:Ethernet 通常從自己的 VRF 路由取得下一跳;無法唯一判定時才明確指定 gateway。PPPoE 使用點對點介面,不需在此指定 gateway。此設定不會代替您建立成員 VRF 的預設路由或健康檢查路徑。

CLI 範例
set service wan-handover group CHT member-options eth4 gateway 192.0.2.254
語法核對版本 exp90.3

使用 iftop 監看連線

以設定中的介面名稱,選擇 Kernel 流量或 VPP IP 流量取樣。

01Kernel 介面

請選擇由 Kernel 管理的介面。

CLI 範例
monitor connections interface eth4

02VPP WireGuard 介面

所選介面必須存在於 VPP 設定中;補全使用設定名稱,不需猜測內部 wg/tap 名稱。

CLI 範例
monitor connections vpp interface vppwg0
語法核對版本 exp90.3

提交前先驗證設定

套用之前先檢查候選設定,包含 BGP 必要參數與 route-map 引用。

01檢查、提交,再存檔

確認檢查結果後,再自行執行 commit 與 save。範例使用文件專用位址,請依實際網路替換。

CLI 範例
configure
set protocols bgp system-as 65001
set protocols bgp neighbor 192.0.2.2 remote-as 65002
set protocols bgp neighbor 192.0.2.2 address-family ipv4-unicast
commit check
commit
save
exit

02維持明確確認流程

commit check 不會代為確認,自動存檔也會跳過尚未確認的 commit。提交後,請先自行確認管理連線與網路狀態,再繼續下一步。

CLI 範例
commit check
commit-confirm 5

03確認連線正常後才確認

僅在前述獨立檢查通過後才執行;否則不要 confirm,讓設定的復原動作執行。

CLI 範例
confirm
save
語法核對版本 exp90.3

可選的設定自動存檔

自訂存檔間隔(分鐘),僅保存已成功提交的執行中設定。

01啟用每十分鐘自動存檔

先明確 save 一次,讓即刻重新開機也能保留定時設定;後續成功的 commit 會依間隔自動存檔。

CLI 範例
configure
set system config-management auto-save interval 10
commit
save
exit

02查看狀態與兩種執行中設定

後兩個指令讀取同一份執行中設定,包含尚未 save 的 commit;僅輸出格式不同。

CLI 範例
show configuration auto-save
show configuration
show configuration commands

03關閉自動存檔

刪除設定會停止定時器。請明確 save,讓重新開機後也維持關閉。

CLI 範例
configure
delete system config-management auto-save
commit
save
exit
語法核對版本 exp90.3

現代化 Shell,熟悉的 CLI

Carrier CLI 以 GNU Bash 5.3.15 為基礎,支援原生括號貼上,從 exp66 起使用 carrier-cli 入口。

01確認已安裝的 CLI

以管理員身分在操作模式執行。仍保留 Tab 補完、? 說明與指令權限控制。登入時會初始化原生貼上,也涵蓋由舊映像保留的帳號,不需手動輸入跳脫序列重設。

CLI 範例
show version
/bin/carrier-cli --version
語法核對版本 exp90.3

設定操作流程

局部修改、檢視差異,再提交並儲存。

01檢視、套用、儲存

此範例假設 vppwg0 已存在且設定完成。

CLI 範例
configure
set interfaces vpp wireguard vppwg0 description 'Transit tunnel'
compare
commit
save
exit

02查看系統狀態

CLI 範例
show version
show system configuration-status
show interfaces
語法核對版本 exp90.3

組合 BGP route-map

在單一 network 宣告上,組合多份可重複使用的策略。

01定義可重複使用的策略

CLI 範例
configure
set policy route-map cn rule 10 action permit
set policy route-map cn rule 10 set community add '64512:156'
set policy route-map tw rule 10 action permit
set policy route-map tw rule 10 set community add '64512:158'
set policy route-map jp rule 10 action permit
set policy route-map jp rule 10 set community add '64512:392'
set protocols bgp address-family ipv4-unicast network 203.0.113.0/24 route-map 'cn and tw and jp'
commit
save
exit

02只移除此 network 的 tw 策略

直接替換表達式,tw 策略物件仍可供其他 network 使用。系統會重新產生內部策略鏈,不需手動修改其名稱。策略在 BGP 處理路由時評估,不是每個轉送封包都執行。

CLI 範例
configure
set protocols bgp address-family ipv4-unicast network 203.0.113.0/24 route-map 'cn and jp'
commit
save
exit
語法核對版本 exp90.3

雙協定 VPP WireGuard

在點對點子網同時使用 IPv4 與 IPv6,不必額外填寫 tunnel-address。

01設定點對點隧道

對端請設定 10.77.0.1/30 與 2001:db8:77::/127,並配好對應的金鑰、endpoint 與路由。推導出的對端主機路由涵蓋兩個位址家族。

CLI 範例
configure
set interfaces vpp wireguard vppwg0 address '10.77.0.2/30'
set interfaces vpp wireguard vppwg0 address '2001:db8:77::1/127'
set interfaces vpp wireguard vppwg0 private-key '<LOCAL_PRIVATE_KEY>'
set interfaces vpp wireguard vppwg0 source-interface 'eth0'
set interfaces vpp wireguard vppwg0 peer remote public-key '<PEER_PUBLIC_KEY>'
set interfaces vpp wireguard vppwg0 peer remote endpoint '192.0.2.2'
set interfaces vpp wireguard vppwg0 peer remote port '51820'
set interfaces vpp wireguard vppwg0 peer remote allowed-ips '0.0.0.0/0'
set interfaces vpp wireguard vppwg0 peer remote allowed-ips '::/0'
set interfaces vpp wireguard vppwg0 peer remote persistent-keepalive '25'
commit
save
exit

02驗證隧道

CLI 範例
sudo vppctl show wireguard peer
sudo ping -I vppwg0 -c 3 10.77.0.1
sudo ping -6 -I vppwg0 -c 3 2001:db8:77::
語法核對版本 exp90.3

跟隨會變動的來源 IP

source-interface 與 source-address 擇一設定。

01從固定 IP 改為來源介面

適用於既有 source-address 設定。若位址來自 PPPoE,請將 eth0 換成已設定的 PPPoE 介面名稱。系統會由介面取得來源位址,並透過網路事件更新。

CLI 範例
configure
delete interfaces vpp wireguard vppwg0 source-address
set interfaces vpp wireguard vppwg0 source-interface 'eth0'
commit
save
exit

02改用固定來源位址

固定來源位址必須屬於本機,並可透過指定底層網路通訊。

CLI 範例
configure
delete interfaces vpp wireguard vppwg0 source-interface
set interfaces vpp wireguard vppwg0 source-address '192.0.2.1'
commit
save
exit
語法核對版本 exp90.3

區分隧道與底層路由

讓 endpoint 使用預設路由表,同時將解密後流量放入 VRF。

01將隧道流量放入 TENANT

CLI 範例
configure
set vrf name TENANT table '100'
set interfaces vpp wireguard vppwg0 vrf 'TENANT'
set interfaces vpp wireguard vppwg0 underlay-vrf 'default'
commit
save
exit
語法核對版本 exp90.3

一套頻寬檢視,兩種資料平面

以 Carrier bmon 查看 VPP 計數器或 Kernel 介面的頻寬。

01VPP 介面

CLI 範例
monitor bandwidth vpp interface eth4

02Kernel 介面

CLI 範例
monitor bandwidth interface eth0

03直接執行 Carrier bmon

braille=0 使用傳統直條圖。映像內也保留 bmon 相容指令。

CLI 範例
carrier-bmon --use-bit -i vpp -p eth4 -o curses:braille=0
語法核對版本 exp90.3

測試兩端 VPP 介面

從 eth4 發送有時間上限的 UDP 流量,並在對端 eth6 觀察。

01接收端 · 第二台路由器

開始前請由介面詳細資料取得對端 MAC。第一台發送流量時,保留此監控畫面。

CLI 範例
monitor bandwidth vpp interface eth6

02發送端 · 第一台路由器

比較不同配置時,必須保持封包大小、速率、CPU 分配與連線設定一致。逐步提高要求速率,觀察實際接收速率與遺失情況;要求速率不等於實測吞吐量。

CLI 範例
packet-generator vpp interface eth4 destination-mac 02:00:00:00:00:06 source-address 198.18.0.1 destination-address 198.18.0.2 packet-size 64 rate 10kpps duration 10

03查看或停止流量

CLI 範例
show vpp packet-generator
stop packet-generator vpp interface eth4
語法核對版本 exp90.3

設定 FRR 記憶體上限

為整個 FRR 服務設定可選的記憶體上限。

01設定上限

500MB 僅為示意,不是 full route 的容量建議。請先量測實際負載,再選擇 2GB 或其他合適值。

CLI 範例
configure
set service frr maxium-memory-size 500MB
commit
save
exit

02查看實際生效的限制

CLI 範例
sudo systemctl show frr.service --property=MemoryCurrent,MemoryMax

03移除此選用上限

未設定時,Carrier Router 不另外加入記憶體上限;其他管理員或主機層級限制仍可能生效。

CLI 範例
configure
delete service frr maxium-memory-size
commit
save
exit
語法核對版本 exp90.3

找出哪個開機元件失敗

查看各元件結果,再修復受影響的設定。exp85 開機時會逐筆略過 OSPF/OSPFv3 不存在的介面引用,含 VRF,正常介面繼續運作。Partial 表示原設定仍保留可編輯,完成修復前會維持存檔保護。

01檢查元件結果

查看 System、SSH、BGP 與其他已設定元件旁的 OK 或 Failed。指令輸出會指出詳細診斷資料位置。

CLI 範例
show system configuration-status

02局部修正 BGP 設定

僅為示例:必須已有 BGP 實例與 cn/jp 策略。請修正實際錯誤原因,而非不相關欄位。若降級開機後 save 被拒絕,請先完成保留的失敗區段復原,不要繞過儲存保護。

CLI 範例
configure
set protocols bgp address-family ipv4-unicast network 203.0.113.0/24 route-map 'cn and jp'
compare
commit
save
exit
語法核對版本 exp90.3

透過預設路由解析下一跳

未明確停用時,IPv4 與 IPv6 NHT 可透過預設路由解析。

01明確停用

CLI 範例
configure
set system ip nht no-resolve-via-default
set system ipv6 nht no-resolve-via-default
commit
save
exit

02恢復 Carrier Router 預設行為

CLI 範例
configure
delete system ip nht no-resolve-via-default
delete system ipv6 nht no-resolve-via-default
commit
save
exit
語法核對版本 exp90.3
CARRIER ROUTER / EXP90.3

下載 Carrier Router

exp90.3 實驗版本 · AMD64 · 2026 年 9 月 20 日

LIVE / INSTALL ISO

Carrier Router exp90.3

784.0 MiB · x86-64 · BIOS / UEFI

下載 ISO ↓

carrier-router-2026.09.20-exp90.3-generic-amd64.iso

ISO SHA-256

99b5a93e95c99fd4a43319112689ee3d7610c6a7b08e4ae3f8232f55918f1c4b

下載後請核對 SHA-256

對應原始碼

依各元件授權提供所需原始碼與必要建置資料,採獨立封存檔下載,不開放內部倉庫。寬鬆授權且不要求提供原始碼的獨立元件,其修改原始碼不包含在內;原有授權與聲明仍適用。

原始碼與建置資料

Carrier 修改原始碼與建置腳本carrier-modified-sources-exp90.3.tar.gz · 29.4 MiB對應 Debian DNS 原始碼carrier-updated-sources-exp90.3.tar.gz · 5.8 MiBOpenVPN 2.7.7 對應原始碼carrier-updated-sources-exp82.tar.gz · 2.1 MiB更新套件的對應原始碼carrier-updated-sources-exp80.tar.gz · 120.6 MiB核心、驅動與第三方原始碼carrier-third-party-sources-exp66.tar · 340.3 MiBDebian 對應原始碼套件carrier-debian-sources-exp66.tar · 1097.2 MiB
FAQ

開始之前,你可能想知道。

這裡可以下載 ISO 嗎?

可以。請至下載區取得 Carrier Router exp90.3 AMD64 ISO,並核對 SHA-256 校驗值。對應原始碼封存與授權聲明也可獨立下載,不需要帳號。安裝前請閱讀升級先決條件。

這些範例能直接作為正式環境的預設設定嗎?

不能。位址、金鑰、community 與介面名稱都是示意值。請先閱讀各項注意事項,再依實際拓樸調整。

VPP packet-generator 可以取代 TRex 嗎?

不能。這是內建的流量產生工具,適用於受控環境的介面測試。這些範例不構成經認證的吞吐量、延遲或 RFC 2544 效能測試。

所有擴充功能也都適用於 Kernel 介面嗎?

不一定。文件會標示 VPP 專用指令。例如這裡的 source-interface 範例僅適用於 VPP WireGuard,不應假設 Kernel WireGuard 也有相同的 CLI。

exp90.3 ISO 已開放下載

修正 VPP 原生發包器在異常時間差下可能失去限速的問題,保留 WAN handover 配置鎖修正、表格與 JSON 輸出。已通過實機驗證的 ISO、對應原始碼與 SHA-256 校驗值均可免帳號下載。安裝前請閱讀升級先決條件。

EXP90.3 / DOCS