From 803a28772f6cf3b73a191c0c2bfc69f98d4ea43d Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Sun, 30 Aug 2026 11:40:31 +0200 Subject: [PATCH] TP16.3 grosser Schnitt: 12 Hostnames aus CF-Ingress + DNS entfernt Public-Strang eingedampft. Entfernt aus Ingress UND DNS: pve, portainer, pve-mcp, ha-mcp, ds-bf, ccu, iobroker, z2m25, pbs sowie die drei CF-Access-SSH-Ziele 82unkpb5 / 3k23uow7 / j44d6tua. Ingress-Bilanz: bf-mm 6->4, bf-nas 6->3, bf-pve 9->2, Catch-all je letzte. pbs + SSH standen nicht in der Kandidatenliste -- User-Entscheid 2026-08-30 "beide mesh-only". Abnahme beidseitig gemessen: - intern traegt weiter: AdGuard loest alle neun Namen auf 10.40.20.40, Caddy antwortet HTTPS 200 (pve 0,08s / portainer 0,03s / pbs 0,03s) - oeffentlich weg: NXDOMAIN gegen 1.1.1.1 - Public-Strang unberuehrt: vw/hass/n8n/gitea weiterhin HTTP 200 Nachweis ist das Zuruecklesen der Ingress-Config, nicht die Frontend-Antwort (Access antwortet vor dem Tunnel -- TP16.3-Regel). Bewusst NICHT geschnitten: gitea-mcp + n8n-mcp. Die TP16.3-Vorpruefung schlaegt an -- gitea-mcp.emsenhuber.net steht in 9 Dateien (8 fremde Projekte + bf-infra/opencode.jsonc), ~/.claude.json nutzt zusaetzlich n8n-mcp. TP35 Schicht 1 ist nur global vollzogen, nicht auf Projekt-Ebene. Erst migrieren, dann schneiden -> Follow-up F1. Blocker fuer den Abbau der drei Alt-Tunnel: bf-public hat 0 Connectoren. Er gehoert laut Entscheid auf ap1/ap2, dort fehlen aber container-Paket UND device-mode container=yes (physische Bestaetigung am Geraet, fetch=no). Vor-Ort-Session noetig -> Follow-up F2. Bis dahin stehen bf-mm/bf-nas/bf-pve mit sechs Containern (LXC400, macmini, NAS -- alle lokalisiert). Doku an allen drei Stellen nachgezogen: Quick-Index, TP16.3-Abschnitt, Ist-Stand-Block. TP37 (CF-Connectoren in Nautobot) als Vorschlag eingetragen, Okay steht aus. Rollback: docs/cf-backup/*-20260830-vor-tp16.3-schnitt.json Co-Authored-By: Claude Opus 5 --- ...m-ingress-20260830-vor-tp16.3-schnitt.json | 1 + ...s-ingress-20260830-vor-tp16.3-schnitt.json | 1 + ...c-ingress-20260830-vor-tp16.3-schnitt.json | 1 + ...e-ingress-20260830-vor-tp16.3-schnitt.json | 1 + ...huber.net-20260830-vor-tp16.3-schnitt.json | 1 + docs/teilprojekte.md | 85 +++++++++++++++++-- 6 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 docs/cf-backup/bf-mm-ingress-20260830-vor-tp16.3-schnitt.json create mode 100644 docs/cf-backup/bf-nas-ingress-20260830-vor-tp16.3-schnitt.json create mode 100644 docs/cf-backup/bf-public-ingress-20260830-vor-tp16.3-schnitt.json create mode 100644 docs/cf-backup/bf-pve-ingress-20260830-vor-tp16.3-schnitt.json create mode 100644 docs/cf-backup/dns-emsenhuber.net-20260830-vor-tp16.3-schnitt.json diff --git a/docs/cf-backup/bf-mm-ingress-20260830-vor-tp16.3-schnitt.json b/docs/cf-backup/bf-mm-ingress-20260830-vor-tp16.3-schnitt.json new file mode 100644 index 0000000..890b5ee --- /dev/null +++ b/docs/cf-backup/bf-mm-ingress-20260830-vor-tp16.3-schnitt.json @@ -0,0 +1 @@ +{"success":true,"errors":[],"messages":[],"result":{"tunnel_id":"7a322261-380a-447b-97d2-8ebce99f5ed1","version":4,"config":{"ingress":[{"service":"http://10.40.20.167:5678","hostname":"n8n.emsenhuber.net"},{"service":"http://10.40.20.167:3001","hostname":"n8n-mcp.emsenhuber.net"},{"service":"http://10.40.20.167:3000","hostname":"gitea-mcp.emsenhuber.net"},{"service":"ssh://10.40.20.167:22","hostname":"82unkpb5.emsenhuber.net"},{"service":"https://10.40.20.135:8007","hostname":"pbs.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http_status:404"}],"warp-routing":{"enabled":false}},"source":"cloudflare","created_at":"2026-07-27T13:53:23.512528Z"}} \ No newline at end of file diff --git a/docs/cf-backup/bf-nas-ingress-20260830-vor-tp16.3-schnitt.json b/docs/cf-backup/bf-nas-ingress-20260830-vor-tp16.3-schnitt.json new file mode 100644 index 0000000..a105566 --- /dev/null +++ b/docs/cf-backup/bf-nas-ingress-20260830-vor-tp16.3-schnitt.json @@ -0,0 +1 @@ +{"success":true,"errors":[],"messages":[],"result":{"tunnel_id":"220c9958-401b-4111-9451-f3db09bba2d5","version":6,"config":{"ingress":[{"service":"http://10.40.20.157:3000","hostname":"gitea.emsenhuber.net"},{"service":"http://10.40.20.173:3000","hostname":"pve-mcp.emsenhuber.net"},{"service":"http://10.40.20.127","hostname":"vw.emsenhuber.net"},{"service":"http://10.40.20.10:8080","hostname":"ds-bf.emsenhuber.net"},{"service":"ssh://10.40.20.10:22","hostname":"3k23uow7.emsenhuber.net"},{"service":"http_status:404"}],"warp-routing":{"enabled":true}},"source":"cloudflare","created_at":"2026-08-29T17:30:22.531419Z"}} \ No newline at end of file diff --git a/docs/cf-backup/bf-public-ingress-20260830-vor-tp16.3-schnitt.json b/docs/cf-backup/bf-public-ingress-20260830-vor-tp16.3-schnitt.json new file mode 100644 index 0000000..f733504 --- /dev/null +++ b/docs/cf-backup/bf-public-ingress-20260830-vor-tp16.3-schnitt.json @@ -0,0 +1 @@ +{"success":true,"errors":[],"messages":[],"result":{"tunnel_id":"48d3b0b6-7233-4781-a76a-1de4a5e957ce","version":2,"config":{"ingress":[{"service":"http://10.40.20.40:80","hostname":"vw.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http://10.40.20.40:80","hostname":"hass.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http://10.40.20.40:80","hostname":"n8n.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http://10.40.20.40:80","hostname":"gitea.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http_status:404"}],"warp-routing":{"enabled":false}},"source":"cloudflare","created_at":"2026-08-27T05:45:54.534390Z"}} \ No newline at end of file diff --git a/docs/cf-backup/bf-pve-ingress-20260830-vor-tp16.3-schnitt.json b/docs/cf-backup/bf-pve-ingress-20260830-vor-tp16.3-schnitt.json new file mode 100644 index 0000000..8001eb8 --- /dev/null +++ b/docs/cf-backup/bf-pve-ingress-20260830-vor-tp16.3-schnitt.json @@ -0,0 +1 @@ +{"success":true,"errors":[],"messages":[],"result":{"tunnel_id":"f7fdf3a6-b67d-4567-93b1-b0f273794d09","version":3,"config":{"ingress":[{"service":"https://10.40.20.100:8006","hostname":"pve.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"ssh://10.40.20.100:22","hostname":"j44d6tua.emsenhuber.net"},{"service":"http://10.40.20.232","hostname":"ccu.emsenhuber.net"},{"service":"http://10.40.20.107:8081","hostname":"iobroker.emsenhuber.net"},{"service":"http://10.40.20.106:8080","hostname":"z2m25.emsenhuber.net"},{"service":"https://10.40.20.126:9443","hostname":"portainer.emsenhuber.net","originRequest":{"noTLSVerify":true}},{"service":"http://10.40.20.105:8123","hostname":"hass.emsenhuber.net"},{"service":"http://10.40.20.105:9583","hostname":"ha-mcp.emsenhuber.net"},{"service":"http_status:404"}],"warp-routing":{"enabled":true}},"source":"cloudflare","created_at":"2026-07-16T11:36:24.193655Z"}} \ No newline at end of file diff --git a/docs/cf-backup/dns-emsenhuber.net-20260830-vor-tp16.3-schnitt.json b/docs/cf-backup/dns-emsenhuber.net-20260830-vor-tp16.3-schnitt.json new file mode 100644 index 0000000..8d7ada6 --- /dev/null +++ b/docs/cf-backup/dns-emsenhuber.net-20260830-vor-tp16.3-schnitt.json @@ -0,0 +1 @@ +{"result":[{"id":"dba9d9ec3b261fdb314c0f83e4e62f0d","name":"bf4.emsenhuber.net","type":"A","content":"90.146.33.177","proxiable":true,"proxied":false,"ttl":120,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-22T15:54:12.839723Z","modified_on":"2026-08-07T21:29:01.967068Z"},{"id":"577d240e5d37d27cc64fdda5748354f7","name":"3k23uow7.emsenhuber.net","type":"CNAME","content":"220c9958-401b-4111-9451-f3db09bba2d5.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-03T21:42:38.871205Z","modified_on":"2026-07-12T18:28:19.65943Z"},{"id":"ed42cbc0e82140213e27ea122b531fc5","name":"82unkpb5.emsenhuber.net","type":"CNAME","content":"7a322261-380a-447b-97d2-8ebce99f5ed1.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-03T22:03:52.978319Z","modified_on":"2026-07-10T18:30:27.718086Z"},{"id":"afaf7c07901399d86997d8d02bd3a8ba","name":"ccu.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-13T08:13:39.972821Z","modified_on":"2026-07-10T18:30:23.933992Z"},{"id":"70869117cdf812a33ffe82ceab6972a2","name":"ds-bf.emsenhuber.net","type":"CNAME","content":"220c9958-401b-4111-9451-f3db09bba2d5.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-06T10:37:16.36142Z","modified_on":"2026-07-12T18:28:18.918457Z"},{"id":"0da61c6143bfd0d5f9c47ca4b4147b06","name":"ds-fm.emsenhuber.net","type":"CNAME","content":"b697d124-53bf-4a33-8fcf-384cced4db1a.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-06T10:37:48.36388Z","modified_on":"2026-06-06T10:37:48.36388Z"},{"id":"54ac8b816765b45191469678891389bd","name":"gateway-fm.emsenhuber.net","type":"CNAME","content":"b697d124-53bf-4a33-8fcf-384cced4db1a.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-10T07:00:12.299628Z","modified_on":"2026-06-10T07:00:12.299628Z"},{"id":"3d6053529f99fc5832d9956ee6e8834c","name":"gitea.emsenhuber.net","type":"CNAME","content":"220c9958-401b-4111-9451-f3db09bba2d5.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-07T17:38:59.395725Z","modified_on":"2026-07-12T18:28:16.829848Z"},{"id":"a08ede13a8a7a80ed17515c10f0a3659","name":"gitea-mcp.emsenhuber.net","type":"CNAME","content":"7a322261-380a-447b-97d2-8ebce99f5ed1.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-08T05:58:29.990775Z","modified_on":"2026-07-10T18:30:27.234449Z"},{"id":"a4c5a01cd7c11afed9cc5dbf4123185f","name":"ha-mcp.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-02T18:42:12.471764Z","modified_on":"2026-07-10T18:30:26.055856Z"},{"id":"0841148f401b5db40fa02f69d0f0e848","name":"hass.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-02T16:30:13.597111Z","modified_on":"2026-07-10T18:30:25.61586Z"},{"id":"15ef29fb1ed849e8db9be75ff09bd8cf","name":"iobroker.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-14T14:54:53.659818Z","modified_on":"2026-07-10T18:30:24.315042Z"},{"id":"d10ccdb1f1e35a354454ac6486f1f0f4","name":"j44d6tua.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-02T18:50:39.418207Z","modified_on":"2026-07-10T18:30:23.567502Z"},{"id":"40b311a40e41fbeae85ca097a4036e6c","name":"n8n.emsenhuber.net","type":"CNAME","content":"7a322261-380a-447b-97d2-8ebce99f5ed1.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-03T22:10:46.852277Z","modified_on":"2026-07-10T18:30:26.430683Z"},{"id":"e6884c790ed9f67ba8079812d7851d43","name":"n8n-mcp.emsenhuber.net","type":"CNAME","content":"7a322261-380a-447b-97d2-8ebce99f5ed1.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-08T15:20:07.138128Z","modified_on":"2026-07-10T18:30:26.817789Z"},{"id":"06bc59f89eb8a69b6b47987c990561a9","name":"nginx.fm.emsenhuber.net","type":"CNAME","content":"abxhutfgsid9snmy.myfritz.net","proxiable":true,"proxied":false,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-08-29T17:29:53.646135Z","modified_on":"2026-08-29T17:29:53.646135Z"},{"id":"701b72a8aeb40350492d13a3651366b4","name":"pbs.emsenhuber.net","type":"CNAME","content":"7a322261-380a-447b-97d2-8ebce99f5ed1.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-07-14T04:41:21.635847Z","modified_on":"2026-07-14T04:41:21.635847Z"},{"id":"f390243eb0f1706261a3c75b0ce4dec1","name":"photos.emsenhuber.net","type":"CNAME","content":"domains.smugmug.com","proxiable":true,"proxied":false,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.73154Z","modified_on":"2024-02-22T12:32:32.060806Z"},{"id":"a9d16e0345bbb02e738dc6a6f92a4508","name":"pihole1.dw.emsenhuber.net","type":"CNAME","content":"xvbeo64jqlqd9gfo.myfritz.net","proxiable":true,"proxied":false,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2025-06-12T11:25:15.094291Z","modified_on":"2025-06-12T11:25:15.094291Z"},{"id":"1fcba5ef03145147426c0f32e3ac73ad","name":"pihole1.fm.emsenhuber.net","type":"CNAME","content":"nginx.fm.emsenhuber.net","proxiable":true,"proxied":false,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2024-04-08T17:13:19.824131Z","modified_on":"2024-04-08T17:13:19.824131Z"},{"id":"9a5942bdf07f4032cc35231e50a9804f","name":"pihole2.fm.emsenhuber.net","type":"CNAME","content":"nginx.fm.emsenhuber.net","proxiable":true,"proxied":false,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2024-04-08T16:50:40.770812Z","modified_on":"2024-04-08T16:50:40.770812Z"},{"id":"1059588a7c85b8b9889ddd51f53f9836","name":"portainer.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-06T10:00:38.087624Z","modified_on":"2026-07-10T18:30:25.142898Z"},{"id":"bd1349a181175bc1fb2828360a0fa1e5","name":"pve.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-02T11:24:13.758429Z","modified_on":"2026-07-10T18:30:23.081869Z"},{"id":"64f7f5202e4cfb5dc9f98ea9f90f898f","name":"pve-mcp.emsenhuber.net","type":"CNAME","content":"220c9958-401b-4111-9451-f3db09bba2d5.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-15T10:55:31.020652Z","modified_on":"2026-07-12T18:28:17.575423Z"},{"id":"2971d3ba9410e841b35ec58ffda59be4","name":"vw.emsenhuber.net","type":"CNAME","content":"220c9958-401b-4111-9451-f3db09bba2d5.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-06-13T08:21:27.092444Z","modified_on":"2026-07-12T18:28:18.338987Z"},{"id":"0e6e8c9c18c1406f48e0227a002e40fd","name":"z2m25.emsenhuber.net","type":"CNAME","content":"f7fdf3a6-b67d-4567-93b1-b0f273794d09.cfargotunnel.com","proxiable":true,"proxied":true,"ttl":1,"settings":{"flatten_cname":false},"meta":{},"comment":null,"tags":[],"created_on":"2026-07-07T09:14:27.559108Z","modified_on":"2026-07-10T18:30:24.781828Z"},{"id":"bda5cb031be80a75375082a767fa9af4","name":"emsenhuber.net","type":"MX","content":"aspmx3.googlemail.com","priority":50,"proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.703251Z","modified_on":"2024-02-21T19:31:29.703251Z"},{"id":"130a88a4ea9f2785e4f5ad4f9f92f5bd","name":"emsenhuber.net","type":"MX","content":"aspmx2.googlemail.com","priority":40,"proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.696143Z","modified_on":"2024-02-21T19:31:29.696143Z"},{"id":"f85265db70546db708b8ebb93b6ab00c","name":"emsenhuber.net","type":"MX","content":"aspmx.l.google.com","priority":10,"proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.69007Z","modified_on":"2024-02-21T19:31:29.69007Z"},{"id":"34c722174c3904123d8b25713ce30697","name":"emsenhuber.net","type":"MX","content":"alt2.aspmx.l.google.com","priority":30,"proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.684084Z","modified_on":"2024-02-21T19:31:29.684084Z"},{"id":"a78ab27268db3b95c3dcde3a6c03d79b","name":"emsenhuber.net","type":"MX","content":"alt1.aspmx.l.google.com","priority":20,"proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T19:31:29.67794Z","modified_on":"2024-02-21T19:31:29.67794Z"},{"id":"bcb447a20e4ad771ccb6937457e7b724","name":"_acme-challenge.emsenhuber.net","type":"TXT","content":"vlPY42lL4aJPhEMrHS31h9FimCjNg9fETkIrJhGAVVU","proxiable":false,"proxied":false,"ttl":120,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-22T19:41:45.4906Z","modified_on":"2024-02-22T19:41:45.4906Z"},{"id":"a0a2c7b16a8fc090c1a8a83b242c972c","name":"_acme-challenge.emsenhuber.net","type":"TXT","content":"ZuxXYs28EwH3ADxeMBOqWMcmQpeR1g38dhXTBsqB0xw","proxiable":false,"proxied":false,"ttl":120,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-22T19:41:42.735156Z","modified_on":"2024-02-22T19:41:42.735156Z"},{"id":"6e2610abfdcc839f0bea868c88cd2cea","name":"_acme-challenge.grafana.emsenhuber.net","type":"TXT","content":"HHLAe3cjmTzq9ncOtpT_5KojkK77SVLer4_eckuHHuA","proxiable":false,"proxied":false,"ttl":120,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2026-02-21T20:08:57.94109Z","modified_on":"2026-02-21T20:08:57.94109Z"},{"id":"5023a8d64f4bfaa4b5aecf143d3cdfcf","name":"_dmarc.emsenhuber.net","type":"TXT","content":"v=DMARC1; p=none; rua=mailto:657a5f72f4e54b3bb691fc8251465c0e@dmarc-reports.cloudflare.net","proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T20:12:34.504943Z","modified_on":"2024-02-21T21:03:32.561226Z"},{"id":"bf6cfcba01c77409324013f76ca25417","name":"emsenhuber.net","type":"TXT","content":"v=spf1 include:_spf.google.com -all","proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2024-02-21T21:05:27.656289Z","modified_on":"2024-02-21T21:05:27.656289Z"}],"success":true,"errors":[],"messages":[],"result_info":{"page":1,"per_page":200,"count":36,"total_count":36,"total_pages":1}} \ No newline at end of file diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index dca4975..75b1703 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -33,6 +33,16 @@ Mgmt (VLAN99, Ist 2026-08-16): core `.99.1` · branch `.99.2` · ap1 `.99.11` · liest, liest ihn als Erstes: er wird bei jeder Änderung mitgezogen, nicht nur die TP-Abschnitte.)* - 🆕 **MCP-Bestand 2026-08-28 korrigiert:** **9 MCPs identisch** in `~/.claude.json` und `~/.config/opencode/opencode.jsonc` (vorher Asymmetrie 7 vs. 11 — `portainer-mcp`/`shelly-mcp` raus, `gitea-mcp`/`n8n-mcp` rein). **Mac mini = n8n-Host, NICHT zentraler MCP-Host** (Performance-Restriktion); zentraler MCP-Host = **DS923** (`nas-bf`, Portainer Endpoint 14). Inventur-Stand `mcp/INVENTORY.md` + Policy `docs/mcp-host-policy.md`. - 🆕 **MCP-Migration FQDN→IP (2026-08-29, TP35 Schicht 1):** `gitea-mcp` und `n8n-mcp` in `~/.config/opencode/opencode.jsonc` von CF-FQDN auf LAN-IP umgestellt — `gitea-mcp` → `http://10.40.20.167:3000/mcp` (macmini, **ohne** Bearer, intern), `n8n-mcp` → `http://10.40.20.167:3001/mcp` (mit `Bearer {env:N8N_MCP_BEARER}`). **Befund dabei:** der Handoff 1.2 nannte für gitea-mcp die falsche IP `.157:3000` (das ist die Gitea-Web-UI, `400 Invalid CSRF`); der echte gitea-mcp läuft auf `.167:3000` (`serverInfo: gitea-mcp 0.0.10`). `cloudflare`-MCP bleibt auf dem offiziellen FQDN (User-Direktive). +- 🆕 **CF-Public-Strang eingedampft (2026-08-30, TP16.3 grosser Schnitt):** **12 Hostnames** aus Ingress + **und** DNS entfernt — `pve`/`portainer`/`pve-mcp`/`ha-mcp`/`ds-bf`/`ccu`/`iobroker`/`z2m25`/`pbs` + plus die drei CF-Access-SSH-Ziele. Ingress: `bf-mm` 6→4, `bf-nas` 6→3, `bf-pve` 9→2. **Öffentlich + bleiben nur `vw`/`hass`/`n8n`/`gitea`** (weiterhin HTTP 200). Intern unverändert über AdGuard→Caddy + (9× HTTP 200). ⚠️ **`gitea-mcp`/`n8n-mcp` bewusst stehen gelassen** — hängen noch in 10 Dateien + (8 fremde Projekte, `bf-infra/opencode.jsonc`, `~/.claude.json`); **TP35 Schicht 1 ist nur global + vollzogen, nicht auf Projekt-Ebene.** 🔴 **`bf-public` hat weiterhin 0 Connectoren** — er gehört + laut Entscheid auf **ap1/ap2**, dort fehlen aber `container`-Paket **und** `device-mode container=yes` + (physische Bestätigung nötig). Bis dahin stehen `bf-mm`/`bf-nas`/`bf-pve` mit **6 Containern**. + Backups: `docs/cf-backup/*-20260830-vor-tp16.3-schnitt.json`. - 🆕 **Globale Verhaltensregeln konsolidiert (2026-08-29, TP35 Schicht 3):** `~/.config/opencode/AGENTS.md` ist jetzt die **SSoT** für globale Verhaltensregeln (Secrets, VLAN-Schema, 5 Lessons, SoC, Übergabe-Mechanik, Mid-Action-Checkpoint, Commit-Hinweis, Backup-Guard). `~/.claude/CLAUDE.md` hält denselben Block als Claude-Code-Spiegelung mit Verweis auf die SSoT. opencode liest AGENTS.md mit Vorrang vor `~/.claude/CLAUDE.md`. - **Alle vier MikroTik laufen auf RouterOS 7.24** (stable, 2026-08-17 von Christoph selbst gehoben, TP27), @@ -96,7 +106,12 @@ liest, liest ihn als Erstes: er wird bei jeder Änderung mitgezogen, nicht nur d -**Nächster Schritt (Stand 2026-08-28): drei Folge-Sessions parallel** (siehe `docs/handoff-20260828-mcp-bestand-und-performance.md`): +**Nächster Schritt (Stand 2026-08-30): Vor-Ort-Session ap1/ap2** — sie ist der einzige Weg, den +Public-Strang auf `bf-public` zu heben und die drei Alt-Tunnel samt sechs Containern abzubauen +(TP16.3 Follow-up F2). Davor unabhängig machbar: **F1** (`gitea-mcp`/`n8n-mcp` in 10 Dateien auf +LAN-IP, vollendet TP35 Schicht 1) und die Announcement-Doku (TP35 Schicht 4). + +**Vorherige Fassung (Stand 2026-08-28): drei Folge-Sessions parallel** (siehe `docs/handoff-20260828-mcp-bestand-und-performance.md`): > - ✅ **Session A** — `/projektstatus`-Skill global für opencode (TP35 Schicht 6). Funktionsbeweis erbracht 2026-08-28. > - 🔜 **Session B** — shelly-mcp-Container auf DS923 (`10.40.20.10`) deployen (live, ssh). Repo-Materialien committed (`mcp/shelly/{Dockerfile,BUILD.md,requirements.txt,.gitignore}`); `.env` und Tunnel-Secret lokal — kein MCP-Client (User-Direktive). > - 🔜 **Session C** — `caddy/cf-sync.py`-Drift-Check + Backup-Guard (`~/dev/.bin/backup-guard.sh`, TP35 Schicht 5). @@ -200,7 +215,7 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na > | TP14.4 | 🔜 | CF-Access-Token | — | > | TP16 | ✅ | CF-Tunnel HA wieder voll | 2026-08-24 | > | TP16.2 | 🔜 | Härtung bypass-Dienste | — | -> | TP16.3 | ⏳ | cloudflared-Reduktion (Probe läuft) | — | +> | TP16.3 | ⏳ | cloudflared-Reduktion (12 Hostnames geschnitten 08-30; Abbau braucht Vor-Ort-Session) | — | > | TP17.1 | ❌ | Shelly Gen4 → Zigbee | 2026-08-23 | > | TP17.3 | ✅ | Shelly-Regression behoben | 2026-08-23 | > | TP18 | 🔜 | Garage-Objektspeicher | — | @@ -216,6 +231,7 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na > | TP34 | 🔜 | Caddyfile via Nautobot/GC (Stub, Inventur-Handoff 2026-08-27) | — | > | TP35 | ⏳ | MCP-Schichtung + 3-Schicht-CLAUDE.md + Backup-Guard (Schicht 1+3+6 ✅) | — | > | TP36 | 🔜 | SSoT via Nautobot für teilprojekte.md-Live-Daten + Datei-Aufteilung | — | +> | TP37 | 💡 | CF-Connectoren in Nautobot abbilden (**vorgeschlagen 2026-08-30, dein Okay fehlt**) | — | > | — | — | **34 archivierte TPs** in `teilprojekte-archiv.md` | — | ### TP5.1 — DNS-Visibility & Flow-Observability für Low-Trust-Geräte (Airfryer-Fall) ▸ vorgemerkt @@ -408,7 +424,7 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na - **Reihenfolge:** (1) Client-IP-Weitergabe fixen (inkl. HA `trusted_proxies`) → (2) `/admin`-Pfade path-scoped schützen → (3) App-Limits + 2FA → (4) Edge-Rules → (5) CrowdSec/fail2ban mit CF-Bouncer. - **Abh.:** TP16 ✅ (Tunnel-HA). Verwandt: **TP20.1** (vw wandert auf Platform-Postgres — DB-HA ≠ Access, getrennt halten), **TP23** (dessen WARP-Managed-Network-Idee ist durch diesen Constraint **entlastet**: `vw` verlangt keine Device-Identity, also kollidiert „WARP zuhause aus" nicht mehr mit dem Access-Strang). -### TP16.3 — cloudflared-Reduktion: was der Mesh als Datenpfad kann (und was nicht) ▸ ⏳ **PROBE LÄUFT SEIT 2026-08-24** — `docs/tp16.3-nautobot-mesh-only-runbook.md §8` +### TP16.3 — cloudflared-Reduktion: was der Mesh als Datenpfad kann (und was nicht) ▸ ⏳ **GROSSER SCHNITT DURCH (2026-08-30), Public-Strang blockiert** — `docs/tp16.3-nautobot-mesh-only-runbook.md §8` - ▶️ **Schnitt ausgeführt 2026-08-24:** `nautobot.emsenhuber.net` ist aus dem Ingress von `bf-nas` entfernt (**8 → 7 Regeln**, Catch-all weiterhin letzte). Rollback-Sicherung liegt unter `docs/cf-backup/bf-nas-ingress-20260824-vor-tp16.3.json` — Rückweg ist ein `PUT`, eine Minute. @@ -428,9 +444,66 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na - ⚠️ **Vorprüfung, die vor jedem weiteren Schnitt zu wiederholen ist:** hängt Werkzeug am öffentlichen Namen? Hier nein — `gc-configplan.py` spricht `http://10.40.20.30:8080/api`, und kein Repo-Skript nutzt den FQDN. -- ⏳ **Offen: das Betriebsfenster.** Eine Woche fahren (bis ~**2026-08-31**), dann entscheiden, ob es so - bleibt und ob `pve`/`portainer`/`grafana`/`pve-mcp`/`ha-mcp`/`gitea-mcp`/`ds-bf`/`ccu`/`iobroker`/`z2m25` - folgen. +- ✅ **Betriebsfenster ausgewertet 2026-08-30 (Tag 6/7): `nautobot` bleibt mesh-only.** Kein Rückweg + gebraucht, kein Ausfall. `nautobot.emsenhuber.net` hat inzwischen auch **keinen DNS-Record** mehr + (mit den CF-Leichen am 08-29 gelöscht, Commit `39ba5da`) — der Dienst ist vollständig aus dem + öffentlichen Strang heraus und ausschließlich über `10.40.20.30:8080` bzw. intern über Caddy erreichbar. + +#### ▶️ Der grosse Schnitt — ausgefuehrt 2026-08-30 (User-Entscheid „kompletter Schnitt in einem Zug") +- **12 Hostnames entfernt**, aus Ingress **und** DNS, in einem Durchgang: + `pve` · `portainer` · `pve-mcp` · `ha-mcp` · `ds-bf` · `ccu` · `iobroker` · `z2m25` · `pbs` + und die drei CF-Access-SSH-Ziele `82unkpb5` (macmini) · `3k23uow7` (NAS) · `j44d6tua` (pve). + Ingress-Bilanz: `bf-mm` 6→4 · `bf-nas` 6→3 · `bf-pve` 9→2. Catch-all in allen dreien geprüft letzte. +- **`pbs` und die SSH-Ziele standen nicht in der Kandidatenliste** — User-Entscheid 2026-08-30: beide + mesh-only. PBS erreicht man über `10.40.20.135:8007`, SSH direkt per IP, jeweils mit WARP. +- 🔴 **Zwei Namen bewusst NICHT geschnitten: `gitea-mcp` und `n8n-mcp`.** Die TP16.3-Vorprüfung + („hängt Werkzeug am öffentlichen Namen?") schlägt hier an: `gitea-mcp.emsenhuber.net` steht in + **9 Dateien** — `~/dev/{bf-network-r6,bf-network-r6.opencode,blaueblueten-n8n,dachterrasse,ha, + ha-xstate,poulios-recherche,valamar}/.mcp.json` plus `bf-infra/opencode.jsonc` — und + `~/.claude.json` nutzt zusätzlich `n8n-mcp.emsenhuber.net`. **TP35 Schicht 1 hat nur die globale + `~/.config/opencode/opencode.jsonc` auf LAN-IP migriert**; Projekt-Ebene und `~/.claude.json` sind + zurückgeblieben. Erst migrieren, dann schneiden → Follow-up **F1** unten. +- ✅ **Abnahme (2026-08-30), beide Richtungen gemessen:** + - **intern trägt weiter:** AdGuard löst alle neun Namen unverändert auf `10.40.20.40` (Split-Horizon, + TP31 Schritt 4), Caddy antwortet über HTTPS mit **HTTP 200** (`pve` 0,08 s · `portainer` 0,03 s · + `ds-bf` 0,91 s · `z2m25` 0,03 s · `pbs` 0,03 s). + - **öffentlich weg:** `pve`/`portainer`/`ha-mcp`/`pbs` gegen `1.1.1.1` → **NXDOMAIN**. + - **Public-Strang unberührt:** `vw`/`hass`/`n8n`/`gitea` weiterhin **HTTP 200** über Cloudflare. + - Nach TP16.3-Regel ist der gültige Nachweis das **Zurücklesen der Ingress-Config**, nicht die + Antwort des Frontends — die Bilanz oben stammt aus dem `GET` nach dem `PUT`. +- 📦 **Rollback:** `docs/cf-backup/{bf-mm,bf-nas,bf-pve,bf-public}-ingress-20260830-vor-tp16.3-schnitt.json` + + `docs/cf-backup/dns-emsenhuber.net-20260830-vor-tp16.3-schnitt.json` (alle `success:true`). + Ingress zurück = ein `PUT` je Tunnel; DNS zurück = CNAME auf `.cfargotunnel.com`, proxied. + +#### 🔴 Blocker: der Abbau der drei Alt-Tunnel haengt an einer Vor-Ort-Session +Der Schnitt endet hier, weil `bf-public` **noch keinen Connector hat** (0 Verbindungen, angelegt +2026-08-27) und die vier Public-Dienste weiterhin auf `bf-mm`/`bf-nas`/`bf-pve` liegen. User-Entscheid +2026-08-30: der Connector gehört auf **ap1/ap2** (TP31-Begründung: der AP ist eine eigene Maschine, +kein Docker-Host — gegenüber macvlan/ipvlan sind wir dort nicht blind). + +**Live gelesen am 2026-08-30 — der Preis ist nicht bezahlt:** +``` +ap1: /system package print → routeros 7.24, wifi-qcom 7.24 (2 Pakete, KEIN container) +ap1: /system device-mode print → mode: home · container: no · fetch: no · scheduler: no +``` +⇒ Es fehlt **beides**: das `container`-Paket (extra `.npk`, arm64) **und** `device-mode container=yes`, +und Letzteres verlangt die **physische Bestätigung am Gerät** — ap1 Technik UG, ap2 Technik OG. +`fetch: no` heißt zusätzlich: das Image kann der AP nicht selbst ziehen, es muss als `.tar` hoch und +über `/container add file=` importiert werden. **Das ist eine Vor-Ort-Session, kein Remote-Schritt.** +→ Runbook-Bedarf als Follow-up **F2**; bis dahin bleiben die drei Alt-Tunnel mit je 2 Connectoren stehen. + +#### 📌 Follow-ups aus dieser Session (2026-08-30) +- **F1 — `gitea-mcp`/`n8n-mcp` FQDN→LAN-IP in 10 Dateien** (8 fremde Projekte + `bf-infra/opencode.jsonc` + + `~/.claude.json`). Vollendet **TP35 Schicht 1**, entsperrt die letzten zwei CF-Hostnames. + ⚠️ Projektübergreifend → gehört ins **Announcement** (TP35 Schicht 4), eigene Session. +- **F2 — Vor-Ort-Runbook ap1/ap2:** `container`-Paket + `device-mode`, cloudflared-Image als `.tar`, + `bf-public`-Token, danach CNAME-Umhang der vier Public-Dienste und Abbau von `bf-mm`/`bf-nas`/`bf-pve` + samt der **sechs** Container (LXC400 `.126`: `cloudflared-bfmm`+`cloudflared-bfnas` · macmini `.167`: + `cloudflared-bfpve`+`cloudflared-bfnas` · NAS `.10`: `cloudflared-bfpve`+`cloudflared-bfmm`). + ⚠️ `terpene-cloudflared` (LXC400) gehört zum Tunnel `terpene-db` und **bleibt** — anderes Projekt. + Ebenso unberührt: Tunnel `fm.emsenhuber.net` (Standort FM). +- **F3 — CF-Connectoren in Nautobot abbilden** (User-Wunsch 2026-08-30, „durchgehende Netzwerkdoku + Stück für Stück"). Als **TP37** vorgeschlagen, noch nicht angelegt — wartet auf dein Okay. - 📌 **Ein Argument des TP ist entfallen:** die HA-Degradierung, die §7 als Nebeneffekt anführte, ist am **selben Tag repariert** (TP16 ✅). Der Fall steht damit allein auf dem eigentlichen Argument — **weniger bewegliche Teile für Dienste, die öffentlich nicht gebraucht werden.**