diff --git a/gateway/proxy-protocol.yaml b/gateway/proxy-protocol.yaml new file mode 100644 index 0000000..123f7e7 --- /dev/null +++ b/gateway/proxy-protocol.yaml @@ -0,0 +1,23 @@ +# node001 passes TLS for the tunneled hosts through without opening it, so +# without this every request arrives from 46.224.26.65. Wordfence locks that +# address out after 20 failed logins (2026-10-26), and with it everyone who +# logs in to scoutingmbg.nl. node001 puts a PROXY header with the visitor's +# address in front of each connection; Envoy takes the address from there +# and adds it to X-Forwarded-For. +# +# Optional, because s2 and ntfy2 point straight at home and their clients +# send no header, and neither does node001's proxy on port 80. The price: +# whoever connects to the home address directly can send a header of their +# own and claim any address. +apiVersion: gateway.envoyproxy.io/v1alpha1 +kind: ClientTrafficPolicy +metadata: + name: proxy-protocol + namespace: envoy-gateway-system +spec: + targetRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: homelab + proxyProtocol: + optional: true diff --git a/nix-infra-machine/nodes/node001.nix b/nix-infra-machine/nodes/node001.nix index ba80b9d..dd29371 100644 --- a/nix-infra-machine/nodes/node001.nix +++ b/nix-infra-machine/nodes/node001.nix @@ -173,12 +173,18 @@ in # - mail.rubenhensen.nl (and anything else) → local stalwart on 8443 # - tunneled hosts → home cluster ingress on 443 # - s1 / ntfy1.rubenhensen.nl → local nginx on 8444 (Gatus, ntfy) + # + # Each connection starts with a PROXY header that carries the visitor's + # address, so the home cluster sees who is asking instead of this box + # (gateway/proxy-protocol.yaml in k8scd). nginx sends the header to + # every upstream or none, so the local ones go through a hop on + # 8445/8446 that takes it off again. streamConfig = '' map $ssl_preread_server_name $tunnel_upstream { ${sniMapEntries} - s1.rubenhensen.nl 127.0.0.1:8444; - ntfy1.rubenhensen.nl 127.0.0.1:8444; - default 127.0.0.1:8443; + s1.rubenhensen.nl 127.0.0.1:8446; + ntfy1.rubenhensen.nl 127.0.0.1:8446; + default 127.0.0.1:8445; } server { @@ -186,6 +192,17 @@ ${sniMapEntries} listen [::]:443; proxy_pass $tunnel_upstream; ssl_preread on; + proxy_protocol on; + } + + server { + listen 127.0.0.1:8445 proxy_protocol; + proxy_pass 127.0.0.1:8443; + } + + server { + listen 127.0.0.1:8446 proxy_protocol; + proxy_pass 127.0.0.1:8444; } '';