blog.anqou.net
rss
author
tags

NixOS のネットワークを静的 IP アドレスで疎通させる

NixOS の configuration.nix は、デフォルトでは DHCP を使い動的に IP アドレスを取得する設定になっています。これを変更して静的な IP アドレスでネットワークを疎通させる方法をまとめます。なお一番簡単なのは NetworkManager を有効にして手動で(GUI や nmcli を使って)作業することだと思いますが、せっかくの NixOS なので configuration.nix から宣言的に設定します。

手元で試した限りだと systemd-networkd を使うのが最も簡単です。ということで以下のように設定します:

systemd.network = {
  enable = true;
  networks."10-wan" = {
    # インターネットに出ていける NIC
    matchConfig.Name = "eno1";
    # 割り当てられた IP アドレスとサブネットマスク
    address = ["198.51.100.100/24"];
    routes = [
      {
        # デフォルトゲートウェイ
        Gateway = "198.51.100.1";
      }
    ];
    linkConfig.RequiredForOnline = "routable";
  };
};
networking = {
  useDHCP = false; # DHCP を無効化
  defaultGateway = "198.51.100.1"; # デフォルトゲートウェイ
  # DNS サーバ
  nameservers = ["198.51.100.200" "198.51.100.201"];
};

上記の設定で動く場合もあるのですが、デフォルトゲートウェイへの出て行き方が分からずに失敗する場合があります(一敗)。その場合は以下のように routesDestination を追加してください[1]

    routes = [
      {
        Destination = "198.51.100.1";
      }
      # ...
    ];

NixOS Wiki も参考にしてください:https://nixos.wiki/wiki/Systemd-networkd

注釈