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"];
};
上記の設定で動く場合もあるのですが、デフォルトゲートウェイへの出て行き方が分からずに失敗する場合があります(一敗)。その場合は以下のように routes に Destination を追加してください[1]:
routes = [
{
Destination = "198.51.100.1";
}
# ...
];
NixOS Wiki も参考にしてください:https://nixos.wiki/wiki/Systemd-networkd
注釈
-
NixOS Wiki を読み直すと、実は
GatewayOnLink = true;を設定すれば良かった可能性もあります。真相は闇の中。 ↩