実家にProxmox VEを入れたミニPCを置いた
経緯
私はつくばで一人暮らしをしているのだが、秋学期から休学中ということもありここ数ヶ月の半分くらいを実家で過ごしていた。つくばの家ではもともとアパートに無料インターネットなるものが存在するため回線を契約しておらず、その回線速度には少々難はあるが、ぎりぎり生活はできていた。



この実家の回線が思った以上に快適であり、特にUbuntuのISOのような大きいファイルのダウンロードがほとんど時間かからずに終わったことに感動してしまい、実家にちょっとしたサーバ置きたいなぁと思ったので、置いた。
買ったもの
- Hitabt Mini PC M30A
- CPU: N100(4 Core, 4 Thread)
- Memory: 16GB DDR4
- Storage: 512G M.2 2242 SATA
購入当時、記事執筆時点でも定価19999円で2000円分のクーポンが付いている。この値段で16GB, 512GBは購入当時で調べた中で最安だったため、購入を決定した。
目的
今回、実家のネットワーク下で自由にVMやコンテナを生やせるようにしたらなにかと役に立つだろうと思ったので、このサーバには研究室のマシンにも利用しているProxmox VEを入れることにした。
また、今回の実家サーバ導入の目的の一つとして、AdGuard Homeで広告ブロックをDNSレベルでカスタマイズしたいというものがある。以前親がよくある謎のゲームが埋め込まれた広告を広告だと認識できず消すのに苦戦しているのを見て、咄嗟に
「94.140.14.14と94.140.15.15という数字をWi-FiのDNSってところに入れると幸せになれますよ」
と言って広告ブロックを教えることはできた。しかし、親がやっている無料のパズルゲームなどでは広告を見ることで報酬が得られるらしいので、そういう広告もブロックされてしまうので不満だと述べていた。そこで、public DNSではなく自分でドメイン単位でフィルターをかけることができるAdGuard Homeを導入しようと考えた。
Proxmox VEのインストール作業
これ以降、今回の作業内容を自分用の備忘録として記録する。historyを見ながら記憶を掘り起こして書いているため、間違った記述や執筆時点から時間が経って古くなった記述が存在する可能性があるので、実際に実行するときは十分に他のソースを参照するよう注意してほしい。
ISOのダウンロードとディスクへの書き込み
https://www.proxmox.com/en/downloads/proxmox-virtual-environment/iso
公式サイトよりProxmox VEのISOをダウンロードしてUSBに焼いた。MacOSでやったが、別にLinuxでもいけるはず。WindowsならLufusかRaspberry Pi Imagerでできるはず。
$ wget https://enterprise.proxmox.com/iso/proxmox-ve_8.3-1.iso
$ sudo dd if=/dev/rdisk4 of=proxmox-ve_8.3-1.iso bs=1M status=progressOSのインストール
USBメモリを挿してミニPCを起動し、UEFIからUSBを直接Bootし、Proxmox VEのインストーラ画面を起動した。そのままIPやホスト名の設定をしていき、インストールが完了した後に再起動してログインしたらいつものポート8006のWebインタフェースのURLが出てきた。
Proxmox VEの初期設定
これでインストールが完了したので、これ以降はセットアップした作業内容を記す。
User
何よりもまず、ずっとrootで作業はしたくないのでUserを作成する。
# apt install sudo visudo
# adduser asuto153
# visudo
# su asuto153SSH
次に、/etc/ssh/sshd_configのPermitRootLoginとPasswordAuthenticationにnoを付けて、GitHubから公開鍵を落としてきてSSHできるようにした。
$ curl https://github.com/asuto15.keys > ~/.ssh/authorized_keysNetwork
そして、/etc/network/interfacesをいい感じに書いてVM用のネットワークを生やした。参考にする場合、各アドレスは適宜読み替えてほしい。
auto lo
iface lo inet loopback
// 物理NIC
iface enp2s0 inet manual
// ホスト用ネットワーク
auto vmbr0
iface vmbr0 inet static
address 192.168.1.100 // ホストのアドレス
gateway 192.168.1.1 // ルータのアドレス
bridge-ports enp2s0
bridge-stp off
bridge-fd 0
// VM用ネットワーク
auto vmbr1
iface vmbr1 inet static
address 192.168.2.0/24 // VM用ネットワークの範囲
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '192.168.2.0/24' -o vmbr0 -j MASQUERADE
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
// Wi-Fiモジュールは今回設定していない
iface wlp1s0 inet manual
source /etc/network/interfaces.d/*$ sudo systemctl restart networkingFirewall
iptablesでとりあえずINPUT, FORWARD chainはデフォルトでDROPした。VM周りの通信やssh, http, https, dnsなど適宜必要なもののみを通すよう設定した。また、ルータから見てサーバのNICから異なるMACアドレスの通信が出てくると通信が止められてしまうので、NATをかける必要がある。
Tailscale
tailscaleを入れて、Tailnet内のマシンからならSSHできるようになった。ここまでの作業によって、最低限リモートからVMを生やせるようになった。
$ curl -fsSL https://tailscale.com/install.sh | sh
$ sudo tailscale up --sshHTTPS
tailscale certを利用してTailnet内のホスト名に対してLet's Encryptで証明書を発行する。これにより、ブラウザから警告されずにポート8006でHTTPS通信ができるようになった。
$ sudo tailscale cert $(hostname)
$ sudo mv $(hostname).key /etc/pve/local/pve-ssl.key
$ sudo mv $(hostname).crt /etc/pve/local/pve-ssl.pem
$ sudo systemctl restart pveproxyNginx
デフォルトのポート8006で通信するのは渋いので、nginxを利用することでそれぞれHTTPS, HTTPを443, 80番にフォワーディングするようにした。
DHCPサーバ
VM用ネットワークでDHCPを動かしたいのでdnsmasqを用いて振ってほしいIPアドレスの範囲を指定する。
$ sudo apt install dnsmasq
$ sudo vim /etc/dnsmasq.conf
$ sudo systemctl restart dnsmasq
$ sudo systemctl enable dnsmasqbind-interfaces
interface=vmbr1
dhcp-range=192.168.2.2,192.168.2.100,12h // 振ってほしいアドレスの範囲
dhcp-option=3,192.168.2.1 // DHCPを動かすアドレス
dhcp-option=6,192.168.1.1 // DNSサーバのアドレスAdGuard Homeを利用したDNSサーバ
AdGuard Homeの導入
先ほどまでの作業でVMを作成してそれ用のネットワークで通信できるようになった。 そこで、Ubuntu24.04などをVMにインストールして、以下のコマンドでAdGuard Homeをインストールした。
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -vアカウントの初期設定を行なって、上流となるDNSサーバやフィルタ周りの設定を行なって、ProxmoxホストへのDNSリクエストをこのVMに流すようにしたら正常に動作するはずである。一応pingやdigコマンドなどでインターネットへの通信や名前解決を確認しておく。正常に動作したら完成。
完成
早速完成したので、出来立てホクホクのサーバを使ってカスタマイズするよう親に言ったら
「あ〜あの話(広告ブロックしたくない場合があること)ね、あれWi-Fi切ったらそのまま見れるから特に困ってないよ。」
とのことだった。結局このサーバは今も実家に置いてあるものの、ちょっとでかいファイルを落とすときか、実家のIPが必要なときしか使っていない。まぁ今後VM遊びもするかもしれないし、自由に使えるPCなんてあればあるだけよいものである。今回のオチは「ヒアリングは大事」ということで、この記事は終わりだ。
