概要
M2 Macではx86アーキテクチャ向けの低レイヤ学習が難しいので、眠っていた中古WindowsノートにProxmox VE 8.4を導入し、VMやLXCをいつでも作って壊せる環境を構築した。自宅のプライベートネットワーク内で、Macからssh操作できる環境を実現。本記事ではハード構成・インストール手順・初期設定・VM/LXCの起動までをそれぞれ簡単に紹介する。
動機
普段はM2 Macで作業をしているが、低レイヤのセキュリティの勉強をしようとした際には困ったことが起きる。というのも、低レイヤのセキュリティの勉強をする際にはほとんどの場合にx86アーキテクチャ上でプログラムを動作させられる環境が必要となるからだ。
現代的な対応策の選択肢としてはAWS EC2の無料枠を使うといったことが一番に挙げられると思うが、普段業務上で使用しているためあまり刺激も学ぶこともなく、またAWS上での課金状況を管理するのも面倒だと感じてしまい (特にEBS や転送量など) 、今回は見送りにした。
では、実機を用意するかと思い、自宅に何かないかと探してみたところ、使われず眠っていた中古のWindowsのノートPCが一台あった。これをそのまま使用してもいいが、ふと「勉強しよう!」と思った時に、普段使いのPCとは別のPCを取り出してきて、電源をつけて、搭載されているキーボードが壊れているの外付けキーボードを接続して……とするのは非常に面倒 (個人的に学習プロセスから面倒さは可能な限り排除したい) 。そこで、いつも使用しているMacからsshで接続して操作できればなぁと思った。
また、別でOS自作の勉強もしていたりするので、今後もこのような環境が複数欲しくなったり、環境を簡単に作る・削除することができると嬉しいなと思い始めた。そこでProxmox VEに目をつけた。ハイパーバイザ型のOSSで、手元の PC に載せれば仮想マシンやコンテナをいくつも立ち上げられる。GUIから各ノードやマシンの管理・操作も容易であり、マシンの新規作成や削除、ネットワークの編集なども簡単にできる。
また、新卒研修ではクラウドの便利さが非常に言及される場面が多かったのだが、自宅でこのような環境を構築することにより、クラウドの良さ・便利さはどこからくるものなのかということについてもより知れるのは嬉しかった。
ハードウェア環境
- CPU: AMD Ryzen 7 4700U with Radeon Graphics
- メモリ: 16 GB
- ストレージ: Samsung MZALQ512HALU-000L2 (NVMe SSD)
- NIC: Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet (tp-link UE300)
NIC としてUSB NICを採用しているのには理由がある。今回使用した中古PCにはWLANのNICしかなく、PCに直接Ethernetケーブルなどを接続することはできなかった。しかし、Proxmoxは公式がWLANを非推奨としており (参考: https://pve.proxmox.com/wiki/WLAN#Important%20Notes) 、これを理由にUSB NICを使用することにした

導入手順
基本的な導入手順は https://zenn.dev/atsushifx/articles/dev-proxmox-setup-install が非常に分かりやすいため、これを参考にして進めた。
中古PCのOS変える前に、先にWifiルーターで中古PCにDHCP固定割り当ての設定をしておくと後々非常に助かるので忘れずに実施しておく。
イメージは https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso から最新版をダウンロードした (自分の場合は8.4をダウンロード) 。ダウンロードしたものをusbに書き込む。Windowsマシンならrufus (https://rufus.ie/en/) を使って、linuxならusbをマウントしてddコマンドで書き込むことになると思う。
中古PCにusb挿して起動後F12を押してBIOS画面へ移動する。BIOS画面でusbからOSをインストールするための選択肢を選ぶ。
Proxmoxのインストール手順は基本的に上でも紹介した記事の通りだが、ネットワークの設定におけるIP addressは固定割り当てしたものを使用することにだけ注意しておく。
無事インストール完了したら同じネットワークにいるPCからターミナルに表示されるURLにブラウザでアクセスする (自分の場合は同じネットワークに接続しているMacから) 。すると、下記のような画面が表示され、インストール時に設定したパスワードを入力することが求められる。

ログインに成功すると、ProxmoxのGUIが表示される。この画面からは各ノード, 仮想マシン, コンテナ (LXC), Proxmox全体の設定などが管理・編集できる。
個人的にやった初期設定
PCを閉じた状態でもサーバーが止まってしまわないように設定する
Proxmoxが動いているノートPCを畳んでしまうと、サーバーも停止してしまうのでこれを阻止する。具体的な手順としては/etc/systemd/logind.confにデフォルトでは#HandleLidSwitch=suspendと記載されている部分をHandleLidSwitch=ignoreと変えてあげて、再起動またはsystemctl restart systemd-logind.serviceを実行してあげるだけである (参考: https://hymd3a.hatenablog.com/entry/2024/03/20/201246)
USBのautosuspendとLPMを無効化してあげる
この解決にバカみたいな時間の使い方をしてしまった。(自分と同じ構成の場合は) これをしてあげないとISOのダウンロードはまずできなかった。詳しくは https://qiita.com/shota0711tane/items/197048d190c97572b171 に書いたので、そちらを読んでほしい。
無償版のレポジトリを参照するようにする
Proxmoxには無償版とエンタープライズ版があるが (厳密にはもう少し細かいプランの枠組みがあるはずだが) 、今回は小規模な個人利用のため無償版として利用したい。そこで、Proxmoxのアップデートなどで参照するレポジトリも全て無償版が参照可能なものだけにしたい (なぜデフォルトでそうなっていないのかは良く分からない) 。
ちなみに、ここまでの手順でも以下のようなポップアップが何度も出てきたと思うが、これは無償版の場合になぜか出続けるものであり、エラーなどではない。これを恒久的に消す方法もさまざまな場所で共有されているが、自分はその作業が面倒なのでまだやっていない。

以下にて手順は軽く説明するが、 https://blog.nishi.network/2023/02/12/proxmox7-3-repository/ が詳しく分かりやすいので参考にすると良い。
まず、Node → Updates → Repositoriesからhttps://enterprise.proxmox.com/debian/ceph-quincyとhttps://enterprise.proxmox.com/debian/pveを選択して、上のボタンからdisableにしておく。

そしてさらに、同じページ内のAddボタンからNo-Subscriptionを選択して追加する。

この状態で、Proxmoxのアップデート・アップグレードを実施する。アップデートはUpdatesからRefreshのボタンを押すと自動で実行される。

仮想マシン や LXCの起動まで
仮想マシンやLXCを起動させるには、まずそれぞれのイメージをProxmoxにダウンロードさせる方法がある。それぞれ、接続元のマシンからアップロードする or ダウンロード用のURLを共有してProxmox側でダウンロードさせる方法がある。自分は後者の方が楽なので、よくこちらの方法で実施している。ちなみに、LXCの場合はテンプレートから選んでダウンロードすることもできるのでそれでも良い。

仮想マシンの作成・起動についてはいくつか記事などが出回っている ( https://zenn.dev/northeggman/articles/d7b29c4e2cd7c7 など) ので、それらを参考に実施すると良い。LXCも似たような手順を踏むが、少し異なるため別途 https://blog.rpine.net/posts/pve-create-lxc などを参考にして環境構築してみてほしい。
自分の場合は、ISOイメージとしてubuntu-24.04.2-live-server-amd64.isoとkali-linux-2025.1c-installer-amd64.iso、LXCテンプレートとしてubuntu-24.04-standard_24.04-2_amd64.tar.zstをダウンロードしているが、実際に起動指定使っているのはubuntu-24.04.2-live-server-amd64のみである。

Ubuntu Serverでは同じ自宅のプライベートネットワークに接続している状態であればsshで接続して作業できるような状態にしている。
$ uname -a
Darwin <HOSTNAME> 24.5.0 Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:26 PDT 2025; root:xnu-11417.121.6~2/RELEASE_ARM64_T8112 arm64
$ ssh home
Welcome to Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-60-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Sun Jun 15 09:55:15 AM UTC 2025
System load: 0.08
Usage of /: 41.3% of 14.66GB
Memory usage: 3%
Swap usage: 0%
Processes: 185
Users logged in: 0
IPv4 address for ens18: <PRIVATE_IPV4>
IPv6 address for ens18: <PRIVATE_IPV6>
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
61 updates can be applied immediately.
1 of these updates is a standard security update.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
Last login: Sun Jun 15 09:55:15 2025 from <REMOTE_IP>
ubuntu@ubuntu:~$ uname -a
Linux ubuntu 6.8.0-60-generic #63-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 15 19:04:15 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
今後は、 https://www.kali.org/docs/virtualization/install-proxmox-guest-vm/ を参考にしてKaliのLXCが使えるかどうか試してみたいと思っている。
まとめ
中古PC + Proxmox で自宅クラウドを構築することで、x86 環境をいつでもワンコマンドで用意でき、低レイヤ学習のハードルが大幅に下がったのはとても良かった。
正直ほとんどの人がAWSで事足りることなので、学習目的であることは否めないが、自宅で VM/LXC が動いている面白さとクラウドの裏側を肌で感じられる学習メリットは大きいと感じられた。
また、ブラウザを通じてGUIから管理可能なのがとても便利だと感じた。このようなツールを導入しても、管理がいちいち面倒だと疲れてしまって使わなくなってしまうが、GUIから簡単にVMやLXCを新規作成・削除できるのはとても魅力的に感じた。
また、USB NIC 周りでき起きた問題やレポジトリ設定などのハマりどころを押さえれば、導入自体は思いの外シンプルで簡単に感じた。導入手順に関しても記事や公開されている情報が多いので、そこまで詰まることなく進められると思う。
今後はCloudflare Tunnel
(https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) を使用するなどして、外出先からでも安全にsshでアクセス可能な環境が作れると嬉しいなと思っている。