在Windows的VirtualBox 7中运行Ubuntu Server 22.04.3 LTS并进行SSH连接的步骤(备忘录)为:

因为我按照标题写的内容进行了操作,所以我会记录下步骤。

环境Windows 10 22H2
虚拟机7.0.10
Ubuntu服务器22.04.3 LTS

更新记录2023年10月7日发布文章
2023年10月15日进行全面修改(因为确认在不同环境下不会出现最初撰写时的问题)

经过ローカルにLinuxサーバーを立てたくて調べながら行いました。
仮想マシンの選択肢はVirtualBox,VMware Workstation Player,WSL2などがありましたが,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を選ぶ。

选项1 – 手动服务器安装
看起来挺好的。(选择其他选项可能会导致屏幕变得麻烦)

在VirtualBox中创建虚拟机。在VirtualBox中,点击”创建新虚拟机”选择Ubuntu的ISO文件。

内存增加到4GB(默认为2GB)。
处理器设置为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を有効化し,「ホストオンリーアダプター」を設定する。
(仮想マシンを落としておかないと設定変更できない)

如果您希望从其他主机进行访问,您需要选择一个”桥接适配器”,否则只能在主机操作系统和客户操作系统之间进行通信。

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地址。
您可以通过MAC地址确认VirtualBox的哪个适配器对应于Ubuntu的哪个接口。

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

enp0s3: 适配器1(NAT) 10.0.2.15/24
enp0s8: 适配器2(仅主机适配器)
已设置为这样。

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

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

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

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

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: no
      addresses: [10.0.1.101/24]

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

sudo netplan apply #設定を反映
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 ストレージ容量の修正

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

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

可以在后续进行扩展。

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,现在可以完全利用它了。

从NAT适配器1连接并进行SSH操作的方式在使用VPN的环境中,主机-仅限适配器可能无法正常工作。

这是因为VPN客户端强制限制了路由。
(可能是为了防止在公司内部网络上进行任意通信的功能吧)

在这种情况下,可以添加设置来使用适配器1(NAT)进行通信。

image.png协议:TCP
主机端口:2222
客户端端口:22

image.png关闭设置后,设置将会反映出来。(如果Windows发出警告,请允许)
这样,在Windows上访问本地主机的2222端口时,可以与Ubuntu上的22端口进行通信。

ssh -p 2222 ユーザー名@localhost

で無事にSSHできた。

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

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

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

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

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

image.png

image.pngUbuntu宛のパケットが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アドレスも確認することができる。

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地址

image.png

UbuntuのMACアドレス

ip a

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

image.png

Ubuntuが認識しているWindowsのMACアドレス为了在Ubuntu上进行ARP操作,需要安装以下工具。

sudo apt install net-tools

在尝试通信后,可以通过arp -a命令在Ubuntu中确认Windows的MAC地址。

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で確認できる。

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で確認できる。

bannerAds