これまで触ってきた Proxmox が 8 だったので 9 にする。Proxmox 9 はベースが Debian 13 Trixie らしい。動作検証しかしていなかったので、特にこれといったものも動かしていないので、サクッと入れなおす。
最近の(と言っても結構前からだけど)ネットワークのいろいろの知識が不足していることがこれまでの検証でわかったので、そのあたりの学習をしながら進める。
Beelink MINI S12 Pro という N100 を搭載したメモリ 16GB、ストレージは M.2 NVMe の SSD 500GB と SATA 2.5 インチの SSD 500GB を積んだもの。ネットワークは Wi-Fi をつながずに有線 LAN を使用する。
宅内のネットワークは TP-Link のルータ(AX3000)でインターネットにつながっている(インターリンクの ZOOT NATIVE)。ルータの内側のネットワークは 172.16.128.0/24 でルータの内側 IP アドレスは 172.16.128.1 になっている。
最終的には LXC/VM で Web サービスを公開したいと思っているので、ネットワークを切ってそこにそれらで使う LXC/VM を入れる。このネットワークは 172.16.192.0/24 にしようと思っている。
Proxmox のインストール
Proxmox のサイトの Proxmox Virtual Environment のダウンロードページから ISO をダウンロードする。今回ダウンロードするタイミングでは、Proxmox VE 9.1 ISO Installer でバージョンは 9.1-1 だった。ISO をダウンロードしたら rufus で USB メモリに焼く。
焼き終わったら再起動して、USB から PC を起動する。インストーラが起動する。IP アドレスを設定する部分以外は特に悩むこともないと思う。自分はノード名を pve-n100 とした。
インストールが完了して再起動したら、Linux へのログイン画面になっている(テキスト画面の方ね)。「この URL にアクセスして設定しなよ」と書かれているので作業用 PC のブラウザでアクセスする。
とりあえずの設定
apt リポジトリの変更
初期状態では Enterprise のリポジトリを参照している。とりあえずは無償で利用できる範囲で使おうと思っているので、そのあたりを調整する。
pve-n100 の /etc/apt/sources.list.d/ には、ceph.sources, debian.sources, pve-enterprise.sources と 3 ファイルあった。順番がずれるが pve-enterprise.sources が Proxmox の Enterprise 版のリポジトリ、ceph.sources が Ceph とかいうクラスタとかを扱うもののリポジトリ(有償版でしか使えないはず)、debian.sources が Trixie のリポジトリ。
と pve-enterprise.sourcesceph.sources を無効にする。各ファイルの末尾に Enabled: no を追記する。
/etc/apt/sources.list.d/ に pve-no-subscription.sources を作成する。ファイルの内容は以下の通り。
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
これで apt update して apt upgrade できれば OK。
SATA SSD を Proxmox で使えるように
lsblk -o name,size,type,mountpoint してディスクの様子を確認。
自分の環境では、nvme0n1 というディスクと sda がつながっていた。nvme0n1 は M.2 NVMe ディスクで、sda が SATA 2.5 インチ SSD になる。sda には sata500 というボリュームグループがある。これをいったんきれいにするため、lvremove -y sata500 して(論理ボリュームの削除)、vgremove -y sata500 して(ボリュームグループの削除)、pvremove -y /dev/sda した(物理ボリュームの削除)。lsblk して sda に何もぶら下がっていないことを確認。
Proxmox の Web コンソールのツリーで、ノード pve-n100 を選ぶ(Datacenter の中にある)。
追加したボリュームは MV/LXC のストレージとして使おうと思っているので LVM-Thin にする。Disks の中の LVM-Thin を選択しておく。

Create Thinpool ボタンをクリックするとダイアログが開く。Disk ポップアップメニューは使えるものが /dev/hda しかないのでそれが選択されている。Name テキストボックスに sata500 と入力として Create ボタンをクリックする。

sata500 ができた画面。LVM-Thin のリストにも、左側ツリーの部分にも sata500 がある。

左側ツリーで Datacenter を選択して、Storage を見ると sata500 が作成されている。

ネットワーク
vmbr1 をつくってみる。/etc/network/interfaces に vmbr1 を追加(下の赤字部分)。
auto lo
iface lo inet loopback
iface nic0 inet manual
auto vmbr0
iface vmbr0 inet static
address 172.16.128.130/24
gateway 172.16.128.1
bridge-ports nic0
bridge-stp off
bridge-fd 0
iface nic1 inet manual
auto vmbr1
iface vmbr1 inet static
address 172.16.192.1/24
bridge_ports none
bridge_stp off
bridge_fd 0
source /etc/network/interfaces.d/*
どんな具合か確認する。
root@pve-n100:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: nic0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master vmbr0 state UP group default qlen 1000
link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff
altname enxe8ff1edf5293
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether bc:cd:99:af:31:3d brd ff:ff:ff:ff:ff:ff
altname wlp0s20f3
altname wlxbccd99af313d
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether e8:ff:1e:df:52:93 brd ff:ff:ff:ff:ff:ff
inet 172.16.128.130/24 scope global vmbr0
valid_lft forever preferred_lft forever
inet6 fe80::eaff:1eff:fedf:5293/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
6: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether da:76:5a:11:d3:2f brd ff:ff:ff:ff:ff:ff
inet 172.16.192.1/24 scope global vmbr1
valid_lft forever preferred_lft forever
inet6 fe80::d876:5aff:fe11:d32f/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
root@pve-n100:~# ip route
default via 172.16.128.1 dev vmbr0 proto kernel onlink
172.16.128.0/24 dev vmbr0 proto kernel scope link src 172.16.128.130
172.16.192.0/24 dev vmbr1 proto kernel scope link src 172.16.192.1
良さげな感じです。
LXC のテンプレートをダウンロード
LXC をあげるときにテンプレートがいるので、ダウンロードしておく。
# テンプレートのリストを最新にしておく
root@pve-n100:~# pveam update
update successful
# テンプレートのリストで debian が含まれているものを抽出
root@pve-n100:~# pveam available | grep debian
system debian-12-standard_12.12-1_amd64.tar.zst
system debian-13-standard_13.1-2_amd64.tar.zst
turnkeylinux debian-10-turnkey-collabtive_16.1-1_amd64.tar.gz
<SNIP!>
turnkeylinux debian-12-turnkey-zoneminder_18.0-1_amd64.tar.gz
# テンプレート debian-13-standard_13.1-2_amd64.tar.zst をダウンロード
root@pve-n100:~# pveam download local debian-13-standard_13.1-2_amd64.tar.zst
downloading http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst to /var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst
--2025-12-01 16:25:35-- http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst
Resolving download.proxmox.com (download.proxmox.com)... 103.76.41.50, 2400:ed00:3::2
Connecting to download.proxmox.com (download.proxmox.com)|103.76.41.50|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 129710398 (124M) [application/octet-stream]
Saving to: '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst.tmp_dwnl.160968'
0K ........ ........ ........ ........ 25% 975K 96s
32768K ........ ........ ........ ........ 51% 1.41M 53s
65536K ........ ........ ........ ........ 77% 1.05M 25s
98304K ........ ........ ........ ... 100% 901K=1m58s
2025-12-01 16:27:39 (1.05 MB/s) - '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst.tmp_dwnl.160968' saved [129710398/129710398]
calculating checksum...OK, checksum verified
download of 'http://download.proxmox.com/images/system/debian-13-standard_13.1-2_amd64.tar.zst' to '/var/lib/vz/template/cache/debian-13-standard_13.1-2_amd64.tar.zst' finished
vmbr1 から宅内ネットワークへの NAT
/etc/network/interfaces の vmbr1 の部分に赤字の部分を追記。
auto lo
iface lo inet loopback
iface nic0 inet manual
auto vmbr0
iface vmbr0 inet static
address 172.16.128.130/24
gateway 172.16.128.1
bridge-ports nic0
bridge-stp off
bridge-fd 0
iface nic1 inet manual
auto vmbr1
iface vmbr1 inet static
address 172.16.192.1/24
bridge_ports none
bridge_stp off
bridge_fd 0
post-up iptables -t nat -A POSTROUTING -s 172.16.192.0/24 -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s 172.16.192.0/24 -o vmbr0 -j MASQUERADE
source /etc/network/interfaces.d/*
cat /proc/sys/net/ipv4/ip_forward で 0 になっているので、IPv4 パケット転送は無効になっている。これを echo 1 > /proc/sys/net/ipv4/ip_forward として 1 にしておく。永続化するには、echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-forwarding.conf して、sysctl --system しておく。sysctl net.ipv4.ip_forward して net.ipv4.ip_forward = 1 と出力されれば OK。
最終的に以下のようになれば OK。
root@pve-n100:~# ifreload -a
root@pve-n100:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 60 packets, 10005 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 15 packets, 3260 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * vmbr0 172.16.192.0/24 0.0.0.0/0
vmbr1 側に LXC をあげる
左のツリーで Datacenter > pve-n100 を選択して、Create CT ボタンをクリック。あとから dnsmasq を入れるのでちゃんとつくる。

Create LXC Container のダイアログが開く。今回は CT ID: 100、Hostname: dnsmasq01 とした。パスワードは適切なものを。

テンプレートはさっきダウンロードした debian-13-standard_13.1-2_amd64.tar.zst を選択。

ストレージは Disk size (GiB): 8 で設定。

CPU は Cores: 1 で設定。

メモリは Memory (MiB): 256、Swap (MiB): 256 で設定。

肝心のネットワーク。Bridge: vmbr1、IPv4/CIDR: 172.16.192.2/24、Gateway (IPv4): 172.16.192.1 としておく。

DNS は一応設定しておく。DSN Servers: 172.16.128.1 としておく。

内容を確認して Finish ボタンをクリック。

左側のツリー Datacenter >pve-n100 > 100 (dnsmasq01) ができた。

Datacenter >pve-n100 > 100 (dnsmasq01) を選択した状態で、Start ボタンをクリック。Console を選択する。
とりあえずログインして、apt update して apt upgrade -y する。ping を打ってみて、ネットワークの疎通と名前解決できていることを確認。
root@dnsmasq01:~# ping -c 3 172.16.128.192
PING 172.16.128.192 (172.16.128.192) 56(84) bytes of data.
64 bytes from 172.16.128.192: icmp_seq=1 ttl=127 time=0.689 ms
64 bytes from 172.16.128.192: icmp_seq=2 ttl=127 time=0.978 ms
64 bytes from 172.16.128.192: icmp_seq=3 ttl=127 time=0.930 ms
--- 172.16.128.192 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2024ms
rtt min/avg/max/mdev = 0.689/0.865/0.978/0.126 ms
root@dnsmasq01:~# ping -c 3 172.16.128.41
PING 172.16.128.41 (172.16.128.41) 56(84) bytes of data.
64 bytes from 172.16.128.41: icmp_seq=1 ttl=63 time=0.514 ms
64 bytes from 172.16.128.41: icmp_seq=2 ttl=63 time=0.482 ms
64 bytes from 172.16.128.41: icmp_seq=3 ttl=63 time=0.464 ms
--- 172.16.128.41 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2043ms
rtt min/avg/max/mdev = 0.464/0.486/0.514/0.020 ms
root@dnsmasq01:~# ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=4.82 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=3.73 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=3.42 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 3.417/3.987/4.816/0.599 ms
root@dnsmasq01:~# ping -c 3 google.com
PING google.com (172.217.161.46) 56(84) bytes of data.
64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=1 ttl=116 time=6.69 ms
64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=2 ttl=116 time=4.21 ms
64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=3 ttl=116 time=3.72 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 3.720/4.873/6.693/1.301 ms
LXC に dnsmasq を入れる
DHCP と DNS を動かすので、apt で dnsmasq を入れる。apt install -y dnsmasq するだけ。
root@dnsmasq01:systemctl status dnsmasq
* dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-12-01 09:04:59 UTC; 1min 23s ago
Invocation: 75c968bbaf954d9788983a2a1776287a
Docs: man:dnsmasq(8)
Process: 1875 ExecStartPre=/usr/share/dnsmasq/systemd-helper checkconfig (code=exited, status=0/SUCCESS)
Process: 1881 ExecStart=/usr/share/dnsmasq/systemd-helper exec (code=exited, status=0/SUCCESS)
Process: 1887 ExecStartPost=/usr/share/dnsmasq/systemd-helper start-resolvconf (code=exited, status=0/SUCCESS)
Main PID: 1886 (dnsmasq)
Tasks: 1 (limit: 18623)
Memory: 2M (peak: 4.6M)
CPU: 26ms
CGroup: /system.slice/dnsmasq.service
`-1886 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new>
Dec 01 09:04:59 dnsmasq01 systemd[1]: Starting dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server...
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: started, version 2.91 cachesize 150
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: DNS service limited to local subnets
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP>
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: reading /etc/resolv.conf
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: using nameserver 172.16.128.1#53
Dec 01 09:04:59 dnsmasq01 dnsmasq[1886]: read /etc/hosts - 8 names
Dec 01 09:04:59 dnsmasq01 systemd[1]: Started dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server.
lines 1-23/23 (END)
/etc/dnsmasq.conf を編集する。
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=eth0
# Uncomment this to enable the integrated DHCP server, you need
# to supply the range of addresses available for lease and optionally
# a lease time. If you have more than one network, you will need to
# repeat this for each network on which you want to supply DHCP
# service.
dhcp-range=172.16.192.129,172.16.192.159,12h
# Override the default route supplied by dnsmasq, which assumes the
# router is the same machine as the one running dnsmasq.
dhcp-option=3,172.16.192.1
dhcp-option=6,172.16.128.1
domain-needed
bogus-priv
systemctl restart dnsmasq する。
適当に LXC をあげて、確認。journalctl -xeu dnsmasq.service してみる。
-- The job identifier is 494.
Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPDISCOVER(eth0) bc:24:11:31:cf:85
Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPOFFER(eth0) 172.16.192.148 bc:24:11:31:cf:85
Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPREQUEST(eth0) 172.16.192.148 bc:24:11:31:cf:85
Dec 01 09:30:04 dnsmasq01 dnsmasq-dhcp[1970]: DHCPACK(eth0) 172.16.192.148 bc:24:11:31:cf:85 test01


コメント