WIndowsでMultipass(VirtualBox)のブリッジネットワークを構成する手順

 

1.MultipassをWIndowsにインストール

仮想マシン管理ツールの MultipassMacでMicroK8sを使うときに) 試してたのだけれど、Ubuntuのインスタンス立ち上げと操作がいい感じ。

Windows にVirtualBoxと共に導入して、仮想マシンをホストするPCの外部から、SSH接続できるところまで確認する。

インストールは、Multipass orchestrates virtual Ubuntu instances から、Windowsを選択してダウンロードしたインストラーを実行すればOK

Multipass select os

2.Ubuntu仮想マシンインスタンスの作成

インストールできたら、仮想マシンを作成する。

以下、メモリ4G、ディスク 20G、2CPU で hostname phpenvのUbuntuを作成する例。

明示的に作成しないと、primary という名前のインスタンスが自動で作られたりする。

multipass に続いて利用できるコマンドは、`multipass info` command | Multipass documentation

—name に続くのが仮想マシンの名前。今回はphpの調査環境を作りたいので、phpenvとでもしておく

$ multipass launch --mem 4G --disk 20G --cpus 2 --name phpenv

しばらくすると、インスタンスが再生されるので、multipass list で確認する。

PS C:\Users\hiroto> multipass ls
Name State IPv4 Image
phpenv Stopped – Ubuntu 20.04 LTS

3.仮想マシンの設定

3.1 インターフェースのリストを得る

Mac と Virtualbox を使ってブリッジネットワークを作成したのと同じことをしたいのだが、Windowsの場合、ホスト側アダプターをどうやって指定すれば良いのだろうと探していたら、Networking tricks with Multipass in Virtualbox on Windows (Bridged interfaces and Port Forwards) – A nice guy’s view on life (sprig.gs)をみつけた。

どうやら、ネットワークと共有設定とかに表示される、Descriptionをそのまま使うようだ。長いな。。。

調べ方も上記にあったので、Powershellで取得する

PS C:\Users\hiroto&g; Get-NetAdapter -Physical | format-list -property “Name”,“DriverDescription”

Name : イーサネット
DriverDescription : Qualcomm Atheros AR8131 PCI-E Gigabit Ethernet Controller (NDIS 6.30)

自分の環境のアダプターのDescriptionは、上記のようだ。

 3.2 PsExecの導入

PsTools – Windows Sysinternals | Microsoft Docsに含まれる、PsExecを利用したい。

PsExecを使ってリモートのWindows PC上のプログラムを実行する:Tech TIPS – @IT (atmarkit.co.jp)

PsExecでは、-sオプションを指定することで、Systemアカウントの権限でプログラムを実行できる。これにより、例えばレジストリ・キーのHKLM\SAM\SAMのように、Systemアカウントだけにアクセスが許されているオブジェクトにもアクセスできるようになる。

multipassで作成するインスタンスは、Systemアカウント権限を要するようで、上記PsExecを導入して起動したり、操作したりする必要がある。

ちなみに、仮想マシンのイメージは、自分の環境では、以下に作成された。

C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd\virtualbox\vault\instances

 

3.3.1 両方にPATHを通す

いちいちコマンドをフルパス打つのが面倒なので、PSToolsとVirtualBox にパスを通す。

Win env

ちなみに、VirtualBoxのコマンドマニュアルは、以下

Oracle® VM VirtualBox®

3.3 ブリッジアダプタを設定する

multipass stop phpenv で、インスタンスが起動していたら、一旦停止し、PowerShellを管理者で立ち上げて、psexec 経由で VirtualBoxの管理コマンド(vboxmanage) を実行し、ブリッジアダプタの作成と設定を行う。

PS C:\Users\hiroto> psexec64 -s vboxmanage modifyvm “phpenv”–nic2 bridged –bridgeadapter2 “Qualcomm Atheros AR8131 PCI-E Gigabit Ethernet Controller (NDIS 6.30)”

PsExec v2.32 – Execute processes remotely
Copyright (C) 2001–2021 Mark Russinovich
Sysinternals – www.sysinternals.com

vboxmanage exited on TAISETSU with error code 0.

Vbox bridge

3.4 仮想マシンがブリッジアダプタを使用するように設定

仮想マシンを起動(multipass start) し、シェルでログイン(multipass shell)

PS C:\Users\hiroto> multipass start phpenv
PS C:\Users\hiroto> multipass shell phpenv
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0–66-generic x86_64)
ubuntu@phpenv:$ ip link | grep DOWN
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
ubuntu@phpenv:$

sudo su で root で作業(sudoで良い)。ここからは、Macでの作業と同様。

root@phpenv:/etc/netplan# cat > /etc/netplan/60-bridge.yaml <<EOF
 network:
 ethernets:
 enp0s8: # this is the interface name from above
 dhcp4: true
 dhcp4-overrides: # this is needed so the default gateway
 route-metric: 200 # remains with the first interface
 version: 2
EOF

Vbox ip settings

仮想マシンにログイン、root のまま、ネットワークの設定を反映、ip アドレスが振られることを確認

root@phpenv:/etc/netplan# netplan apply
root@phpenv:/etc/netplan# ip address show dev enp0s8 up
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
 link/ether 08:00:27:ce:fb:e4 brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.25/24 brd 192.168.0.255 scope global dynamic enp0s8
 valid_lft 86372sec preferred_lft 86372sec
 inet6 2402:6b00:3666:5800:a00:27ff:fece:fbe4/64 scope global dynamic mngtmpaddr noprefixroute
 valid_lft 275sec preferred_lft 275sec
 inet6 fe80::a00:27ff:fece:fbe4/64 scope link
 valid_lft forever preferred_lft forever

Vbox ip up

3.5 VirtualBoxマネージャーの起動と確認

上述のように、システムプロファイルにMultipassの仮想マシンが作成されるので、PsExce で VirtualBoxを起動してみる。

PS C:\Users\hiroto> psexec64 -s -i virtualbox

PsExec v2.32 – Execute processes remotely
Copyright (C) 2001–2021 Mark Russinovich
Sysinternals – www.sysinternals.com

ブリッジアダプタが設定されているのが見て取れる。

Run vbox syste

multipass list で ipアドレスが設定されることも確認

Multipass ip

4.外部からの接続設定

4.1 mDNSを仮想マシンにインストール

mDNS(マルチキャストDNS)を利用できるようにすると、hostsファイルをいちいち書いたり、ローカルDNSサーバーを立てたりなどしなくても、Windows、Mac、Linux混在環境でも名前解決できて非常に便利。Macのリモートデスクトップアプリから、WindowsとUbuntuのデスクトップに、ホスト名.local で接続管理できる。(Macへは、VNC、画面共有になってしまうが)

Mac remotepc list

と、mDNS便利なので、そのためのサービス(avahi-daemon)を、仮想マシンにインストールし有効化。

 

ubuntu@phpenv:$ sudo apt install -y avahi-daemon
ubuntu@phpenv:$ sudo systemctl start avahi-daemon
ubuntu@phpenv:$ sudo systemctl enable avahi-daemon
ubuntu@phpenv:$ ping phpenv.local
PING phpenv.local (192.168.0.25) 56(84) bytes of data.
64 bytes from phpenv (192.168.0.25): icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from phpenv (192.168.0.25): icmp_seq=2 ttl=64 time=0.045 ms

4.2 SSH関連をインストール

以下を仮想マシンにインストールしない状態だと、permission denied (publickey). でアクセスできず、2日ほど悩み、理由はわからないのだが、これで解決した。

ubuntu@phpenv:$ sudo apt-get install ssh
ubuntu@phpenv:$ sudo apt-get install openssh-server

あと、sshd の設定で、パスワード認証を可能に設定する。

ユーザーをhomeディレクトリ付で作成し、パスワードを設定し、sudo グループに所属させる。

ubuntu@phpenv:$ sudo useradd -m piroto
ubuntu@phpenv:$ sudo passwd piroto
ubuntu@phpenv:$ sudo usermod -G sudo piroto
ubuntu@phpenv:$ sudo vi /etc/ssh/sshd_config
 :
PasswordAuthentication yes
ubuntu@phpenv:/var/log$ sudo systemctl restart sshd

4.3 接続

ようやくできた。。。

Multipass win vbox success

面倒だったけど、今後ちょっとした環境作るの捗りそうや。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です