ルーティング、サブネット、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-graph | ip 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通る。
インストール
- Docker Desktop をインストールして起動
- GitHubリリースページ から最新版ダウンロード(macOS:
.dmg/ Windows:.exe) - アプリ起動(初回のみDockerイメージビルドで数分かかる)
基本: 2つのnamespaceをvethで繋ぐ
- 「+ Namespace」で
ns1とns2を作成 - 「+ Veth Pair」で接続
- IPアドレス設定(
10.0.0.1/24と10.0.0.2/24) 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)
コメント