iproute2 は、カーネルのネットワークスタックを調査、設定するための標準的な Linux ユーザー空間スイートです。リンク、アドレス、ルート、近隣、トンネル、トラフィック制御、 ソケット、ハードウェアオフロード、および複数の専用ネットワークサブシステムを扱います。 大半のコマンドはカーネルと Netlink メッセージを交換しますが、パケットを転送する データプレーン自体を実装するものではありません。
プロジェクトは Linux カーネルの各リリースに対応するリリースを一つ公開しています。 対応するバージョンは同世代のカーネルインターフェイスを公開します。ただし、新しい iproute2 でも、 未対応の機能を要求しない限り、古いカーネルに対して動作できます。
Linux ユーザー空間ネットワーク管理の歴史 #
Linux のネットワーク管理は複数のレイヤーを重ねて発展しました。低レベルユーティリティは 稼働中のカーネル状態を変更し、設定フレームワークとデーモンは永続化する状態と適用時期を決定します。
| 時期 | ソフトウェア | 役割と歴史的意義 |
|---|---|---|
| 1990 年代初頭 | BSD 由来のコマンドと net-tools | ifconfig、route、arp、netstat などの個別コマンドが、リンク、IPv4 アドレス、ルート、近隣エントリ、統計情報を扱う従来の Linux インターフェイスになりました。これらのインターフェイスはネットワーク関連の ioctl と /proc に大きく依存するため、後に追加された多くのカーネル機能を表現できません。 |
| 1990 年代以降 | ディストリビューションのネットワークスクリプトと ifupdown | Debian の /etc/network/interfaces やディストリビューション固有のネットワークスクリプトなどのファイルにより、低レベルコマンドを利用した永続設定が追加されました。ifup と ifdown はインターフェイスのライフサイクルを記述しますが、カーネル API ではなくオーケストレーションツールです。 |
| 1990 年代後半以降 | iproute2 | Alexey Kuznetsov は、カーネルの高度なルーティング、トラフィック制御、RTnetlink の開発と並行して iproute2 を作成しました。ip は ifconfig、route、arp、iptunnel が公開していたオブジェクトモデルを統合し、ss と tc はソケット調査とトラフィック制御を担いました。Netlink の拡張可能なメッセージベースのインターフェイスにより、このスイートは新しいカーネル機能に追随できました。 |
| 2004 年以降 | NetworkManager | NetworkManager は、動的な有線、Wi-Fi、モバイル、VPN 接続に対応する常駐型接続マネージャーを導入しました。接続プロファイルが望ましい状態を表現し、nmcli、nmtui、グラフィカルクライアントがデーモンを制御します。 |
| 2014 年以降 | systemd-networkd | systemd 210 は、起動時および継続的に管理されるリンクを対象とした宣言的ネットワークマネージャーを追加しました。.link、.netdev、.network ファイルが命名、仮想デバイス、アドレス、ルート、関連ポリシーを定義し、networkctl が実行時の調査と制御を提供します。 |
| 2016 年以降 | Netplan およびその他の設定フロントエンド | Netplan は、NetworkManager または systemd-networkd 用の設定を生成する YAML 設定レイヤーを追加しました。この種のフロントエンドは、選択したネットワーク管理デーモンや、その下層にあるカーネルインターフェイスを置き換えることなくポリシーを標準化します。 |
各世代は異なる問題を解決するため、併存しています。ip addr add は実行中のカーネルを
即座に変更する一方、NetworkManager、systemd-networkd、ifupdown は永続ポリシーを
管理し、後からその変更を置き換える可能性があります。診断または意図的な一時状態の設定を除き、
デーモンが管理するインターフェイスを場当たり的な ip コマンドで変更するべきではありません。
パケットフィルタリングも別の系譜に属します。iptables と nft は、iproute2 が管理する
ルーティングオブジェクトやリンクオブジェクトではなく、Netfilter を設定します。
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 | ブリッジリンク、転送データベース、VLAN、マルチキャストデータベース、ブリッジポート状態を管理する | コアコマンド |
ss | ソケット、プロトコル状態、所有者、キュー、メモリ、診断データを調査する | netstat のソケット報告機能の後継 |
nstat | 前回の呼び出し以降の変化を含む、カーネルの SNMP カウンターとプロトコルカウンターを報告する | コア統計コマンド |
ifstat | インターフェイスごとのパケットカウンターとバイトカウンターを報告する | コア統計コマンド |
rtacct | カーネルのルートアカウンティングデータから、ルーティングレルム別にまとめたトラフィックカウンターを報告する | コア統計コマンド |
lnstat | /proc/net/stat を通じて公開される選択済みカウンターを定期的に報告する | 汎用統計コマンド |
rtstat | lnstat の互換モードを通じてルーティングキャッシュ統計を報告する | lnstat へのシンボリックリンク |
ctstat | lnstat の互換モードを通じてコネクショントラッキング統計を報告する | lnstat へのシンボリックリンク |
arpd | ユーザー空間の ARP キャッシュを維持し、永続データベースからカーネルの近隣要求に応答する | Berkeley DB 互換ヘッダーとライブラリが利用できる場合のみビルドされる |
genl | Generic Netlink ファミリーを照会、呼び出す | コアコマンド。主にプロトコル開発と診断に有用 |
tipc | Transparent Inter-Process Communication のベアラー、リンク、ノード、ソケット、名前空間を設定、調査する | libmnl が利用できる場合にビルドされる |
devlink | デバイスレベルのネットワークリソース、ポート、ファームウェアパラメーター、ヘルスレポーター、トラップ、ハードウェアレートを設定、診断する | libmnl が利用できる場合にビルドされる |
rdma | RDMA デバイス、リンク、リソース、システム設定、統計を調査、設定する | libmnl が利用できる場合にビルドされる |
dcb | Data Center Bridging のバッファー、優先度、Priority Flow Control、ETS、アプリケーションマッピングを調査、設定する | libmnl が利用できる場合にビルドされる |
vdpa | vDPA 管理デバイスと仮想データパスアクセラレーターデバイスを管理する | libmnl が利用できる場合にビルドされる |
netshaper | Netlink を通じて公開されるハードウェア送信シェーピングオブジェクトを調査、設定する | libmnl が利用できる場合にビルドされる |
dpll | ネットワーククロック同期に使用する Digital Phase-Locked Loop デバイスとピンを調査、設定、監視する | libmnl が利用できる場合にビルドされる |
maketable、normal、pareto、paretonormal という名前のプログラムも
ソースツリーにありますが、ビルドでは tc の分布表の生成だけに使用されます。
インストールターゲットはこれらのホストツールではなく、生成されたデータをコピーするため、
リリースコマンドには含まれません。
適切なレイヤーの選択 #
- 即時の調査、診断、実験、および上位レベルのマネージャーが公開していない低レベル設定には、 iproute2 を使用します。
- 再起動後も状態を維持し、デバイスのライフサイクルイベントに一貫して対応する必要がある場合は、
NetworkManager、
systemd-networkd、ifupdown、またはディストリビューションの 設定レイヤーを使用します。 - パケットフィルタリングとネットワークアドレス変換には
nftを使用します。これらの処理は Netfilter に属するためです。 - ユーザー空間はビルド時に既知だった機能しかエンコードできず、実行中のカーネルは 実装済みの機能しか受け付けられないため、iproute2 のドキュメントをインストール済み バージョンに合わせます。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)