Network NamespaceのGUIツールを作ってみた

ネットワークの勉強をしていると、構成図は読める。用語も分かる。でも「なぜこの設定でこうなるか」が腹落ちしない。

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_forwardnamespace単位でON/OFF。ルータとして動作させる
iptablesfilter/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接続完了画面

やってみよう

インストール

  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 再現可能。


Githubで公開中

netns-vizはオープンソースで公開している。

GitHubhttps://github.com/ichyy-n/netns-viz

Docker Desktopさえ入っていれば、すぐ使える。ネスペ受験を考えている人、ネットワークを「動かして理解したい」人はぜひ試してみてほしい。


「読んで分かる」から「動かして分かる」へ。 netns-vizは、その橋渡しをするツールである。

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

コメント

コメントする