iproute2

最後更新: 2026-08-28 10:51:46 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

iproute2 是用來檢查與設定 Linux 核心網路堆疊的標準使用者空間工具套件。此套件 涵蓋連結、位址、路由、鄰居、隧道、流量控制、socket、硬體卸載及數種專用網路 子系統。多數命令透過 Netlink 訊息與核心交換資料;它們並不實作轉送封包的資料 平面。

專案會為每個 Linux 核心版本發布一個對應版本。相符版本會提供同一代核心介面, 不過,只要不要求核心不支援的功能,較新版 iproute2 也能搭配較舊的核心運作。

Linux 使用者空間網路管理史 #

Linux 網路管理採分層方式發展。低階公用程式修改執行中的核心狀態,而設定框架與 daemon 則決定應保留哪些狀態,以及何時套用。

時期軟體角色與歷史意義
1990 年代初期衍生自 BSD 的命令與 net-toolsifconfig、route、arp 與 netstat 等個別命令,成為 Linux 管理連結、IPv4 位址、路由、鄰居項目與統計資料的慣用介面。其介面高度依賴網路 ioctl 與 /proc,因此無法表示許多後來加入的核心功能。
1990 年代起發行版網路指令碼與 ifupdownDebian 的 /etc/network/interfaces 及發行版特有的網路指令碼等檔案,在低階命令之上加入持久設定。ifup 與 ifdown 描述介面生命週期,但它們是協調工具而非核心 API。
1990 年代末期起iproute2Alexey Kuznetsov 在核心的進階路由、流量控制及 RTnetlink 工作發展期間建立了 iproute2。ip 整合 ifconfig、route、arp 與 iptunnel 所呈現的物件模型;ss 與 tc 則涵蓋 socket 檢查與流量控制。Netlink 可擴充且以訊息為基礎的介面,讓此套件得以跟進新的核心功能。
2004 年起NetworkManagerNetworkManager 引入長時間執行的連線管理程式,用於動態有線、Wi-Fi、行動網路及 VPN 連線。連線設定檔表示期望狀態,而 nmcli、nmtui 與圖形化用戶端則控制 daemon。
2014 年起systemd-networkdsystemd 210 加入宣告式網路管理程式,著重於開機階段及持續管理的連結。.link、.netdev 與 .network 檔案定義命名、虛擬裝置、位址、路由及相關政策;networkctl 提供執行期檢查與控制。
2016 年起Netplan 與其他設定前端Netplan 加入 YAML 設定層,為 NetworkManager 或 systemd-networkd 產生設定。此類前端會標準化政策,但不會取代所選的網路管理 daemon,也不會取代其下的核心介面。

各世代會並存,因為它們解決不同問題。ip addr add 會立即變更執行中的核心,而 NetworkManager、systemd-networkd 或 ifupdown 擁有持久政策,之後可能取代該項 變更。除了診斷或刻意建立暫時狀態外,管理員應避免使用臨時的 ip 命令修改由 daemon 管理的介面。

封包篩選也有不同的發展脈絡:iptables 與 nft 設定的是 Netfilter,而不是 iproute2 管理的路由與連結物件。

ip 物件模型 #

ip 採用 ip [options] object command 格式。主要物件對應至核心網路概念:

物件用途
link檢查或設定網路裝置及鏈路層屬性
address管理 IPv4 與 IPv6 位址
route管理單播、多播及特殊路由
rule管理路由政策資料庫規則
neighbour管理 ARP 與 IPv6 鄰居探索項目
netns建立具名網路命名空間,並在其中執行操作
tunnel, l2tp, macsec設定隧道與安全連結類型
xfrm管理 IPsec 狀態與政策
nexthop管理可重複使用的下一跳物件與群組
mptcp管理 Multipath TCP 端點與限制
monitor串流輸出 RTnetlink 狀態變更

物件清單持續增加,因為 ip 是整合於單一執行檔背後的一組前端。ip help 列出 頂層物件,ip object help 則說明已安裝版本支援的命令。

iproute2 7.1.0 安裝的執行檔 #

上游版本封存檔包含原始碼,而非預先建置的二進位檔。下表列出 iproute2 7.1.0 上游 make install 規則安裝的所有命令名稱;撰寫本文時,此版本為最新版本。 發行版套件可能會拆分、省略、重新定位或修補這些命令。

命令用途建置或安裝附註
ip檢查與設定連結、位址、鄰居、路由、規則、命名空間、隧道及相關網路物件核心命令
rtmon記錄 RTnetlink 的連結、位址、路由與鄰居事件,以供日後檢查核心命令;ip monitor 提供部分重疊的互動功能
routel以欄式格式輸出路由表安裝的 Python 指令碼
tc設定流量控制的佇列規則、類別、篩選器與動作核心命令
bridge管理 bridge 連結、轉送資料庫、VLAN、多播資料庫與 bridge 連接埠狀態核心命令
ss檢查 socket、協定狀態、擁有者、佇列、記憶體與診斷資料netstat socket 報告功能的後繼工具
nstat回報核心 SNMP 與協定計數器,包括相較於前一次呼叫的變化核心統計命令
ifstat回報各介面的封包與位元組計數器核心統計命令
rtacct從核心路由計量資料回報按 routing realm 分組的流量計數器核心統計命令
lnstat定期回報透過 /proc/net/stat 匯出的指定計數器一般統計命令
rtstat透過 lnstat 的相容模式回報路由快取統計資料指向 lnstat 的符號連結
ctstat透過 lnstat 的相容模式回報連線追蹤統計資料指向 lnstat 的符號連結
arpd維護使用者空間 ARP 快取,並從持久資料庫回應核心鄰居要求僅在 Berkeley DB 相容標頭與函式庫可用時建置
genl查詢及呼叫 Generic Netlink family核心命令;主要用於協定開發與診斷
tipc設定與檢查 Transparent Inter-Process Communication bearer、連結、節點、socket 與命名空間libmnl 可用時建置
devlink設定與診斷裝置層級的網路資源、連接埠、韌體參數、健康狀態回報器、trap 與硬體速率libmnl 可用時建置
rdma檢查與設定 RDMA 裝置、連結、資源、系統設定及統計資料libmnl 可用時建置
dcb檢查與設定 Data Center Bridging 緩衝區、優先級、Priority Flow Control、ETS 及應用程式對應libmnl 可用時建置
vdpa管理 vDPA 管理裝置與虛擬資料路徑加速器裝置libmnl 可用時建置
netshaper檢查與設定透過 Netlink 公開的硬體傳輸整形物件libmnl 可用時建置
dpll檢查、設定與監控用於網路時脈同步的數位鎖相迴路裝置與 pinlibmnl 可用時建置

原始碼樹狀結構中也有名為 maketable、normal、pareto 與 paretonormal 的程式, 但建置程序只使用它們產生 tc 分布表。安裝目標會複製其產生的資料,而非這些主機 工具,因此它們不是發布版命令。

選擇正確的層級 #

  • 使用 iproute2 進行即時檢查、診斷、實驗,以及高階管理程式未提供的低階設定。
  • 當狀態必須在重新開機後保留,並一致回應裝置生命週期事件時,請使用 NetworkManager、systemd-networkd、ifupdown 或發行版設定層。
  • 使用 nft 進行封包篩選與網路位址轉譯,因為這些操作屬於 Netfilter。
  • 應讓 iproute2 文件與已安裝版本相符,因為使用者空間只能編碼建置時已知的功能, 而執行中的核心也只能接受其已實作的功能。

參考資料 #

評論

在 GitHub 上閱讀或評論(發表評論需要登入)