Cover Image for 自宅サーバーのIP割り当てをマネジメント化した

自宅サーバーのIP割り当てをマネジメント化した

2026/10/23
...

私のおうちにはProxmoxクラスタがいます。
pve / pve2 / pve3 / pve4 の4ノード構成で、VM・LXC・k8s Applicationがまあだいたい40台くらい稼働しています。
これまではSSHや設定時にわかりやすいよう、10.0.ノード番号.VMIDのようにStaticで割り当てていました。

が、ライブマイグレーションやk8s移行をするうちにVMIDは一致しているもののノード番号がズレたり、k8sにいるのでVMIDはないのにIPだけ持っている、といったことが増えてきました。
いい加減把握がめんどくさくてやってられないので、この辺の割り当て・管理を(ほぼ)自動化しました。

アーキテクチャ


How to

  • VMIDさえ分かっていれば脳死でssh繋ぎに行ける
  • 普段のVM/LXC作成フローに割り込まない
    この2つは怠惰Humanにとっては譲れないので、ここをメインで作りました

DHCP予約

PVEクラスタで/cluster/resourcesを5s間隔くらいでポーリングして、ip-manageタグがついたVMIDとMACのリストを作ります。
これをOpenwrtのDHCP予約に突っ込んで自動割り当てされるようにしています。

ただ、5sごとにDHCP予約更新するのは美しくないので、差分があるとき、要は追加なり削除なりされたときだけ予約更新されるようにしています。
OSに依存せずゲストをDHCPにするだけで規則に従い全自動割り当てしてくれるので便利になりました。

でもVMIDが255超えたらどうすんのって思うかもしれません。私は天才なので、家のネットワークは/16で切っています。
10.0.30.X以降の30~33のセグメントを使い、次のようなマッピングをすることで255以上のVMIDもハンドリングできるようにしています。

  • 計IP = 10.0.30.0 + VMID
    • VMID 100〜254 → 10.0.30.100〜10.0.30.254
    • VMID 257〜510 → 10.0.31.1〜10.0.31.254
    • VMID 513〜766 → 10.0.32.1〜10.0.32.254
    • VMID 769〜999 → 10.0.33.1〜10.0.33.231
    • 末尾 .0 / .255 になるVMIDはエラーとして割り当てません。

ip-sync

k8sに常駐させているPythonスクリプトです。

  • 動き
    • 5秒周期でPVE API /cluster/resources?type=vm をポーリング
    • PVE APIをPVEAuditorで叩く
    • 毎回全VMのconfigを叩くと重いので新規VMIDやタグ変更・ノード移動があった時だけ/nodes/{node}/{type}/{vmid}/configを読みMACをキャッシュ。
  • 実IPとのドリフト検知
    • 60秒周期の別スレッドで、稼働中VMのGuest AgentやLXCの/interfacesから今掴んでいるIPをとる
    • DHCP予約と実割り当てを比較し、ずれていれば/statusエンドポイントに出す

Openwrt側ヘルパー

重複とか人間のオペレーションとかぶるとやばいので、いくつかフェイルセーフを入れています。

  • .lockファイルを置きロックを取得してから操作する
    • 既存のUCI操作を検知した場合はロックを即時解除し・適用中止する
    • 既存の操作がcommitされるまではロックを取得しない
  • 競合を検知した場合は適用中止する
  • ついでに/etc/sysupgrade.confに書き足して、ファームアップデートで消えないようにする

netbox同期

都合よく我が家には野生のNetBoxが生えているので、Netboxに自動同期するようにしました。

おわり

こんな感じに変わっています

項目Before(従来)After(今回)
IPのルール10.0.<ノード番号>.<VMID>10.0.30.0 + VMID(例:VM107 → 10.0.30.107)
手動SSHのしやすさノード番号+VMIDが必要VMIDだけでSSH可能
設定方法ゲスト内 or PVE設定に手動で固定IP入力ゲストはDHCP統一+ip-managed タグでDHCP予約を自動生成
マイグレーション時IPとノード番号が不一致になる or IP変更+nginx等の書き換えが必要何もしなくていい、うれしいハッピー
NetBox連携LXCのDHCP非対応、移動後の旧IPがゴミとして残るLXCの実IP取得に対応+使われなくなった旧IPを自動整理