diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix index 310527667d7..9d61a4b0530 100644 --- a/nixos/modules/tasks/network-interfaces-scripted.nix +++ b/nixos/modules/tasks/network-interfaces-scripted.nix @@ -85,6 +85,12 @@ in optionalString (cfg.defaultGatewayWindowSize != null) "window ${cfg.defaultGatewayWindowSize}"} || true ''} + ${optionalString (cfg.defaultGateway6 != null && cfg.defaultGateway6 != "") '' + # FIXME: get rid of "|| true" (necessary to make it idempotent). + ip -6 route add ::/0 via "${cfg.defaultGateway6}" ${ + optionalString (cfg.defaultGatewayWindowSize != null) + "window ${cfg.defaultGatewayWindowSize}"} || true + ''} ''; }; diff --git a/nixos/modules/tasks/network-interfaces-systemd.nix b/nixos/modules/tasks/network-interfaces-systemd.nix index 10185c7709b..70158fc7252 100644 --- a/nixos/modules/tasks/network-interfaces-systemd.nix +++ b/nixos/modules/tasks/network-interfaces-systemd.nix @@ -51,6 +51,8 @@ in DHCP = override (dhcpStr cfg.useDHCP); } // optionalAttrs (cfg.defaultGateway != null) { gateway = override [ cfg.defaultGateway ]; + } // optionalAttrs (cfg.defaultGateway6 != null) { + gateway = override [ cfg.defaultGateway6 ]; } // optionalAttrs (domains != [ ]) { domains = override domains; }; diff --git a/nixos/modules/tasks/network-interfaces.nix b/nixos/modules/tasks/network-interfaces.nix index 9c6c71a1dbb..807a56a32d2 100644 --- a/nixos/modules/tasks/network-interfaces.nix +++ b/nixos/modules/tasks/network-interfaces.nix @@ -256,6 +256,15 @@ in ''; }; + networking.defaultGateway6 = mkOption { + default = null; + example = "2001:4d0:1e04:895::1"; + type = types.nullOr types.str; + description = '' + The default ipv6 gateway. It can be left empty if it is auto-detected through DHCP. + ''; + }; + networking.defaultGatewayWindowSize = mkOption { default = null; example = 524288;