1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WindowsのVirtualBox 7でUbuntu Server 22.04.3 LTSを動かしてSSHするまでの手順(備忘)

Last updated at Posted at 2023-10-06

タイトルに書いてあることをしたので手順を残します。

環境

Windows 10 22H2
VirtualBox 7.0.10
Ubuntu Server 22.04.3 LTS

更新履歴

2023/10/7 記事を投稿
2023/10/15 全体的に書き直し(最初に記事を書いた時の問題が別環境では起きない事を確認できたため)

経緯

ローカルにLinuxサーバーを立てたくて調べながら行いました。
仮想マシンの選択肢はVirtualBoxVMware Workstation PlayerWSL2などがありましたが,OSSの方が良いと思いVirtualBoxにしました。(あとWSL2は上手く行かない部分があったので断念しました)
Linuxディストリビューションは仕事ではRedHat系を使っていますが,世界的にシェアが高いUbuntuが気になっていたのでUbuntu Serverにしました。

参考にした記事

VirtualBoxをインストール

公式サイトからVirtualBox 7.0.10のWindows用インストーラーをダウンロードする。

設定は特にデフォルトから変えずインストールできる。

途中で"Missing Dependencies Python Core / win32api"という警告が出るが無視してよさそう。

Ubuntuをダウンロード

公式サイトからUbuntuのISOをダウンロードする。

Ubuntu DesktopとUbuntu Serverがあるが,GUIは不要なのでServerにした。
LTSである22.04.3を選ぶ。

オプションは
Option 1 - Manual server installation
でよさそう。(他のを選ぶと面倒そうな画面になった)

VirtualBoxで仮想マシンを作成

VirtualBoxで「新規」を開きUbuntuのISOファイルを選ぶ。

メモリは4GBにした。(デフォルトは2GB)
CPUは1にした。
ストレージはデフォルトの25GBにした。

(ちなみに最初にストレージを2GBにしたら,Ubuntuのインストールで失敗した。要求スペックはちゃんと確認しよう)

必要な設定をしてポチポチすると仮想マシンが起動する。

Ubuntuのインストール

仮想マシンが起動すると,Ubuntuのインストールメニューが表示される。

以下を設定した。

  • 言語はEnglish。(日本語は無いっぽい)
  • JIS配列のキーボードを使っているのでキーボードレイアウトはJapanese。(US配列ならEnglish(US)。間違った設定を選んでパスワード設定するとひどい目に遭う)
  • Storage configurationでボリュームを最大にする。ubuntu-lvのSizeをMAXになるように設定してfree spaceの部分が無くなればOK。(忘れても後述の手順(※1)でリカバリーできる)
  • サーバー名,ユーザー名,パスワードを設定。この設定をSSHの際に使用する。
  • Install OpenSSH serverにチェック。WindowsからSSHするのに必要となる。

これ以外の設定はデフォルトで差し支えない。(IPアドレスは後から設定できる)

インストールして画面内でRebootするとログインできるようになる。

仮想マシンのネットワークの設定1(NAT)

仮想マシンの設定でネットワークを開く。
アダプター1には最初から「NAT」が設定されている。
特にいじらなくてよい。

image.png

これでゲストOSからインターネットへのアクセスは問題無く可能。

仮想マシンのネットワークの設定2(ホストオンリーアダプター)

WindowsからSSHしたいので,
アダプター2を有効化し,「ホストオンリーアダプター」を設定する。
(仮想マシンを落としておかないと設定変更できない)

これはホストOSとゲストOSの間だけで通信できるネットワークをとなる。
(他のホストからもアクセスしたい場合は「ブリッジアダプター」が選択肢となる)

image.png

ホストアダプターにおけるWindowsのIPアドレスは,VirtualBox マネージャー>ツール>Networkで設定する。
デフォルトは192.168.56.1/24だったが私は10.0.1.1/24に変更した。

どのようなIPアドレスが適切かは環境に依るので,Windowsでroute printしてプライベートIPアドレスの範囲で空いてそうなネットワークセグメントを探そう。
192.168.56.0/24のIPアドレスが使われていない環境であればデフォルトで良い。

image.png

ちなみに不要なのでDHCPサーバーは無効にした。

UbuntuでのIPアドレスの設定

UbuntuでIPアドレスを設定する。
VirtualBoxのどのアダプターがUbuntuのどのインターフェースに対応するかはMACアドレスで確認できる。

Ubuntu
ip a #現在設定されているインターフェース,MACアドレス,IPアドレスを確認

enp0s3: アダプター1(NAT) 10.0.2.15/24
enp0s8: アダプター2(ホストオンリーアダプター)
になっていた。

/etc/netplan/01-netcfg.yaml
を書くことでIPアドレスを設定できる。

Ubuntu
sudo vim /etc/netplan/01-netcfg.yaml #ファイルを編集してIPアドレスを設定する

UbuntuのIPアドレスは10.0.1.101/24とした。
(Windowsのホストオンリーアダプターと同じネットワークセグメントにしよう)

設定ファイルの書き方はGPT4に教わった。

01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: no
      addresses: [10.0.1.101/24]

以下のコマンドを実行すると設定が反映される。

Ubuntu
sudo netplan apply #設定を反映

IPアドレスが設定できた。
image.png

SSHクライアント

Windowsで使うSSHクライアントは何でもいいが,とりあえずPowerShellを使った。

SSHする

Windowsから10.0.1.101宛にSSHができるようになる。

PS C:\> ssh ryosuke@10.0.1.101
The authenticity of host '10.0.1.101 (10.0.1.101)' can't be established.
ECDSA key fingerprint is SHA256:MWKqldbCL5sXswvtqW/u1ww80G6ddjzClENA2bjECgQ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.1.101' (ECDSA) to the list of known hosts.
ryosuke@10.0.1.101's password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-86-generic x86_64)

これで目的は無事に果たされた!

おわりに

難なく仮想マシンが動かせる世界と先人達の知恵に感謝しかありません。

以降はトラブルシューティングの記録などを残します。

※1 ストレージ容量の修正

Ubuntu
df -h #ディスク容量を確認

したら容量が19GBしかないように見えた。
Storage configurationでSIZEを指定する操作を知らずに忘れたのがダメだったらしい。

以下で後から拡張できた。

Ubuntu
lsbulk #使い切れていないボリュームを確認
lvdisplay #マウントされているパスを確認 -> /dev/ubuntu-vg/ubuntu-lv だった
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv #論理ボリュームを拡張
df -T #Typeを確認 -> ext4だった
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv #ext4でファイルシステムの容量を拡張するコマンド

無事に仮想マシンの容量30GBを全て使えるようになった。

※2 アダプター1(NAT)からSSHする方法

VPNを使っている環境ではホストオンリーアダプターが機能しない場合がある。

これは,VPNクライアントがルーティングを強制的に制限しているためである。
(社内ネットワークで好き勝手な通信をさせないための機能だろう)

その場合は設定を加えてアダプター1(NAT)で通信することができる。

仮想マシンにポートフォワーディング設定をする。
image.png

プロトコル: TCP
ホストポート: 2222
ゲストポート: 22

image.png

設定を閉じると設定が反映される。(Windowsの警告が出たら許可をする)
これでWindowsからlocalhostの2222にアクセスするとUbuntuの22に通信できる。

Windows
ssh -p 2222 ユーザー名@localhost

で無事にSSHできた。

他に使いたいポートがあったら都度設定が必要となる。

とても不便なので環境が許すなら「ホストオンリーアダプター」か「ブリッジアダプター」でIPアドレスを1つ割り当てる方が良い。

ちなみにWindowsが自動で使うポート番号はEphemeral Portsといい,デフォルトでは49152~65535になっている。
この範囲はアプリケーションが自動で使う可能性があるので避けた。

※3 VPN環境で起きた事象

VPN環境では「ホストオンリーアダプター」「ブリッジアダプター」を適切に設定しても通信ができなかった。

事象としてはWindowsかからゲストOSのIPアドレスにpingが通らないというものになる。
(当然,SSHもできない)

image.png

Windowsのルーティングテーブルを確認すると奇妙なことになっていた。
image.png

Ubuntu宛のパケットがVPNの仮想アダプターのゲートウェイにルーティングされている。

Windows(10.0.1.1/24)とUbuntu(10.0.1.101)は同一のネットワークセグメントにいるので,ルーティングなど関係無しで通信できると思っていたが,VPNクライアントが許してくれないようだ。
(※4の手順でL2レベルの疎通ができていることを確認したが,VPNクライアントの機能はそれよりも強いらしい)

VPNを切ると問題なく通信できる場合はVPNが原因と言える。

(参考)

Normal operation as the VPN is rejecting all other routes when active. You would need to set the VPN software up to allow for local routes to work.

※4 ネットワークの確認観点

VPN環境でホストオンリーアダプターが機能しなかった時に色々と調べたので,確認観点を残しておく。

WindowsのIPアドレスとMACアドレス

VirtualBoxでWindowsに設定したIPアドレスが反映されているかはipconfigで確認できる。
また,ipconfig -allでWindows側のMACアドレスも確認することができる。

Windows
PS C:\> ipconfig

Windows IP 構成
(中略)
イーサネット アダプター イーサネット 3:
(中略)
   説明. . . . . . . . . . . . . . . . .: VirtualBox Host-Only Ethernet Adapter
   物理アドレス. . . . . . . . . . . . .: 0A-00-27-00-00-28
(中略)
   IPv4 アドレス . . . . . . . . . . . .: 10.0.1.1(優先)
   サブネット マスク . . . . . . . . . .: 255.255.255.0
(後略)

仮想マシンのMACアドレス

仮想マシンの設定ウインドウで仮想マシン側のMACアドレスを確認できる。
image.png

UbuntuのMACアドレス

Ubuntu
ip a

でUbuntuが認識している仮想マシンのMACアドレスを確認できる。

image.png

Ubuntuが認識しているWindowsのMACアドレス

Ubuntuでarpをするためには以下のツールをインストールする。

Ubuntu
sudo apt install net-tools

通信を試みた後にarp -aでUbuntuが認識しているWindowsのMACアドレスが確認可能である。

Ubuntu
ryosuke@myubuntu:~$ arp -a
_gateway (10.0.2.2) at 52:54:00:12:35:02 [ether] on enp0s3
? (10.0.1.1) at 0a:00:27:00:00:28 [ether] on enp0s8

Windowsが認識しているUbuntuのMACアドレス

WindowsからpingやSSHで通信を試みてからarp -aで確認できる。

Windows
PS C:\> arp -a
(中略)
インターフェイス: 10.0.1.1 --- 0x28
  インターネット アドレス 物理アドレス           種類
  10.0.1.101            08-00-27-82-f7-06     動的
  10.0.1.255            ff-ff-ff-ff-ff-ff     静的
  255.255.255.255       ff-ff-ff-ff-ff-ff     静的

※5 Windowsでのルーティング設定の追加

VPNの影響で通信できない問題はスタックオーバーフローにも投稿されていた。

この投稿ではroute addで解決したらしい。
(私の環境では解決しなかった)

route addでは特定のIPアドレス宛のルーティングで送出するインターフェースを指定できる。
インターフェースのインデックス番号はroute printで確認できる。

1
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?