Files
infra-nix/modules/gateway.nix
T
danlin 7568578f60 Point konnektor.home.lindenfelser.de at konnektor-web
konnektor-web is deployed and listening on 10.202.82.49:8082.
Replace the 503 placeholder with a real reverse_proxy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 00:52:35 +02:00

117 lines
3.1 KiB
Nix

{ config, pkgs, ... }:
{
########################################
# AdGuardHome (DNS / DNS-Filter)
########################################
services.adguardhome = {
enable = true;
host = "127.0.0.1";
port = 3000; # Web-UI
};
########################################
# Caddy (Reverse Proxy)
########################################
services.caddy = {
enable = true;
email = "daniel@lindenfelser.de";
virtualHosts = {
"files.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.6:8080
'';
};
"cloud.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.6:8080
'';
};
"dns.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 127.0.0.1:3000
'';
};
"smart.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.30:8123
'';
};
"git.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.6:3000
'';
};
# konnektor-web — Frontend
"konnektor.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.49:8082
'';
};
# konnektor-api Frontend REST
"api.konnektor.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.49:8080
'';
};
# Zitadel OIDC
# Wichtig: `header_up Host {host}` — Zitadel routet anhand des Host-
# Headers; ohne das sieht es den Upstream-Container-Hostname und failt.
"auth.konnektor.home.lindenfelser.de" = {
extraConfig = ''
reverse_proxy 10.202.82.49:8081 {
header_up Host {host}
}
'';
};
# Mailpit Web UI — NUR aus dem LAN 10.202.82.0/24 erreichbar.
# Alle anderen IPs bekommen 403, ohne dass Mailpit jemals angerufen wird.
"mailpit.konnektor.home.lindenfelser.de" = {
extraConfig = ''
@lan client_ip 10.202.82.0/24
handle @lan {
reverse_proxy 10.202.82.49:8025
}
handle {
respond "forbidden mailpit ist nur aus dem LAN 10.202.82.0/24 erreichbar" 403
}
'';
};
};
};
########################################
# Firewall
########################################
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [
22 # SSH
80 # HTTP (Caddy)
443 # HTTPS (Caddy)
2222 # External SSH to Gitea
];
networking.firewall.allowedUDPPorts = [
53 # DNS (AdGuardHome)
];
########################################
# NAT / Port Forwarding
########################################
networking.nat = {
enable = true;
externalInterface = "ens18";
# Hairpin NAT for LAN clients hitting gateway:2222 so replies go back via gateway
extraCommands = ''
iptables -t nat -A POSTROUTING -p tcp -d 10.202.82.6 --dport 2222 -j MASQUERADE
'';
forwardPorts = [
{
proto = "tcp";
sourcePort = 2222;
destination = "10.202.82.6:2222";
}
];
};
}