1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MacOS(Sequoia)でMininet-WiFiを動かす方法 (VirtualBox利用)

Last updated at Posted at 2026-01-30

概要

Mininet-WiFi とは、ソフトウェアで仮想ネットワーク環境を定義して動かせるMininetにWi-Fiのノードを利用できるよう拡張したものです。

MacでMininet-WiFiを動かしたかったのですが、若干苦労したのでメモ。
最終的に可能だったのは以下の構成です。

MacOS Sequoia 15.7.3
VirtualBox 7.2.4
Ubuntu 24.04.3 (ARM64 Desktop版)

構成

VirtualBox上のUbuntu内で、Mininet-WiFiのgitリポジトリにあるDockerfileをDockerでビルドして動かします

image.png

手順

VirtualBoxをインストール

UbuntuのISOをダウンロード

VM新規作成

VirtualBoxで仮想マシンを新規作成します。

VM名: 適当にわかる名前
ISOイメージ: ダウンロードしたISOファイル
OS: Linux
OSディストリビューション: Ubuntu
OSバージョン: Ubuntu 24.04 LTS (Noble Numbat) (ARM64-bit)
無人インストール: なし (日本語キーボードを選択したいため)

仮想ハードウェア
メインメモリ: 6GBぐらい?
CPU: 4つぐらい (マシンの搭載CPUの1/3以下あたり良いかと思います)

ネットワーク設定

アダプター2でホストオンリーネットワークを選択して、存在する項目を選択。

最初はVirtualBox自体の設定の「ネットワーク」で新規作成する必要があります。設定項目はそのままで大丈夫。

Ubuntuセットアップ

VM起動後、普通にセットアップします。

若干トラブルがありました。しばらくしてインストールが動かなくなりましたが、画面右上からマシンのリスタートを選んだりしたらなぜか進みました。

止まったときのログの最後は以下のような感じでした。

curtin command in-target

インターネット接続をなくすと進むみたいな話も見かけましたが真偽不明です。

Macからsshでアクセスできるようにする

  • Desktop UIから設定アプリのSystemでsshをONにする
  • sshをインストール
    sudo apt install openssh-server
    sudo systemctl restart ssh
    
  • sshプロセスがいるか確認
    ps aux | grep ssh
    
  • Macのターミナルからログインしてみる
    ssh hammmm@mininet-wifi2.local 
    ssh ログイン名@マシン名.local
    
  • 入れない場合は以下を確認しましょう
    • sshプロセスが動いているか
    • avahiプロセスが動いているか
      • なければ sudo apt install -y avahi-daemon
    • ホストオンリーネットワークのIPが取得できているか?
      • ip a してみましょう
      • sudo dhclient -v enp0s9 などでIPがとれるかもです
      • 再起動後もIPとれるようにするには?
        • /etc/netplan/ のyamlファイルで、enp0s9のdhcp4もtrueにする

git, docker, (tmux) インストール

自分はtmuxも使うので入れます。tmuxの利点としては、ターミナルを画面分割できるだけでなく、MacBookをスリープしたりして、sshが切れてもVMが動いていれば履歴が残っていて、tmux attachすると前回そのままの状態で引き続き作業できる、というのがあります。

sudo apt install git tmux
  • dockerインストール

snapとaptの方式がありますが、どうもsnapだと/var/run/docker.sock のパーミッション問題が出るのでaptのほうが良さそうでした。

sudo apt install docker.io

# dockerグループに自分を入れる
sudo usermod -a -G docker $USER

# グループ変更を反映するためVM再起動
sudo reboot
sudo snap install docker

mininet-wifi クローン、Dockerビルド

git clone https://github.com/intrig-unicamp/mininet-wifi.git
docker build -t mininet-wifi:v1 .

Dockerイメージを確認します。

docker images
REPOSITORY     TAG       IMAGE ID       CREATED              SIZE
mininet-wifi   v1        957341e7b543   About a minute ago   2.32GB

Docker起動、mininet-wifi起動

Dockerは以下の感じで起動します。(https://github.com/intrig-unicamp/mininet-wifi/ 参照)
Ubuntu側のデバイスを利用するためのオプション設定が重要のようです。

docker run -it --rm --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:rw --net host -v /sys/:/sys -v /lib/modules:/lib/modules -v /sys/kernel/debug:/sys/kernel/debug -v /var/run/netns:/var/run/netns mininet-wifi:v1

Docker内のbashが起動します。

おもむろに

mn --wifi 

とやってみましたが、以下のようなエラーが出ました。

ovs-vsctl exited with code 1
*** Error connecting to ovs-db with ovs-vsctl
Make sure that Open vSwitch is installed, that ovsdb-server is running, and that
"ovs-vsctl show" works correctly.
You may wish to try "service openvswitch-switch start".

そこで、openvswitchサービスを開始します。

service openvswitch-switch start
# mn --wifi
/usr/local/bin/mn:4: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  __import__('pkg_resources').run_script('mininet-wifi==2.7', 'mn')
*** Adding stations:
sta1 sta2 
*** Adding access points:
ap1 
*** Configuring nodes...
*** Creating network
*** Adding controller
*** Adding hosts:

*** Adding switches:

*** Adding links:
(sta1, ap1) (sta2, ap1) 
*** Starting controller(s)
c0 
*** Starting L2 nodes
ap1 ...
*** Starting CLI:
mininet-wifi>

やっとコマンドラインが出ました!
mininet-wifiは、何も指定しないとAP(WiFiアクセスポイント)1つにSTA(WiFiクライアント)2つというシンプルなネットワークを構成します。

mininet-wifi> nodes
available nodes are: 
ap1 c0 sta1 sta2

mininet-wifi> links
ap1-wlan1<->wifi (use iw/iwconfig to check connectivity) 
sta1-wlan0<->wifi (use iw/iwconfig to check connectivity) 
sta2-wlan0<->wifi (use iw/iwconfig to check connectivity) 

pingを打ってみます。

mininet-wifi> sta1 ping -c1 sta2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
92 bytes from 10.0.0.1: Destination Host Unreachable
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

pingが届きません!問題があります。

これは、Ubuntu上のNetworkManagerが設定を変えてしまうせいで、よくあることのようです。NetworkManagerを止めておきます。

Ubuntu側(Dockerホスト側)で以下のようにやります。

sudo systemctl stop NetworkManager

quitしてから mn --wifi で起動しなおして、pingを打ってみると、通るようになりました!

mininet-wifi> sta1 ping -c1 sta2
PING 10.0.0.2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=64 time=2059.985 ms
--- 10.0.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2059.985/2059.985/2059.985/0.000 ms

Mininetでのコマンド実行について

このように、Mininetでは、まずノード名を書いて、その後にコマンドラインを続けると、そのノードの仮想ネットワーク環境で実行することができます。
また、コマンドラインの中に、ダブルクォーテーションで囲っていないノード名があると、IPアドレス (10.0.0.2) に変換されてから実行されるようです。
(/etc/hosts やDNSルックアップではなさそうです)

(ノード名) (コマンドライン...)

修正版Dockerの起動スクリプト

上記いくつかの問題を回避するため、以下のようなスクリプトで起動すれば良さそうです。

sudo systemctl stop NetworkManager

docker run -it --rm --privileged --env="DISPLAY" --env="QT_X11_NO_MITSHM=1" -v /tmp/.X11-unix:/tmp/.X11-unix:rw --net host -v /sys/:/sys -v /lib/modules:/lib/modules -v /sys/kernel/debug:/sys/kernel/debug -v /var/run/netns:/var/run/netns mininet-wifi:v1 sh -c "service openvswitch-switch start && /bin/bash"

service openvswitch-switch start については、Dockerfileに記載して再ビルドする手もありそうです。ついでに必要なツールなども追加しておくと良さそうです。

xterm起動はノードによってはうまくいかない

DISPLAY=:0 mn --wifi
のようにするとディスプレイを指定できるので、mininetのコマンドラインで xterm (ノード名) などでGUIのxtermを起動できるはずらしいのですが、wifiクライアントのノード (sta1, sta2)については起動できませんでした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?