ネットワークの勉強をしていると、構成図は読める。用語も分かる。でも「なぜこの設定でこうなるか」が腹落ちしない。
VLANのタグ付け、ブリッジのMACアドレス学習、iptablesのチェーン。教科書の説明は理解できるのに、「分かったつもり」と「本当に分かっている」の間には深い溝がある。
原因は明白だった。実際に手を動かしていないからである。
ルーティング、サブネット、VLAN——教科書で概念は分かる。でも「本当に分かってるか?」と聞かれると怪しい。やはりネットワークは手を動かさないと身につかない。
じゃあ作るか
Linuxには Network Namespace(ネットワーク名前空間)という仕組みがある。1台のマシン上に独立した仮想ネットワークを何個でも作れる。ルータもスイッチもファイアウォールも、全部コマンドで再現できる。
ただし、問題がある。全部CLIでやるのが面倒すぎる。
namespace作って、vethペア作って、ブリッジ作って、IPアドレス振って、ルーティング設定して……。構成図1枚を再現するのに何十行もコマンドを打つ必要がある。そして打ち間違えたら最初からやり直し。毎回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でポチポチ構成を作って、裏でLinuxコマンドが自動実行される」 — そういうツールが欲しかった。探しても見つからなかったので、自分で作った。それが netns-viz である。
netns-vizでできること
netns-vizは、Linuxネットワーク名前空間をGUIで視覚的に操作するデスクトップアプリである。

| 機能 | 内容 |
|---|---|
| Namespace作成 | ドラッグ&ドロップで仮想ホスト/ルータを配置 |
| vethペア接続 | クリックで仮想LANケーブルを接続 |
| IPアドレス設定 | GUI入力 → 裏で ip addr add が実行される |
| ブリッジ(L2スイッチ) | GUIでブリッジ作成 → MACアドレス学習が動く |
| VLAN(802.1Q) | Access/Trunkポート、Bridge VLAN filtering対応 |
| ルーティング | 経路設定・表示。スタティックルートをGUIで追加 |
| ip_forward | namespace単位でON/OFF。ルータとして動作させる |
| iptables | filter/nat/mangle/rawテーブル。GUIでルール追加 |
| ターミナル | 各namespaceでコマンド実行。pingやtracerouteをip netns exec “ns名”抜きで直接打てる |
| 保存/読み込み | トポロジをJSON保存。いつでも同じ構成を再現可能 |
重要なポイント: GUIで設定したものは全て、裏で実際のLinuxコマンドとして実行される。描画だけの「お飾り」ではない。Dockerコンテナ内に本物のネットワークが構築される。
アプリの仕組み
React + ElectronでGUIを作り、dockerodeでDocker APIを叩いて、コンテナ内にLinuxネットワークを構築する構成である。ネットワーク操作は全てDocker内のLinuxで行うため、macOSやWindowsでもLinuxのネットワークコマンドをそのまま体験できる。
macOS / Windows (Electron アプリ)
↓ Docker Remote API (dockerode)
Docker Desktop (Linux VM)
↓ コンテナ (ubuntu:24.04)
Linux カーネル → network namespace
アプリ起動時にコンテナ netns-viz-lab を自動作成する。
iproute2, tcpdump, iptables等、必要なパッケージはプリインストール。

やってみよう
インストール
- 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



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

トポロジはJSON保存でき、bashスクリプトとして出力すれば他の環境で bash setup.sh 再現可能。
Githubで公開中
netns-vizはオープンソースで公開している。
GitHub: https://github.com/ichyy-n/netns-viz
Docker Desktopさえ入っていれば、すぐ使える。ネスペ受験を考えている人、ネットワークを「動かして理解したい」人はぜひ試してみてほしい。
「読んで分かる」から「動かして分かる」へ。 netns-vizは、その橋渡しをするツールである。
コメント