実家にProxmox VEを入れたミニPCを置いた
経緯
私はつくばで一人暮らしをしているのだが、秋学期から休学中ということもありここ数ヶ月の半分くらいを実家で過ごしていた。つくばの家ではもともとアパートに無料インターネットなるものが存在するため回線を契約しておらず、その回線速度には少々難はあるが、ぎりぎり生活はできていた。
通常時はだいたい数十Mbpsしか出ないが、深夜から夜明けの間という私のような人間が精力的に活動する僅かな時間帯なら数百Mbps出るときもある。(もしくは、一番作業が快適な時間に生活するように私が変わってしまったのかもしれない。)
一方で、上の画像のように実家は有線なら常に1Gbps出るし、無線でも百Mbpsくらい出る。ちょっとpingは高いがそんなゲームをするような環境じゃないし問題はない。
この実家の回線が思った以上に快適であり、特に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のダウンロードとディスクへの書き込み
公式サイトより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=progress
OSのインストール
USBメモリを挿してミニPCを起動し、UEFIからUSBを直接Bootし、Proxmox VEのインストーラ画面を起動した。そのままIPやホスト名の設定をしていき、インストールが完了した後に再起動してログインしたらいつものポート8006のWebインタフェースのURLが出てきた。
Proxmox VEの初期設定
これでインストールが完了したので、これ以降はセットアップした作業内容を記す。
User
何よりもまず、ずっとrootで作業はしたくないのでUserを作成する。
# apt install sudo visudo # adduser asuto153 # visudo # su asuto153
SSH
次に、
/etc/ssh/sshd_config
のPermitRootLogin
とPasswordAuthentication
にno
を付けて、GitHubから公開鍵を落としてきてSSHできるようにした。$ curl https://github.com/asuto15.keys > ~/.ssh/authorized_keys
Network
そして、
/etc/network/interfaces
をいい感じに書いてVM用のネットワークを生やした。参考にする場合、各アドレスは適宜読み替えてほしい。// /etc/network/interfaces 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 networking
Firewall
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 --ssh
HTTPS
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 pveproxy
Nginx
デフォルトのポート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 dnsmasq
// /etc/dnsmasq.conf bind-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なんてあればあるだけよいものである。今回のオチは「ヒアリングは大事」ということで、この記事は終わりだ。