From 9b0fc14795d0be5e5145b982f8e6f127b180f289 Mon Sep 17 00:00:00 2001 From: soraefir Date: Fri, 1 May 2026 17:57:06 +0200 Subject: [PATCH] Cleaner forwarding --- .../system/network/wireguard/forwarding.nix | 10 ++++--- modules/shared/syscfg/default.nix | 28 ++++++------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/modules/nixos/system/network/wireguard/forwarding.nix b/modules/nixos/system/network/wireguard/forwarding.nix index c7a051f..97a5d35 100644 --- a/modules/nixos/system/network/wireguard/forwarding.nix +++ b/modules/nixos/system/network/wireguard/forwarding.nix @@ -24,11 +24,13 @@ in ${concatMapStringsSep "\n" (ports: let - src = builtins.elemAt ports 0; - dst = builtins.elemAt ports 1; + from = builtins.elemAt ports 0; + to = builtins.elemAt ports 1; + src = builtins.elemAt ports 2; + dst = builtins.elemAt ports 3; in '' - iifname "${cfg.inInterface}" tcp dport ${toString src} counter dnat to ${cfg.toAddr}:${toString dst} - iifname "${cfg.inInterface}" udp dport ${toString src} counter dnat to ${cfg.toAddr}:${toString dst} + iifname "${from}" tcp dport ${toString src} counter dnat to ${to}:${toString dst} + iifname "${from}" udp dport ${toString src} counter dnat to ${to}:${toString dst} '' ) cfg.forwarding.ports} } diff --git a/modules/shared/syscfg/default.nix b/modules/shared/syscfg/default.nix index c81178b..3a4fdbb 100644 --- a/modules/shared/syscfg/default.nix +++ b/modules/shared/syscfg/default.nix @@ -51,25 +51,15 @@ let type = types.listOf types.str; default = []; }; - forward = { - inInterface = mkOption { - type = types.str; - default = "ens3"; - description = "Incoming interface for forwarding"; - }; - - toAddr = mkOption { - type = types.str; - description = "Destination address (IPv4 or IPv6)"; - example = "10.10.1.2"; - }; - - ports = mkOption { - type = types.listOf (types.listOf types.port); - default = []; - description = "Port mappings: [ [srcPort dstPort] ... ]"; - example = [ [ 22 22 ] [ 80 80 ] [ 443 443 ] ]; - }; + forward = mkOption { + type = types.listOf (types.listOf (types.oneOf [ types.str types.int ])); + default = []; + description = "Forwarding rules: [ [srcInterface dstAddr srcPort dstPort] ... ]"; + example = [ + [ "ens3" "10.10.1.2" 22 2222 ] + [ "ens3" "10.10.1.2" 80 80 ] + [ "ens3" "10.10.1.2" 443 443 ] + ]; }; }; };