about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorvolth <volth@webmaster.ms>2018-06-10 16:29:32 +0000
committerxeji <36407913+xeji@users.noreply.github.com>2018-06-10 18:29:32 +0200
commitd4daddad751458b11a86b047162f098a328f96fa (patch)
tree54bcd22640e0ad49af8f8042bed416c0715ed527 /nixos
parentfe1a06698547311fd0a6991d40501e784d64aa69 (diff)
downloadnixlib-d4daddad751458b11a86b047162f098a328f96fa.tar
nixlib-d4daddad751458b11a86b047162f098a328f96fa.tar.gz
nixlib-d4daddad751458b11a86b047162f098a328f96fa.tar.bz2
nixlib-d4daddad751458b11a86b047162f098a328f96fa.tar.lz
nixlib-d4daddad751458b11a86b047162f098a328f96fa.tar.xz
nixlib-d4daddad751458b11a86b047162f098a328f96fa.tar.zst
nixlib-d4daddad751458b11a86b047162f098a328f96fa.zip
nixos/nat: optional networking.nat.externalInterface (#41758)
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/networking/nat.nix16
1 files changed, 13 insertions, 3 deletions
diff --git a/nixos/modules/services/networking/nat.nix b/nixos/modules/services/networking/nat.nix
index da3827c35e63..c27ae3f66f65 100644
--- a/nixos/modules/services/networking/nat.nix
+++ b/nixos/modules/services/networking/nat.nix
@@ -38,13 +38,13 @@ let
     # NAT the marked packets.
     ${optionalString (cfg.internalInterfaces != []) ''
       iptables -w -t nat -A nixos-nat-post -m mark --mark 1 \
-        -o ${cfg.externalInterface} ${dest}
+        ${optionalString (cfg.externalInterface != null) "-o ${cfg.externalInterface}"} ${dest}
     ''}
 
     # NAT packets coming from the internal IPs.
     ${concatMapStrings (range: ''
       iptables -w -t nat -A nixos-nat-post \
-        -s '${range}' -o ${cfg.externalInterface} ${dest}
+        -s '${range}' ${optionalString (cfg.externalInterface != null) "-o ${cfg.externalInterface}"} ${dest}
     '') cfg.internalIPs}
 
     # NAT from external ports to internal ports.
@@ -134,7 +134,8 @@ in
     };
 
     networking.nat.externalInterface = mkOption {
-      type = types.str;
+      type = types.nullOr types.str;
+      default = null;
       example = "eth1";
       description =
         ''
@@ -236,6 +237,15 @@ in
     { networking.firewall.extraCommands = mkBefore flushNat; }
     (mkIf config.networking.nat.enable {
 
+      assertions = [
+        { assertion = (cfg.dmzHost != null)    -> (cfg.externalInterface != null);
+          message = "networking.nat.dmzHost requires networking.nat.externalInterface";
+        }
+        { assertion = (cfg.forwardPorts != []) -> (cfg.externalInterface != null);
+          message = "networking.nat.forwardPorts requires networking.nat.externalInterface";
+        }
+      ];
+
       environment.systemPackages = [ pkgs.iptables ];
 
       boot = {