0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Wi-Fi で Proxmox on NixOS をする方法

Last updated at Posted at 2025-05-29

NixOS on Proxmox の間違いだと思いましたか?......いいえ、NixOS「で」動かします。

目的

  • Wi-Fi接続でProxmoxを運用する
  • ↑のための面倒な設定をすべてNixOSで管理する

Proxmox側からできる設定がNixOSにより制限されていること除けば、やることは以下の公式ドキュメントの通りです。

Proxmoxの公式ドキュメントにある通り、Proxmoxを無線LANインターフェースで動かすことは推奨されていません。

今回のようにセットアップを工夫することで動かすことはできますが、無線なので通信が不安定という課題は残ります。

準備

  • 物理マシン
    • 今回はミニPC (GMKtec G3 Plus) を使用しました
  • NixOS Configuration
    • 事前にこのPC用の最低限の設定を用意しておくと楽です
    • 宣言的管理のため、ネットワークデーモンにはNetworkManagerではなく、systemd-networkdを使用します

普通のNixOSのネットワーク設定

上記の準備のもとNixOSをインストール(当然Windowsは消し飛ば)し、Wi-Fiでインターネットに繋った状態の基本的なNixOSができあがったものとします。この時点のネットワーク設定は以下のようになっています。

  # usual network settings
  networking.useNetworkd = true;
  networking.networkmanager.enable = false;
  networking.interfaces."wlp1s0" = {
    ipv4.addresses = [{
      address = "192.168.0.100"; # 利便性のため静的IPを要求
      prefixLength = 24;
    }];
  };
  networking.defaultGateway = {
    interface = "wlp1s0";
    address = "192.168.0.1"; # おうちのルーターのアドレス
  };
  networking.nameservers = [ "8.8.8.8" "1.1.1.1" ];
  networking = {
    wireless.enable = true;
    wireless.secretsFile = "/run/secrets/wireless.conf"; # 中身は psk_home=おうちwifiのpassword
    wireless.networks."おうちwifiのssid" = {
      pskRaw = "ext:psk_home";
    };
  };

ブリッジとDHCPサーバーの作成

ブリッジbr0を作成し、このブリッジでDHCPサーバーを立てます。keaでDHCPサーバーを立ててもいいのですが、systemd-networkdだけで立てることができてしまうので、今回はこの方法で設定します。

  # create bridge for mini dhcp server
  systemd.network.netdevs."br0".netdevConfig = {
    Name = "br0";
    Kind = "bridge";
  };
  systemd.network.networks."00-br0" = {
    matchConfig.Name = "br0";
    networkConfig = {
      Address = "10.42.0.1/24"; # デフォルトゲートウェイになる
      DHCPServer = "yes";
    };
    dhcpServerConfig = {
      PoolOffset = 100; # 適当。割り当てが 10.42.0.100 ~ になる
      PoolSize = 100; # 適当。subnet maskが255.255.255.0なのでデカすぎても意味ない
    };
  };

インタフェースをブリッジに追加

あとはVMやEthernetの接続ポートをブリッジbr0のメンバーに追加してあげるだけで、接続先にIPアドレスが振られていきます。

  # vm taps to br0
  systemd.network.networks."30-tap0" = {
    matchConfig.Name = "tap*"; # VMを立てると tap<vmid>i0 のようなポートが生えて繋ってくる
    networkConfig = { Bridge = "br0"; };
  };

  # enp3s0 to br0 (おまけ: ミニPCから物理配線で繋がった先のデバイスにもルーティングできる)
  systemd.network.networks."20-enp3s0" = {
    matchConfig.Name = "enp3s0";
    networkConfig = { Bridge = "br0"; };
  };

NAT

このままではVM達はインターネットの海には出られないので、NATの設定をしてあげます。このとき、インターネットにつながっている無線LANインターフェースが外側になります。

  # nat via wlp1s0
  networking.nat = {
    enable = true;
    externalInterface = "wlp1s0";
    internalInterfaces = [ "br0" ];
  };

本当にこれだけでいいの?お手軽すぎて涙が...

proxmox-nixosの導入

proxmox-nixosという、Proxmox on NixOS を実現してくれるプロジェクトがあります。
ありがとうありがとう。

flake.nixinputsに次の行を追加してあげましょう

    proxmox-nixos.url = "github:SaumonNet/proxmox-nixos";

それからNixOSのコンフィグに以下の項目を追加します。

  nixpkgs.overlays = [
    inputs.proxmox-nixos.overlays."x86_64-linux"
  ];
  services.proxmox-ve = {
    enable = true;
    ipAddress = "192.168.0.100"; # 先ほど固定したミニPCのIPアドレス
  };

さて、この状態でnixos-rebuildしてあげると早速Proxmoxが使えます。

192.168.0.100:8006でProxmoxのWEBダッシュボードが開けるはずです(ルートユーザーとしてログインしてあげましょう)。

Proxmoxからブリッジを作る

本来、Wi-Fi接続ではなく、かつ素のProxmoxを使用している場合、上記設定はいらないんです。proxmox-nixosを使う場合、Proxmoxのダッシュボードでネットワークの設定をいじっても、NixOS側のRead Onlyな領域を書きかえることができないので、NixOS側の設定で整合性を取る必要があるわけですね。

ノードのNetworkCreateでブリッジを作成します。このとき、ブリッジ名はNixOS側で先ほど準備してあげた物を入力する必要があります。

screenshot-20250530-045946.png

また、有線接続の場合と異なり、CIDRやGatewayはおうちルーターのものではなく、先ほどミニPC内部で組んだものを指定する必要があります。

NixOS側と同じ名前のブリッジを作れていると、br0のActiveがYesとなります。

screenshot-20250530-051232.png

VMを作成する

あとは普通のProxmoxと同様に、Ubuntu Serverのisoをアップロードして、Create VMボタンからポチポチして作ることができます。

VMを作ってみて、IPが振ってこなかったりインターネットに繋がらなかったりする場合はどこかしらの設定を間違えている可能性が高いです。

screenshot-20250530-055447.png

うん、よき。

おわりに

何か間違ったことを言っていたら指摘していただけると嬉しいです。

なんか、こういう変な構成やってるとますますNixが好きになっちゃうね...///

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?