nixos/nat: optional networking.nat.externalInterface ()

This commit is contained in:
volth 2018-06-10 16:29:32 +00:00 committed by xeji
parent fe1a066985
commit d4daddad75

View File

@ -38,13 +38,13 @@ let
# NAT the marked packets. # NAT the marked packets.
${optionalString (cfg.internalInterfaces != []) '' ${optionalString (cfg.internalInterfaces != []) ''
iptables -w -t nat -A nixos-nat-post -m mark --mark 1 \ 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. # NAT packets coming from the internal IPs.
${concatMapStrings (range: '' ${concatMapStrings (range: ''
iptables -w -t nat -A nixos-nat-post \ 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} '') cfg.internalIPs}
# NAT from external ports to internal ports. # NAT from external ports to internal ports.
@ -134,7 +134,8 @@ in
}; };
networking.nat.externalInterface = mkOption { networking.nat.externalInterface = mkOption {
type = types.str; type = types.nullOr types.str;
default = null;
example = "eth1"; example = "eth1";
description = description =
'' ''
@ -236,6 +237,15 @@ in
{ networking.firewall.extraCommands = mkBefore flushNat; } { networking.firewall.extraCommands = mkBefore flushNat; }
(mkIf config.networking.nat.enable { (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 ]; environment.systemPackages = [ pkgs.iptables ];
boot = { boot = {