nixos/colony: Replicate port forwards for internal routing
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib.my) net;
|
||||
inherit (lib.my.c.colony) domain prefixes;
|
||||
inherit (lib.my.c.colony) domain prefixes firewallForwards;
|
||||
in
|
||||
{
|
||||
imports = [ ./vms ];
|
||||
@@ -351,6 +351,7 @@ in
|
||||
|
||||
firewall = {
|
||||
trustedInterfaces = [ "vms" ];
|
||||
nat.forwardPorts."${allAssignments.estuary.internal.ipv4.address}" = firewallForwards allAssignments;
|
||||
extraRules = ''
|
||||
define cust = { vm-mail, vm-darts }
|
||||
table inet filter {
|
||||
|
@@ -2,7 +2,7 @@
|
||||
let
|
||||
inherit (builtins) elemAt;
|
||||
inherit (lib.my) net mkVLAN;
|
||||
inherit (lib.my.c.colony) pubV4 domain prefixes;
|
||||
inherit (lib.my.c.colony) pubV4 domain prefixes firewallForwards;
|
||||
in
|
||||
{
|
||||
nixos = {
|
||||
@@ -356,31 +356,7 @@ in
|
||||
nat = {
|
||||
enable = true;
|
||||
externalInterface = "wan";
|
||||
forwardPorts."${assignments.internal.ipv4.address}" = [
|
||||
{
|
||||
port = "http";
|
||||
dst = allAssignments.middleman.internal.ipv4.address;
|
||||
}
|
||||
{
|
||||
port = "https";
|
||||
dst = allAssignments.middleman.internal.ipv4.address;
|
||||
}
|
||||
{
|
||||
port = 8448;
|
||||
dst = allAssignments.middleman.internal.ipv4.address;
|
||||
}
|
||||
|
||||
{
|
||||
port = 2456;
|
||||
dst = allAssignments.valheim-oci.internal.ipv4.address;
|
||||
proto = "udp";
|
||||
}
|
||||
{
|
||||
port = 2457;
|
||||
dst = allAssignments.valheim-oci.internal.ipv4.address;
|
||||
proto = "udp";
|
||||
}
|
||||
];
|
||||
forwardPorts."${assignments.internal.ipv4.address}" = firewallForwards allAssignments;
|
||||
};
|
||||
extraRules =
|
||||
let
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{ lib, options, config, ... }:
|
||||
let
|
||||
inherit (builtins) typeOf replaceStrings attrNames;
|
||||
inherit (builtins) typeOf attrNames;
|
||||
inherit (lib)
|
||||
optionalString concatStringsSep concatMapStringsSep mapAttrsToList optionalAttrs mkIf
|
||||
mkDefault mkMerge mkOverride;
|
||||
@@ -140,6 +140,9 @@ in
|
||||
chain postrouting {
|
||||
type nat hook postrouting priority srcnat;
|
||||
}
|
||||
chain input {
|
||||
type nat hook input priority srcnat;
|
||||
}
|
||||
}
|
||||
|
||||
${cfg.extraRules}
|
||||
@@ -179,13 +182,22 @@ in
|
||||
|
||||
my.firewall.extraRules =
|
||||
let
|
||||
inherit (lib.my.nft) natFilterChain dnatChain;
|
||||
ipK = ip: "ip${optionalString (isIPv6 ip) "6"}";
|
||||
ipEscaped = replaceStrings ["." ":"] ["-" "-"];
|
||||
|
||||
makeFilter = f:
|
||||
"${ipK f.dst} daddr ${f.dst} ${f.proto} dport ${toString f.dstPort} accept";
|
||||
makeForward = f:
|
||||
"${f.proto} dport ${toString f.port} dnat ${ipK f.dst} to ${f.dst}:${toString f.dstPort}";
|
||||
|
||||
dnatJumps = ''
|
||||
${optionalString
|
||||
iifForward
|
||||
"iifname ${cfg.nat.externalInterface} jump iif-port-forward"}
|
||||
${optionalString
|
||||
dipForward
|
||||
(concatMapStringsSep "\n " (ip: "${ipK ip} daddr ${ip} jump ${dnatChain ip}") (attrNames cfg.nat.forwardPorts))}
|
||||
'';
|
||||
in
|
||||
''
|
||||
table inet filter {
|
||||
@@ -198,7 +210,7 @@ in
|
||||
${optionalString
|
||||
dipForward
|
||||
(concatStringsSep "\n" (mapAttrsToList (ip: fs: ''
|
||||
chain filter-fwd-${ipEscaped ip} {
|
||||
chain ${natFilterChain ip} {
|
||||
${concatMapStringsSep "\n " makeFilter fs}
|
||||
return
|
||||
}
|
||||
@@ -210,7 +222,7 @@ in
|
||||
"iifname ${cfg.nat.externalInterface} jump filter-iif-port-forwards"}
|
||||
${optionalString
|
||||
dipForward
|
||||
(concatMapStringsSep "\n " (ip: "${ipK ip} daddr ${ip} jump filter-fwd-${ipEscaped ip}") (attrNames cfg.nat.forwardPorts))}
|
||||
(concatMapStringsSep "\n " (ip: "${ipK ip} daddr ${ip} jump ${natFilterChain ip}") (attrNames cfg.nat.forwardPorts))}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -224,19 +236,17 @@ in
|
||||
${optionalString
|
||||
dipForward
|
||||
(concatStringsSep "\n" (mapAttrsToList (ip: fs: ''
|
||||
chain fwd-${ipEscaped ip} {
|
||||
chain ${dnatChain ip} {
|
||||
${concatMapStringsSep "\n " makeForward fs}
|
||||
return
|
||||
}
|
||||
'') cfg.nat.forwardPorts))}
|
||||
|
||||
chain prerouting {
|
||||
${optionalString
|
||||
iifForward
|
||||
"iifname ${cfg.nat.externalInterface} jump iif-port-forward"}
|
||||
${optionalString
|
||||
dipForward
|
||||
(concatMapStringsSep "\n " (ip: "${ipK ip} daddr ${ip} jump fwd-${ipEscaped ip}") (attrNames cfg.nat.forwardPorts))}
|
||||
${dnatJumps}
|
||||
}
|
||||
chain output {
|
||||
${dnatJumps}
|
||||
}
|
||||
}
|
||||
'';
|
||||
|
Reference in New Issue
Block a user