このプロジェクトについて
pktcは、ネットワークケーブル上で想定されるパケット構造を記述し、その結果として対応するLinuxカーネルトンネルデバイスの設定を自動的に導き出すCLIツールおよびツリータイリングコンパイラです。
`netplan`、`systemd-networkd`、NetworkManagerのようにデバイスタイプを最初に指定してからパラメータを埋めるのではなく、pktcは逆のアプローチを取ります。つまり、カプセル化スタックをツリーとして記述し、ツールがそれを生成するカーネルプリミティブを決定します。
このツールの核心となるアイデアは「ツリータイリングによる命令選択」です。カプセル化スタックはスパイン(プロトコル層の線形リスト)に平坦化され、その後デバイス形状のタイルで覆われます。これはコンパイラのバックエンドが機械命令を選ぶ際の手法と似ていますが、ここではタイルはLinuxトンネルデバイスであり、出力されるコードは`iproute2`コマンドです。
サポートされているタイルには、IPIP(`ipv4 · ipv4`)、GRE(`ipv4 · gre · ipv4`)、GRE tap(`ipv4 · gre · ethernet`)、VXLAN(`ipv4 · udp · vxlan · ethernet`)などがあります。ネストされたトンネルは複数のタイルを組み合わせることで自然に構成され、特別な処理は必要ありません。
主なコマンドは以下の通りです:
- `pktc lower` — デバイス作成のための`ip link` / `ip addr`コマンドを出力
- `pktc mirror` — 対向側の対称的な設定を出力
- `pktc expect` — 検証用にアンダーレイトラフィックがどのようなものになるかを出力
- `pktc parse` — 記述ファイルからカプセル化スパインを出力
特徴的な機能として、ループ閉鎖テストモードがあります。`make netns`はvethペア上に2つのネットワーク名前空間を構築し、同じ記述から両端を設定し、トラフィックを流してアンダーレイをキャプチャします。ゴールデンテストにより意図したコマンドが出力されたことを確認し、カーネルテストでデバイスが正しく作成されたことを確認し、キャプチャでツリーが示した通りのトラフィックが伝送されることを証明します。
`go install github.com/vinodhalaharvi/pktc/cmd/pktc@latest`でインストールするか、`make check`、`make demo`、`make netns`でソースからビルドできます。
このプロジェクトは初期段階であり、現在は4つのタイルと1つのバックエンドのみをサポートしています。Geneve、VLAN、XFRM、WireGuardは開発中にカーネルモジュールが利用できなかったため意図的に除外されています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.