Network Namespaceを可視化するツールを作ってみた

ルーティング、サブネット、VLAN——教科書で概念は分かる。でも「本当に分かってるか?」と聞かれると怪しい。手を動かさないと身につかない。

そんなとき『Linuxで動かしながら学ぶTCP/IPネットワーク入門』(もみじあめ著)に出会った。この本がNetwork Namespaceでネットワークを学ぶアプローチを教えてくれた。

1台のマシンの中にネットワーク環境を何個でも作れる。ルーター、スイッチ、ホストを全部ソフトウェアで再現できる。物理機材なし。クラウド代なし。最強の学習ツールだと思った。

しかし、、、、

# namespaceの中でコマンドを打つたびにこれ
ip netns exec ns1 ip addr show
ip netns exec ns1 ip route
ip netns exec ns1 ping 10.0.0.2

毎回 ip netns exec <ns名> って打つの、普通にだるい。

しかもnamespaceが3つに増えた瞬間、頭の中のネットワーク図が崩壊する。

ポテンシャルは最強なのに、CUIが足を引っ張ってる。 じゃあGUIにすればいい。そう思って作ったのが netns-viz だ。


Network Namespaceとは

Linux OSの機能で、複数の独立したネットワーク空間を作る機能。

ルーター3台経由のネットワークも、VLANで分離された環境も、全部1台で再現できる。教科書の図がそのまま動く環境が手に入る。

ちなみにDockerやKubernetesも裏側でこの仕組みを使ってる。namespaceを理解すると、コンテナネットワークも自然と分かるようになる。

# 部屋を作る
ip netns add ns1

# ケーブル(vethペア)を用意、片方をns1に通す
ip link add veth0 type veth peer name veth1
ip link set veth1 netns ns1

# ns1の中でIPアドレスを設定
ip netns exec ns1 ip addr add 10.0.0.1/24 dev veth1
ip netns exec ns1 ip link set veth1 up

問題は使い勝手だ。


CUIの何が辛いか

1. 全体像が見えない

namespaceが5つ、10個と増えると、作成したネットワーク構成の全体像が見えない。

テキスト100行読み解くより、図1枚見るほうが早い。 なのにCLIにはその図がない。

2. ip netns exec が毎回だるい

ip netns exec ns1 ping 10.0.0.2       # pingしたいだけなのに
ip netns exec ns2 ip route show        # ルーティング確認したいだけなのに
ip netns exec ns1 tcpdump -i veth1     # tcpdump見たいだけなのに

学習の本質じゃない部分でストレスが溜まる。

既存のGUIツールは?

ツール問題
Skydiveエンタープライズ向け。pingしたいだけなのにショベルカー呼ぶようなもの
docker-network-graphip netns のnamespaceは対象外

学習向けのGUIツールは存在しなかった。 じゃあ作るか。


netns-viz

Docker Desktopだけあればいい。あとはドラッグ&ドロップ。

「Add Namespace」→ ノードが出る → 「Add Veth」で繋ぐ → IPアドレス設定 → ping通る。

トポロジが常に見えてる。 namespaceごとに統合ターミナルが開けるから、ip netns exec も不要。

[📸 スクリーンショット: アプリ起動直後の初期画面]

CUIの問題netns-vizの解決
全体像が見えないキャンバスにトポロジ常時表示
ip netns exec が毎回必要namespace選んでターミナル開くだけ
ip nets exec~は自動補完
設定ミスに気づきにくい接続関係が可視化されてる
構成の再現が面倒JSON保存・bashスクリプト自動生成

できること:

カテゴリ内容
トポロジ構築namespace追加・削除、vethペア接続、ブリッジ作成
ネットワーク設定IP/MAC設定、ルーティングテーブル、802.1Q VLAN
ターミナルコマンド実行各namespaceごとの統合ターミナル(ping, tcpdump直接実行)
永続化JSON保存・読み込み、bashセットアップスクリプト生成

対応OS: macOS, Windows(Docker Desktop必要)

GitHub: https://github.com/ichyy-n/netns-viz(MIT License)


アプリの仕組み

Network NamespaceはLinuxカーネルの機能。macOS/Windowsにはない。でも学習ツールならmacOS/Windowsで動いてほしい。

この矛盾をDockerで解決した。

macOS / Windows (Electron アプリ)
  ↓ Docker Remote API (dockerode)
Docker Desktop (Linux VM)
  ↓ コンテナ (ubuntu:24.04)
Linux カーネル → network namespace

アプリ起動時にコンテナ netns-viz-lab を自動作成。iproute2, tcpdump, iptablesがプリインストール済み。ユーザーが触ってるのはmacOSのアプリだけど、実際に動いてるのはLinuxカーネル。 セットアップ不要。

[📸 スクリーンショット: Docker接続完了画面]


やってみよう

5分でping通る。

インストール

  1. Docker Desktop をインストールして起動
  2. GitHubリリースページ から最新版ダウンロード(macOS: .dmg / Windows: .exe
  3. アプリ起動(初回のみDockerイメージビルドで数分かかる)

基本: 2つのnamespaceをvethで繋ぐ

  1. 「+ Namespace」で ns1ns2 を作成
  2. 「+ Veth Pair」で接続
  3. IPアドレス設定(10.0.0.1/2410.0.0.2/24
  4. ns1 のターミナルで ping 10.0.0.2

[📸 スクリーンショット: IPアドレス設定のGUI画面]

[📸 スクリーンショット: ns1とns2がvethで繋がったトポロジ]

[📸 スクリーンショット: ns1のターミナルで ping 実行中]

応用: ルーター構成

3つのnamespaceで、真ん中をルーターにする構成もGUIなら直感的に組める。CLIだとコマンド10行以上で一箇所ミスったらping通らないが、GUIなら接続関係を目で見ながら構築できる。

[📸 スクリーンショット: ルーター構成の複雑なトポロジ]

トポロジはJSON保存でき、bashスクリプトとして出力すれば他の環境で bash setup.sh 一発再現。


まとめ

Network Namespaceはネットワーク学習の最強ツールだ。CUIが辛いだけで。

netns-vizは、トポロジを可視化して、ip netns exec の呪文から解放する。Docker DesktopさえあればmacOS/Windowsで動く。

ネットワークの仕組みを「本当に」理解したいなら、触ってみてほしい。

GitHub: https://github.com/ichyy-n/netns-viz(MIT License)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする