WIndowsでMultipass(VirtualBox)のブリッジネットワークを構成する手順
1.MultipassをWIndowsにインストール
仮想マシン管理ツールの Multipass をMacでMicroK8sを使うときに) 試してたのだけれど、Ubuntuのインスタンス立ち上げと操作がいい感じ。
Windows にVirtualBoxと共に導入して、仮想マシンをホストするPCの外部から、SSH接続できるところまで確認する。
インストールは、Multipass orchestrates virtual Ubuntu instances から、Windowsを選択してダウンロードしたインストラーを実行すればOK
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 にパスを通す。
ちなみに、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.
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
仮想マシンにログイン、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
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
ブリッジアダプタが設定されているのが見て取れる。
multipass list で ipアドレスが設定されることも確認
4.外部からの接続設定
4.1 mDNSを仮想マシンにインストール
mDNS(マルチキャストDNS)を利用できるようにすると、hostsファイルをいちいち書いたり、ローカルDNSサーバーを立てたりなどしなくても、Windows、Mac、Linux混在環境でも名前解決できて非常に便利。Macのリモートデスクトップアプリから、WindowsとUbuntuのデスクトップに、ホスト名.local で接続管理できる。(Macへは、VNC、画面共有になってしまうが)
と、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 接続
ようやくできた。。。
面倒だったけど、今後ちょっとした環境作るの捗りそうや。