KB: magitek-ops

← All workspaces
9213 entries 224 domains 12.95 MB database Last ingest: 2026-03-20 09:16

9213 results — page 5 of 185

Title Domain Type Severity Source Freshness Updated
SC-03: 20 vCPUer allokert — overprovisionert operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-suitecrm.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-suitecrm.md
Source date: 2026-03-15
Keywords: ["sc03","vcpuer","allokert","overprovisionert"]
Cross-domain: []
Symptoms: []
Body:
### SC-03: 20 vCPUer allokert — overprovisionert - **Symptom:** VM har 20 cores, bruker minimalt - **Losning:** Ufarlig (KVM deler cores), kan reduseres til 4-8 ### SC-04: UFW inaktiv inne i VM - **Symptom:** `ufw status` viser inactive - **Losning:** Akseptabelt med Proxmox firewall=1. Vurder UFW som defense-in-depth. ### SC-05: defaultExt frontend extension deaktivert etter upgrade - **Symptom:** Upgrade til 8.9.2 advarte om deaktivering - **Losning:** Se suitecrm-dev workspace for detaljer ### SC-06: Ingen swap konfigurert (FIKSET 2026-03-15) - **Var:** `free -h` viste 0 swap - **Fikset:** 4 GB swap konfigurert ### SC-07: /var/tmp permissions eid av www-data (FIKSET 2026-03-15) - **Var:** /var/tmp eid av www-data, manglende sticky bit - **Fikset:** Riktige permissions gjenopprettet (root:root, 1777) --- ## Monitoring & Ressursovervaking | Verktoy | Status | Intervall | Hva det gjor | |---------|--------|-----------|-------------| | **sysstat (sar)** | Installert | 10 min | Systemvid CPU/mem/disk historikk | | **atop** | Aktiv (systemd) | 10 sek | Per-prosess CPU/mem/disk logging med tilbakespoling | | **PCP (pmlogger)** | Aktiv (systemd) | Granulart | Metrikkarkiv, kan kobles til Grafana | ### Hurtigkommandoer ```bash # CPU-historikk (sar) sar -u -s HH:MM:00 # Spol tilbake — se hvilken prosess som brukte CPU (atop) atop -r /var/log/atop/atop_$(date +%Y%m%d) -b HH:MM # PCP metrikkquery pmval -a /var/log/pcp/pmlogger/$(hostname)/ kernel.all.cpu.user -t 10sec ``` ### Konfig - Atop logfiler: `/var/log/atop/atop_YYYYMMDD`, intervall 10s (`/etc/default/atop` LOGINTERVAL=10) - PCP arkiv: `/var/log/pcp/pmlogger/$(hostname)/`, pmcd + pmlogger aktive, pcp-zeroconf installert - sar: default 10 min — for grovt for korte spikes, bruk atop --- ## App-Domain Referanser For SuiteCRM applikasjonsutvikling (arkitektur, extensions, MCP, translations, gotchas): - **Workspace:** `/var/www/suitecrm-dev/` - **Expert:** `coordination/experts/suitecrm/CURRENT-architecture.md` - **Customizations:** `coordination/experts/suitecrm/CURRENT-customizations.md` - **Agent:** `/suitecrm` (suitecrm-specialist) ---
Snapshots (per 2026-03-13) operations/magitek-server-ops/kontoret/services knowledge low CURRENT-suitecrm.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-suitecrm.md
Source date: 2026-03-15
Keywords: ["snapshots","per","20260313"]
Cross-domain: []
Symptoms: []
Body:
## Snapshots (per 2026-03-13) | Navn | Tidspunkt | Beskrivelse | |------|-----------|-------------| | Pre_upgrade | 18:41 | For initial kartlegging | | pre-upgrade-20260313 | 19:12 | For oppgradering fra 8.9.0 | | post-upgrade-892-20260313 | 19:17 | Etter oppgradering til 8.9.2 | --- ## Apache VHost | Egenskap | Verdi | |----------|-------| | **Config** | /etc/apache2/sites-enabled/suitecrm.conf | | **ServerName** | crm.dittdomene.no (PLACEHOLDER) | | **DocumentRoot** | /var/www/suitecrm/public | | **Options** | AllowOverride All, FollowSymLinks | --- ## Sikkerhet - **Firewall:** UFW inaktiv inne i VM — Proxmox firewall=1 pa net0 gir beskyttelse - **IP-tildeling:** DHCP med statisk reservasjon pa pfSense kontoret (MAC BC:24:11:EA:6C:8C) - **DNS-server:** 172.20.0.6 (Pi-hole kontoret) - **Gateway:** 172.20.0.1 (pfSense kontoret) --- ## Brukere | Kontekst | Bruker | Rolle | |----------|--------|-------| | System (OS) | heine (uid 1000) | Hovedbruker | | MySQL | admin / Ansjos123 | DB admin (localhost only) | | SuiteCRM | kinga | CRM Admin (is_admin=1) | --- ## Vanlige Operasjoner ### Restart Apache ```bash ssh suitecrm "echo 'Ansjos123' | sudo -S systemctl restart apache2" ``` ### Sjekk SuiteCRM-versjon ```bash ssh suitecrm "cat /var/www/suitecrm/suitecrm/core/app/Resources/legacy/.env | grep SUITE" ``` ### Sjekk cron-logg ```bash ssh suitecrm "tail -50 /var/log/suitecrm-cron.log" ``` ### Sjekk MySQL-status ```bash ssh suitecrm "echo 'Ansjos123' | sudo -S systemctl status mysql" ``` ### Sjekk diskbruk ```bash ssh suitecrm "df -h / && du -sh /var/www/suitecrm" ``` --- ## Kjente Gotchas (Infrastruktur) ### SC-01: Apache ServerName er placeholder - **Symptom:** ServerName i suitecrm.conf er "crm.dittdomene.no" - **Losning:** Fungerer fordi NPM handterer domene-ruting, men bor oppdateres ### SC-02: DATABASE_URL tom i .env - **Symptom:** DATABASE_URL i .env er tom - **Arsak:** Normalt for SuiteCRM 8 — bruker legacy config.php dbconfig - **Losning:** Ikke et problem. Ikke fyll inn manuelt.
Reverse Proxy operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-suitecrm.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-suitecrm.md
Source date: 2026-03-15
Keywords: ["reverse","proxy"]
Cross-domain: []
Symptoms: []
Body:
## Reverse Proxy Trafikk flyter via to NPM-instanser avhengig av kilde: ### NPM Kontoret (172.20.0.42) — Proxy Host #11 | Egenskap | Verdi | |----------|-------| | **Domene** | suitecrm.magitek.no | | **Forward** | http://172.20.0.102:80 | | **SSL** | Custom SSL (cert npm-48) | | **Force SSL** | Ja | | **HSTS** | Ja | | **Access control** | Basic auth + IP whitelist (172.20.0.0/24, 62.97.227.206, 81.167.27.54, 193.212.224.198) | ### NPM Hjemme (192.168.86.16) — Proxy Host #206 | Egenskap | Verdi | |----------|-------| | **Domene** | suitecrm.magitek.no | | **Forward** | http://172.20.0.102:80 (via WireGuard, ~14ms) | | **SSL** | Let's Encrypt (cert #325, utloper 2026-06-11) | | **Opprettet** | 2026-03-13 | | **Block exploits** | Ja | | **Websocket** | Ja (upgrade tillatt) | --- ## DNS | Kilde | Oppslag | Resolves til | |-------|---------|-------------| | Pi-hole kontoret (172.20.0.6) | suitecrm.magitek.no | 172.20.0.42 (NPM kontoret, direkte LAN) | | Pi-hole hjemme (CT 101, px5) | suitecrm.magitek.no | 192.168.86.16 (NPM hjemme, lokal) | | Public DNS (Webhuset/Cloudflare) | suitecrm.magitek.no | 81.167.27.54 (wildcard *.magitek.no) | --- ## Trafikkflyt ``` Fra kontoret: Klient → Pi-hole → NPM kontoret (172.20.0.42) → 172.20.0.102:80 (~1ms) Fra hjemme: Klient → Pi-hole → NPM hjemme (192.168.86.16) → WireGuard → 172.20.0.102:80 (~14ms) Fra internett: Public DNS → 81.167.27.54 → pfSense hjemme → NPM hjemme → WireGuard → 172.20.0.102:80 ``` --- ## Cron | Jobb | Schedule | Bruker | Merknad | |------|----------|--------|---------| | SuiteCRM scheduler | `* * * * *` | www-data | `cd /var/www/suitecrm && php bin/console suitecrm:app:cron >> /var/log/suitecrm-cron.log 2>&1` | | PHP session cleanup | Hver 30. min | system | Standard PHP gc | --- ## Backup | Egenskap | Verdi | |----------|-------| | **Proxmox backup-jobb** | px1 daglig backup | | **Schedule** | Kl 02:00 | | **Storage** | extbackup | | **Mode** | Snapshot | | **Lagt til** | 2026-03-13 | | **Forste backup** | 2026-03-13, 9m37s, incremental, 32 GB disk, 15.98 GB sparse | | **Verifisert** | 2026-03-15 — VM 122 bekreftet i `/etc/pve/jobs.cfg` | ---
Identitet operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-suitecrm.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-suitecrm.md
Source date: 2026-03-15
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: SuiteCRM **Version:** 2.1 **Date:** 2026-03-15 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-suitecrm.md **NOTE:** App-domain content (architecture, development guide, translations, MCP tools, developer gotchas, customization registry) has been migrated to `/var/www/suitecrm-dev/` workspace. This file covers INFRASTRUCTURE ONLY. --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Hostname** | suitecrm | | **VM/CT ID** | VM 122 | | **Type** | KVM VM | | **Proxmox Host** | px1 (172.20.0.34, kontoret) | | **LAN IP** | 172.20.0.102 (DHCP static reservation, MAC BC:24:11:EA:6C:8C) | | **Lokasjon** | Kontoret (172.20.0.x) | | **OS** | Ubuntu 24.04.3 LTS (Noble Numbat), kernel 6.8.0-87-generic | | **CPU** | 20 cores, 1 socket, x86-64-v2-AES | | **RAM** | 8 GB (balloon min 1 GB), bruker ~1.3 GB (17%) | | **Swap** | 4 GB | | **Disk** | 80 GB on raid10 (raid10:vm-122-disk-0), LVM 78 GB, 18% brukt (13 GB av 77 GB) | | **Rolle** | SuiteCRM 8 CRM-system | | **Status** | Aktiv | --- ## Tilgang | Metode | Detaljer | |--------|----------| | SSH | `ssh suitecrm` eller `ssh heine@172.20.0.102` | | WebGUI | https://suitecrm.magitek.no | | Proxmox konsoll | px1 WebGUI → VM 122 | **Credentials:** - SSH: heine / Ansjos123 - sudo: krever passord (`echo 'Ansjos123' | sudo -S`) --- ## Stack | Komponent | Versjon | |-----------|---------| | SuiteCRM | 8.9.2 | | Apache | 2.4 | | PHP | 8.3.6 | | MySQL | 8.0.43 | **APP_ENV:** prod **DocumentRoot:** /var/www/suitecrm/public **App disk usage:** 1.4 GB --- ## Tjenester | Tjeneste | Port | Status | Merknad | |----------|------|--------|---------| | Apache | :80 | Aktiv | SuiteCRM DocumentRoot | | MySQL | :3306 | Aktiv | Kun localhost | | SSH | :22 | Aktiv | Nokkelautentisering | | QEMU agent | - | Aktiv | Proxmox gjesteverktoy | --- ## PHP-moduler Alle nodvendige installert: curl, gd, imap, intl, ldap, mbstring, mysqli, mysqlnd, pdo_mysql, soap, zip, PDO ---
v1.0 - 2026-03-04 operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["v10","20260304"]
Cross-domain: []
Symptoms: []
Body:
### v1.0 - 2026-03-04 - Opprettet CT 108 pa pmox15 (Ubuntu 24.04 LTS) - Pi-hole v6.4 + Unbound rekursiv DNS - 77 526 blokkerte domener (StevenBlack) - 9 lokale DNS-oppforinger for kontoret - Speiler hjemme-oppsettet (CT 132 pa px5)
Pi-hole v6: `restartdns` er ugyldig operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["pihole","restartdns","ugyldig"]
Cross-domain: []
Symptoms: []
Body:
### Pi-hole v6: `restartdns` er ugyldig Pi-hole v6 har ikke `restartdns`-kommandoen. Bruk `pihole reloaddns` i stedet. Agenter som bruker gamle v5-mønstre vil få feil. ### `pihole` binary ikke i PATH ved `pct exec` `pct exec <CTID> -- pihole ...` finner ikke binary. Bruk full sti: ```bash pct exec 108 -- /usr/local/bin/pihole reloaddns ``` ## Changelog ### v1.5 - 2026-03-19 - PERMANENT FIX: monitoring-k.magitek.no og monitoring.magitek.no lagt til i dns.hosts (pihole.toml) - Root cause: dnsmasq address= alene var intermittent pga FTL cache CNAME-poisoning (px10.magitek.no -> 192.168.86.16) - dns.hosts returnerer TTL=0 og overstyrerer aldri av cache — permanent losning - Oppdatert PIHOLE-K-01 gotcha med full rotarsak og regel for fremtidige split-horizon-domener - dnsmasq 99-monitoring.conf beholdt som backup-lag ### v1.4 - 2026-03-04 - 8.8.8.8 fjernet som sekundær DNS fra pfSense DHCP — kun Pi-hole (172.20.0.6) serveres nå - Forhindrer at Windows-klienter bruker offentlig DNS som gir feil IP via Cloudflare wildcard - Oppdatert "Neste steg"-seksjon for å reflektere dette ### v1.3 - 2026-03-04 - La til `laravel-v11` og `laravelserver-v11` som lokale DNS-oppforinger (172.20.0.94) - Oppdatert SSH config `20-kontoret-direct`: `Host laravel-v11 laravelserver-v11` (alias) - Dokumentert gotcha: SSH-hostnames vs DNS ved overgang fra pfSense til Pi-hole ### v1.2 - 2026-03-04 - Hjemme split DNS: 46 hjemme-domener (*.magitek.no, *.hsal.no, *.nativja.no, *.trubadurheine.no) peker til NPM hjemme (192.168.86.16) via WireGuard - Trafikk fra kontoret til hjemme-tjenester gar na over kryptert WG-tunnel (~15ms), ikke via internett - Statisk rute lagt til pa laravelserver-v11: 192.168.86.0/24 via 172.20.0.1 (persistent via netplan) ### v1.1 - 2026-03-04 - Split DNS implementert: 25+ kontoret-domener (*.magitek.no + *.nativja.no) peker til NPM LAN-IP (172.20.0.42) - pfSense DHCP DNS endret fra 8.8.8.8,1.1.1.1 til 172.20.0.6,8.8.8.8 - Alle kontoret-tjenester nå tilgjengelige via LAN uten hairpin NAT
Sjekk monitoring-k override operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["sjekk","monitoringk","override"]
Cross-domain: []
Symptoms: []
Body:
### Sjekk monitoring-k override `ssh root@172.20.0.33 "pct exec 108 -- bash -lc 'grep -n \"etc_dnsmasq_d\" /etc/pihole/pihole.toml; sed -n \"1,20p\" /etc/dnsmasq.d/99-monitoring.conf'"`` ## Neste steg (manuelt) ### ~~Pek pfSense DHCP til denne DNS-en~~ — FERDIG (2026-03-04) pfSense DHCP nå konfigurert med DNS Server 1 = 172.20.0.6. DNS Server 2 (8.8.8.8) er FJERNET. Kun Pi-hole (172.20.0.6) serveres som DNS til DHCP-klienter på kontoret. 8.8.8.8 ble fjernet fordi Windows-klienter brukte offentlig DNS som fallback og fikk feil IP via Cloudflare wildcard (81.167.27.54 i stedet for 172.20.0.42). ### Legg til flere adlists Kun StevenBlack er aktivert. Vurder a legge til: - OISD (oisd.nl) — bred dekning - Hagezi (github.com/hagezi) — multi-kategori ## Gotchas / Kjente fallgruver PIHOLE-K-01: monitoring-*.magitek.no MÅ bruke dns.hosts, IKKE bare dnsmasq address= - Symptom: `monitoring-k.magitek.no` gir `ERR_SSL_UNRECOGNIZED_NAME` intermittent fra kontoret. - Cause: `dnsmasq address=` alene er utilstrekkelig. Pi-hole FTL cacher CNAME-response fra Unbound (monitoring-k -> px10.magitek.no) og resolver CNAME-target via dns.hosts (px10.magitek.no -> 192.168.86.16 = NPM hjemme). Dette gir feil NPM-instans. Problemet er intermittent fordi `pihole reloaddns` flusher cachen midlertidig, men CNAME re-entrer cachen etter TTL-utlop. - Fix (permanent, applied 2026-03-19): Legg domenet i `dns.hosts` (pihole.toml) som returnerer TTL=0 og ALDRI caches. Behold dnsmasq address= som backup. Gjort for bade `monitoring-k.magitek.no` og `monitoring.magitek.no`. - Regel: ALLE nye split-horizon-domener som bruker Cloudflare CNAME ma legges i dns.hosts, IKKE bare dnsmasq. ### SSH-hostnames vs DNS Nar Pi-hole overtar som DNS fra pfSense, mister klienter oppslag for hostnames som pfSense resolvet via DHCP-leases eller host overrides. SSH config-aliaser (f.eks. `laravel-v11`) som IKKE har eksplisitt `HostName` med IP i SSH config, vil feile med "Could not resolve hostname". **Losning:** Alle SSH-hostnames som brukes i VSCode workspaces MÅ enten: 1. Ha eksplisitt `HostName <IP>` i SSH config (anbefalt), ELLER 2. Finnes som lokal DNS-oppforing i Pi-hole **Windows gotcha:** Etter DNS-endring ma `ipconfig /flushdns` kjores for a fjerne cachet negativt svar. Nextcloud SSH-config sync kan ha forsinkelse — rediger lokalt pa maskinen for umiddelbar effekt.
Domain Overrides (dns.hosts + dnsmasq backup) operations/magitek-server-ops/kontoret/services knowledge low CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["domain","overrides","dnshosts","dnsmasq","backup"]
Cross-domain: []
Symptoms: []
Body:
## Domain Overrides (dns.hosts + dnsmasq backup) | FQDN | Answer | Primary mechanism | Backup mechanism | Source refs | |------|--------|-------------------|------------------|-------------| | `monitoring-k.magitek.no` | `172.20.0.42` | `dns.hosts` in pihole.toml | `address=` in `/etc/dnsmasq.d/99-monitoring.conf:1` | bug-crusher-ops 2026-03-19 (permanent fix) | | `monitoring.magitek.no` | `172.20.0.42` | `dns.hosts` in pihole.toml | `address=` in `/etc/dnsmasq.d/99-monitoring.conf:2` | bug-crusher-ops 2026-03-19 (permanent fix) | Flow: kontoret klient -> Pi-hole kontoret -> `172.20.0.42` (NPM kontoret) -> `172.20.0.76:3000` (mon-kontoret Grafana) **KRITISK LEKSJON:** `dns.hosts` i pihole.toml har hogeste prioritet i Pi-hole v6 og returnerer TTL=0 (aldri cachet). `dnsmasq address=` direktiver alene er UTILSTREKKELIG for domener med Cloudflare CNAME fordi Pi-hole FTL sin cache folger CNAME-kjeden og lander pa `px10.magitek.no` -> `192.168.86.16` (fra annen dns.hosts-oppforing). Bruk ALLTID dns.hosts for split-horizon overrides. ## Unbound-konfigurasjon | Parameter | Verdi | |-----------|-------| | Config | /etc/unbound/unbound.conf.d/pi-hole.conf | | Interface | 127.0.0.1 (kun loopback) | | Port | 5335 | | IPv4 | Ja | | IPv6 | Nei | | Threads | 1 | | Prefetch | Ja | | EDNS buffer | 1232 | | harden-glue | Ja | | harden-dnssec-stripped | Ja | | Private ranges | Alle RFC1918 + link-local | ## Vanlige Operasjoner ### Sjekk status ```bash ssh root@172.20.0.33 "pct exec 108 -- bash -lc '/usr/local/bin/pihole status'" ``` ### Oppdater gravity (blokkerings-lister) ```bash ssh root@172.20.0.33 "pct exec 108 -- bash -lc '/usr/local/bin/pihole -g'" ``` ### Reload DNS (etter config-endring) ```bash ssh root@172.20.0.33 "pct exec 108 -- bash -lc '/usr/local/bin/pihole reloaddns'" ``` ### Se topp blokkerte domener ```bash ssh root@172.20.0.33 "pct exec 108 -- bash -lc '/usr/local/bin/pihole -t'" ``` ### Legg til lokal DNS-oppforing (v6) Rediger `/etc/pihole/pihole.toml` → `dns.hosts` array, deretter: ```bash ssh root@172.20.0.33 "pct exec 108 -- bash -c 'systemctl restart pihole-FTL'" ```
Pi-hole Versjon operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["pihole","versjon"]
Cross-domain: []
Symptoms: []
Body:
## Pi-hole Versjon | Komponent | Versjon | |-----------|---------| | Pi-hole Core | v6.4 | | Web Interface | v6.4.1 | | FTL | v6.5 | ## Blokkering | Parameter | Verdi | |-----------|-------| | **Blokkerte domener** | 77 526 | | **Adlists** | 1 (StevenBlack/hosts) | | **Blokkering aktiv** | Ja | | **DNSSEC** | Nei (i Pi-hole, men Unbound har harden-dnssec-stripped) | | **Query logging** | Ja | | **Listening mode** | LOCAL | ## Lokal DNS (pihole.toml hosts) Pi-hole v6 bruker `dns.hosts` i `/etc/pihole/pihole.toml` (IKKE custom.list som v5): | IP | Hostname(s) | |----|-------------| | 172.20.0.1 | pfsense.loc | | 172.20.0.6 | pihole.loc, pihole-kontoret.loc | | 172.20.0.32 | pmox10.loc | | 172.20.0.33 | pmox15.loc | | 172.20.0.34 | px1.loc | | 172.20.0.42 | npm.loc, npm-kontoret.loc | | 172.20.0.94 | reportmaker.loc, laravelserver.loc, laravel-v11, laravelserver-v11 | | 172.20.0.95 | ssh-server.loc | | 172.20.0.104 | docker1.loc | | **172.20.0.42** | **px1.magitek.no, pmox10.magitek.no, pmox15.magitek.no** | | **172.20.0.42** | **pfsense-kolsk.magitek.no, npm-kolsk.magitek.no** | | **172.20.0.42** | **zyxel1920.magitek.no, freshtomato.magitek.no** | | **172.20.0.42** | **mainwp.magitek.no, todo.magitek.no** | | **172.20.0.42** | **reportmaker.magitek.no, packages.magitek.no** | | **172.20.0.42** | **skymirror.magitek.no, hostclone.magitek.no** | | **172.20.0.42** | **suitecrm.magitek.no, duplicati-kolsk.magitek.no** | | **172.20.0.42** | **monitoring-k.magitek.no, monitoring.magitek.no** | | **172.20.0.42** | **px1.nativja.no, nativja.no, www.nativja.no** | | **172.20.0.42** | **nx.nativja.no, frappe.nativja.no, pfsense.nativja.no** | | **172.20.0.42** | **zyxel1920.nativja.no, freshtomato.nativja.no** | | **172.20.0.42** | **mainwp.nativja.no, todo.nativja.no, webserver1.nativja.no** | | **192.168.86.16** | **px5.magitek.no, px2.magitek.no, px3.magitek.no** | | **192.168.86.16** | **pbs1.magitek.no, pbsm.magitek.no, pfsense.magitek.no** | | **192.168.86.16** | **nc.magitek.no, nc-aio.magitek.no, nc-office.magitek.no** | | **192.168.86.16** | **nc.hsal.no, nc-aio.hsal.no** | | **192.168.86.16** | **nc.nativja.no, nc-aio.nativja.no, nc-office.nativja.no** | | **192.168.86.16** | **truenas.magitek.no, nas1.magitek.no** | | **192.168.86.16** | **bookstack.magitek.no, duplicati.magitek.no, postiz.magitek.no** | | **192.168.86.16** | **pihole.magitek.no, n8n.magitek.no, mautic.magitek.no** | | **192.168.86.16** | **bitwarden.magitek.no, homepage.magitek.no, homelab.magitek.no** | | **192.168.86.16** | **plex.magitek.no, jellyfin.magitek.no, linkwarden.magitek.no** | | **192.168.86.16** | **vpn.magitek.no** | | **192.168.86.16** | **idrac1.magitek.no, idrac2.magitek.no, idrac3.magitek.no** | | **192.168.86.16** | **bi.hsal.no, grocy.hsal.no, hd.hsal.no, learn.hsal.no** | | **192.168.86.16** | **observium.hsal.no, notat-kinga.hsal.no, kinga.magitek.no** | **Merk:** Hjemme-domener (192.168.86.16) rutes via WireGuard site-to-site tunnel, ikke internett. **Merk:** Kundesider (www.magitek.no, www.borilden.no, www.healthyhair.no, www.trubadurheine.no) er BEVISST ekskludert — de gar via internett sa utviklere ser realistisk kundeopplevelse.
Identitet operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-pihole-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md
Source date: 2026-03-19
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: pihole-kontoret (Pi-hole DNS) **Version:** 1.5 **Date:** 2026-03-19 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-pihole-kontoret.md **Sources:** MP-0011, Session b7663763-0ed5-48b2-95d5-3c8a45829459 (2026-03-19) **Verification note:** 2026-03-19 update is documented from session handoff plus MP-0011; direct SSH re-check was blocked in the training sandbox. --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Hostname** | pihole-kontoret | | **Type** | LXC Container (CT 108) pa pmox15 | | **LAN IP** | 172.20.0.6 | | **Gateway** | 172.20.0.1 (pfSense kontoret) | | **Lokasjon** | Kontoret (172.20.0.x) | | **OS** | Ubuntu 24.04 LTS (Noble) | | **Rolle** | DNS-server med annonse/tracker-blokkering + lokal DNS | | **Status** | Aktiv | | **Onboot** | Ja | | **Web UI** | http://172.20.0.6/admin | ## Tilgang | Metode | Detaljer | |--------|----------| | SSH (via pmox15) | `ssh root@172.20.0.33 "pct exec 108 -- bash"` | | SSH (direkte) | `ssh root@172.20.0.6` (passord: Ansjos123) | | Web UI | http://172.20.0.6/admin (passord: Ansjos123) | | CLI | `ssh root@172.20.0.33 "pct exec 108 -- bash -lc '/usr/local/bin/pihole <cmd>'"` | ## Ressurser | Ressurs | Tildelt | |---------|---------| | **CPU** | 1 core | | **RAM** | 512 MB | | **Swap** | 256 MB | | **Disk** | 4 GB (local-lvm) | | **Arch** | amd64, unprivileged, nesting=1 | ## Tjenester | Tjeneste | Port | Status | Rolle | |----------|------|--------|-------| | **pihole-FTL** | 53 (UDP/TCP) | Running | DNS-server + blokkering | | **Unbound** | 5335 (loopback) | Running | Rekursiv DNS-resolver | | **Web UI** | 80 + 443 | Running | Pi-hole admin panel | ### DNS-arkitektur ``` Klienter (172.20.0.x) | v port 53 Pi-hole FTL (172.20.0.6) | blokkerer annonser/trackere | svarer pa lokale DNS-oppforinger (pihole.toml hosts + dnsmasq includes) | v port 5335 (loopback) Unbound (rekursiv resolver) | spor rot-servere direkte v Root DNS servers ``` **Ingen ekstern DNS-forwarder** — Unbound gjor full rekursiv oppslag direkte mot rot-serverne.
SSH-04: VS Code Remote + OAuth callback-servere krever port-forwarding operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["ssh04","code","remote","oauth","callbackservere","krever","portforwarding"]
Cross-domain: []
Symptoms: []
Body:
### SSH-04: VS Code Remote + OAuth callback-servere krever port-forwarding - **Symptom:** Codex CLI (eller andre dev-verktøy med OAuth) åpner browser-redirect til `http://localhost:PORT/auth/callback` — men koblingen feiler med "connection refused" eller siden henger uten respons - **Årsak:** Verktøyet starter en lokal OAuth callback-server på serveren (f.eks. `127.0.0.1:1455`). Browseren kjører lokalt på din maskin — ikke på serveren — og kan ikke nå server-porten direkte - **Løsning:** 1. VS Code Ports-panel: Åpne "PORTS"-fanen → klikk "Forward a Port" → skriv inn portnummeret (f.eks. `1455`) → start OAuth-flyten på nytt 2. Eller manuelt fra terminal: `ssh -L 1455:127.0.0.1:1455 heine@172.20.0.94` - Porten MÅ være forwardet **FØR** du starter auth-flyten - **Gjelder:** Codex CLI (port 1455), GitHub CLI (port variabel), alle andre OAuth-baserte dev-verktøy - **Kilde:** Audit 0014, 2026-03-19 ### SSH-05: `getent hosts localhost` returnerer kun `::1` (IPv6) - **Symptom:** `getent hosts localhost` returnerer kun `::1` selv om `/etc/hosts` inneholder `127.0.0.1 localhost` - **Årsak:** systemd-resolved returnerer begge adresser via NSS, men `getent` prioriterer IPv6. `resolvectl query localhost` viser begge adresser korrekt - **Dette er ikke et DNS-problem** — det er normal IPv4/IPv6 dual-stack-oppførsel - **Verifiser:** `resolvectl query localhost` → skal vise både `127.0.0.1` og `::1` - **Kilde:** Audit 0014, 2026-03-19 --- ## Changelog ### v1.0 - 2026-02-28 - Initial version basert på brukerens Windows SSH config (HERMES) - Dokumentert begge jump hosts (VM 113 kontoret, ub-sshtunnel hjemme) - NAT-konfigurasjon, tilgangsmetoder, og klient-kontekster - Anbefaling for delt SSH config via Include-direktiv
Verification and Testing operations/magitek-server-ops/kontoret/services knowledge low CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["verification","and","testing"]
Cross-domain: []
Symptoms: []
Body:
### Verification and Testing Verify SSH config is correctly parsed: ```bash ssh -G TU-px5 | grep -E "^(hostname|proxyjump|user)" # Output: # user heine # proxyjump jump-hjemme # hostname 192.168.86.116 ``` List all available hosts: ```bash ssh -G * 2>/dev/null | grep -E "^host " | sort | uniq ``` Test a tunneled connection (dry-run): ```bash ssh -vvv TU-px5 exit # Verbose output shows ProxyJump chain ``` ### Edge Cases: Windows Forward Slashes On Windows (HERMES, ORION), SSH config Include paths must use **forward slashes** even though Windows paths use backslashes: Correct (Windows): ``` Include C:/Users/heine/Nextcloud/DevOps/ssh-config/00-defaults ``` Incorrect: ``` Include C:\Users\heine\Nextcloud\DevOps\ssh-config\00-defaults ``` This is due to SSH config parser expecting Unix-style paths. When using symlinks (mklink), SSH follows them correctly. --- ## Sikkerhet - Jump-serverne er **eneste ekstern SSH-inngang** til begge LAN - Alle andre servere er kun tilgjengelig via LAN eller via jump host - ForwardAgent er aktivert i mange SSH config-entries — vær bevisst på agent forwarding-risiko - Port 12322 er valgt (ikke standard 22) for å unngå støy fra script kiddies --- ## Kjente Gotchas ### SSH-01: px5.magitek.no:22 er IKKE åpen - **Symptom:** `ssh root@px5.magitek.no` → Connection timed out - **Årsak:** Kun port 12322 er NATet, ikke 22 - **Løsning:** Bruk `-J heine@81.167.27.54:12322` som jump, deretter SSH til px5 LAN IP (192.168.86.116) ### SSH-02: Host key verification failure på NPM - **Symptom:** `ssh heine@172.20.0.42` → Host key verification failed - **Årsak:** NPM-serverens host key ikke i known_hosts - **Løsning:** `ssh-keyscan 172.20.0.42 >> ~/.ssh/known_hosts` ### SSH-03: ForwardAgent risiko - **Symptom:** Mange hosts har `ForwardAgent yes` - **Årsak:** Bekvemmelighet for multi-hop SSH - **Risiko:** Kompromittert mellomserver kan misbruke forwarded keys - **Løsning:** Vurder å begrense ForwardAgent til kun jump hosts
Naming Conventions operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["naming","conventions"]
Cross-domain: []
Symptoms: []
Body:
### Naming Conventions **Host alias prefixes:** - `TU-{host}` — Tunneled version of a host (requires ProxyJump via jump server) - `LAN-{host}` — Direct LAN-only access (no tunnel needed) - No prefix — Used when context is clear (jump hosts, defaults) **Examples:** ```bash ssh laravelserver-v11 # Direct (on same LAN) ssh TU-px5 # Tunneled (via jump-hjemme if on kontoret, or vice versa) ssh jump-kontoret # Jump host itself ssh heine@TU-nextcloud # Explicit user on tunneled host ``` ### Content of Shared Config Files **00-defaults** (global SSH settings): ``` Host * AddKeysToAgent yes IdentitiesOnly yes StrictHostKeyChecking accept-new UserKnownHostsFile ~/.ssh/known_hosts ServerAliveInterval 300 ServerAliveCountMax 2 ControlMaster auto ControlPath ~/.ssh/control-%h-%p-%r ``` **10-jump-hosts** (jump host definitions): ``` Host jump-kontoret HostName 62.97.227.206 Port 12322 User heine ForwardAgent yes Host jump-hjemme HostName 81.167.27.54 Port 12322 User heine ForwardAgent yes ``` **20-kontoret-direct** (kontoret LAN, no tunnel needed): ``` Host laravelserver-v11 HostName 172.20.0.94 User heine Host npm-kontoret HostName 172.20.0.42 User heine Host docker1 HostName 172.20.0.104 User heine Host ssh-server HostName 172.20.0.95 User heine ``` **30-hjemme-direct** (hjemme LAN, no tunnel needed from hjemme location): ``` Host px5 HostName 192.168.86.116 User root Host px1 HostName 192.168.86.10 User root Host wp-01 HostName 192.168.86.166 User heine Host nextcloud HostName 192.168.86.233 User heine ``` **40-tunnels-local** (machine-specific, local only): For **laravelserver-v11** (on kontoret, tunnels to hjemme): ``` Host TU-px5 HostName 192.168.86.116 ProxyJump jump-hjemme User root Host TU-px1 HostName 192.168.86.10 ProxyJump jump-hjemme User root Host TU-nextcloud HostName 192.168.86.233 ProxyJump jump-hjemme User heine Host TU-wp-01 HostName 192.168.86.166 ProxyJump jump-hjemme User heine ``` For **HERMES** (on hjemme, tunnels to kontoret): ``` Host TU-laravelserver-v11 HostName 172.20.0.94 ProxyJump jump-kontoret User heine Host TU-npm-kontoret HostName 172.20.0.42 ProxyJump jump-kontoret User heine Host TU-docker1 HostName 172.20.0.104 ProxyJump jump-kontoret User heine ``` For **ORION** (on kontoret, tunnels to hjemme): Same as laravelserver-v11.
Linux Sync: laravelserver-v11 operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["linux","sync","laravelserverv11"]
Cross-domain: []
Symptoms: []
Body:
### Linux Sync: laravelserver-v11 The Linux server uses a cron job to sync shared files from Nextcloud WebDAV every 15 minutes. **Sync script location:** `~/.ssh/sync-ssh-config.sh` ```bash #!/bin/bash # Sync SSH config files from Nextcloud WebDAV NEXTCLOUD_URL="https://nc.magitek.no/remote.php/dav/files/admin/DevOps/ssh-config" CREDS="admin:Ansjos123456" CONFIG_D="$HOME/.ssh/config.d" mkdir -p "$CONFIG_D" # Sync only shared files (00, 10, 20, 30) for file in 00-defaults 10-jump-hosts 20-kontoret-direct 30-hjemme-direct; do curl -s -u "$CREDS" "$NEXTCLOUD_URL/$file" -o "$CONFIG_D/$file" done chmod 600 "$CONFIG_D"/* ``` **Cron entry:** ``` */15 * * * * ~/.ssh/sync-ssh-config.sh ``` Verify sync status: ```bash ls -la ~/.ssh/config.d/ # Check modification times — should be recent if cron is running ``` ### Windows Sync: HERMES and ORION Both Windows machines use the **Nextcloud desktop client** installed and running with sync enabled. **Setup (run once as Administrator):** ```powershell # 1. Ensure Nextcloud client is installed and `DevOps/ssh-config/` is synced locally $nc = "C:\Users\heine\Nextcloud\DevOps\ssh-config" if (-not (Test-Path $nc)) { Write-Error "Nextcloud sync folder not found at $nc" exit 1 } # 2. Create config.d folder mkdir -Force C:\Users\heine\.ssh\config.d | Out-Null # 3. Create main config file with Include directive @" Include config.d/* "@ | Set-Content C:\Users\heine\.ssh\config -Encoding UTF8 # 4. Create symlinks to Nextcloud-synced files (requires mklink or junction) cmd /c mklink "C:\Users\heine\.ssh\config.d\00-defaults" "$nc\00-defaults" cmd /c mklink "C:\Users\heine\.ssh\config.d\10-jump-hosts" "$nc\10-jump-hosts" cmd /c mklink "C:\Users\heine\.ssh\config.d\20-kontoret-direct" "$nc\20-kontoret-direct" cmd /c mklink "C:\Users\heine\.ssh\config.d\30-hjemme-direct" "$nc\30-hjemme-direct" # 5. Copy appropriate machine-specific tunnel file # For HERMES (tunnels to kontoret): copy "$nc\40-tunnels-local.HERMES" "C:\Users\heine\.ssh\config.d\40-tunnels-local" # For ORION (tunnels to hjemme): # copy "$nc\40-tunnels-local.ORION" "C:\Users\heine\.ssh\config.d\40-tunnels-local" # 6. Verify setup ssh -G TU-px5 ``` **Auto-sync:** Nextcloud client continuously monitors `DevOps/ssh-config/` and downloads changes within seconds.
Centralized SSH Config (Nextcloud-synced) operations/magitek-server-ops/kontoret/services knowledge low CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["centralized","ssh","config","nextcloudsynced"]
Cross-domain: []
Symptoms: []
Body:
## Centralized SSH Config (Nextcloud-synced) ### Architecture Shared SSH configuration files are centrally stored in Nextcloud at `DevOps/ssh-config/` and synced to client machines: **Shared files (alle maskiner):** - `00-defaults` — Global SSH settings (StrictHostKeyChecking, AddKeysToAgent, etc.) - `10-jump-hosts` — Jump host definitions for kontoret and hjemme - `20-kontoret-direct` — Kontoret LAN hosts (172.20.0.x subnet) - `30-hjemme-direct` — Hjemme LAN hosts (192.168.86.x subnet) **Local files (machine-specific, NOT synced):** - `40-tunnels-local` — ProxyJump tunnel definitions unique to each machine's location and role This architecture enables: - Single source of truth for global SSH settings and stable host configurations - Consistent host naming across all machines - Machine-specific tunnel routing without editing shared files - Easy onboarding of new machines by just creating their `40-tunnels-local` ### File Structure Per-machine `~/.ssh/` layout: ``` ~/.ssh/ ├── config # Single line: Include config.d/* ├── config.d/ │ ├── 00-defaults # (synced from Nextcloud) │ ├── 10-jump-hosts # (synced from Nextcloud) │ ├── 20-kontoret-direct # (synced from Nextcloud) │ ├── 30-hjemme-direct # (synced from Nextcloud) │ └── 40-tunnels-local # (NOT synced) Machine-specific tunnels └── SSH-CONFIG-README.md # Quick reference (optional) ``` The `config` file contains a single Include directive: ``` Include config.d/* ``` SSH reads all files in `config.d/` in alphabetical order, allowing modular organization and preventing conflicts. ### Sync Methods by Machine | Machine | Platform | Location | Sync Method | 40-tunnels Target | |---------|----------|----------|-------------|-------------------| | **HERMES** (laptop) | Windows | Hjemme | Nextcloud desktop client (auto-sync) | Tunnels to kontoret | | **laravelserver-v11** (server) | Linux | Kontoret | WebDAV cron job (every 15 min) | Tunnels to hjemme | | **ORION** (workstation) | Windows | Kontoret | Nextcloud desktop client (auto-sync) | Tunnels to hjemme | **Nextcloud WebDAV endpoint:** - URL: `https://nc.magitek.no/remote.php/dav/files/admin/DevOps/ssh-config/` - Credentials: `admin:Ansjos123456`
NAT-konfigurasjon (pfsense hjemme) operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["natkonfigurasjon","pfsense","hjemme"]
Cross-domain: []
Symptoms: []
Body:
### NAT-konfigurasjon (pfsense hjemme) ``` Public: 81.167.27.54:12322 ↓ pfsense NAT LAN: 192.168.86.192:22 (ub-sshtunnel) ``` ### Tilgang | Metode | Detaljer | |--------|----------| | SSH (fra hjemme LAN) | `ssh heine@192.168.86.192` | | SSH (fra kontoret/eksternt) | `ssh -p 12322 heine@81.167.27.54` | | SSH (via Windows alias, HERMES) | `ssh Opprette_ssh-tunnel` (med LocalForward) | | Via Proxmox | Trenger VM/CT ID (TODO) | ### Bruk som jump host ```bash # Fra server på kontoret (laravelserver-v11) → hjemme ssh -J heine@81.167.27.54:12322 root@192.168.86.116 # → px5 ssh -J heine@81.167.27.54:12322 root@192.168.86.166 # → wp-01 ssh -J heine@81.167.27.54:12322 heine@192.168.86.233 # → nextcloud # I Windows SSH config (ProxyJump-syntaks, fra ORION) Host TU-Nextcloud HostName 192.168.86.233 ProxyJump heine@81.167.27.54:12322 User heine ``` --- ## Klient-kontekster og SSH Config ### Tre klienter — tre forskjellige configs | Klient | Plattform | SSH Config-sti | Tunnel-retning | |--------|-----------|----------------|----------------| | **laravelserver-v11** | Linux | `/home/heine/.ssh/config` (TODO: opprett) | → hjemme via 81.167.27.54:12322 | | **HERMES** (laptop) | Windows | `C:\Users\heine\.ssh\config` | → kontoret via 62.97.227.206:12322 | | **ORION** (arbeidsstasjon) | Windows | `C:\Users\heine\.ssh\config` | → hjemme via 81.167.27.54:12322 | ### Navnekonvensjon i SSH config - **TU-** prefix = Tunnelert host (krever ProxyJump) - **LAN-** prefix = Direkte LAN-tilgang (ingen tunnel) - **(heine)/(root)** suffix = Bruker ### Delt SSH Config — IMPLEMENTERT (2026-02-28) Modulær SSH config med delte filer via Nextcloud og maskin-spesifikke tunnel-filer. **Struktur på alle maskiner:** ``` ~/.ssh/ ├── config ← "Include config.d/*" (én linje) ├── config.d/ │ ├── 00-defaults ← Symlink → Nextcloud (DELT) │ ├── 10-jump-hosts ← Symlink → Nextcloud (DELT) │ ├── 20-kontoret-direct ← Symlink → Nextcloud (DELT) │ ├── 30-hjemme-direct ← Symlink → Nextcloud (DELT) │ └── 40-tunnels-local ← Lokal fil (MASKIN-SPESIFIKK!) ├── templates/ ← Referanse-filer (ikke i config.d!) │ ├── 40-tunnels-local.HERMES │ └── 40-tunnels-local.ORION └── SSH-CONFIG-README.md ← Dokumentasjon ``` **VIKTIG:** Kun aktive config-filer i `config.d/` — SSH parser ALT der via `Include`. **Navnekonvensjon:** - `TU-{host}` = Tunnelert versjon av `{host}` (via ProxyJump) - `jump-kontoret` = Jump host for kontoret (62.97.227.206:12322) - `jump-hjemme` = Jump host for hjemme (81.167.27.54:12322) **Synk-regler:** - `00-defaults`, `10-jump-hosts`, `20-kontoret-direct`, `30-hjemme-direct` → **Nextcloud-synk** - `40-tunnels-local` → **ALDRI synkes** (ulik per maskin) - `.HERMES` og `.ORION` filene er referanser — kopier riktig en til `40-tunnels-local` **Bruk:** ```bash # Direkte (kontoret LAN, ingen tunnel) ssh laravelserver-v11 # → heine@172.20.0.94 # Via tunnel (hjemme fra kontoret) ssh TU-px5 # → root@192.168.86.116 via jump-hjemme ssh TU-nextcloud # → heine@192.168.86.233 via jump-hjemme # Verifiser config parsing ssh -G TU-px5 | grep proxyjump # → proxyjump jump-hjemme ``` **Nextcloud-synk:** - **Server:** nc.magitek.no (192.168.86.233) - **Synk-mappe på Nextcloud:** `/DevOps/ssh-config/` - **Lokal synk-sti (Windows):** `C:\Users\heine\Nextcloud\DevOps\ssh-config\` - **Desktop-klient:** Installert på HERMES + ORION, synker automatisk **Oppsett på Windows (HERMES/ORION) — kjøres én gang som Administrator:** ```powershell # 1. Opprett mapper mkdir C:\Users\heine\.ssh\config.d # 2. Hovedfil Set-Content C:\Users\heine\.ssh\config -Value "Include config.d/*" # 3. Symlinker til Nextcloud-synkede filer $nc = "C:\Users\heine\Nextcloud\DevOps\ssh-config" cmd /c mklink "C:\Users\heine\.ssh\config.d\00-defaults" "$nc\00-defaults" cmd /c mklink "C:\Users\heine\.ssh\config.d\10-jump-hosts" "$nc\10-jump-hosts" cmd /c mklink "C:\Users\heine\.ssh\config.d\20-kontoret-direct" "$nc\20-kontoret-direct" cmd /c mklink "C:\Users\heine\.ssh\config.d\30-hjemme-direct" "$nc\30-hjemme-direct" # 4. Maskin-spesifikk tunnel-fil (HERMES eller ORION) copy "$nc\40-tunnels-local.HERMES" "C:\Users\heine\.ssh\config.d\40-tunnels-local" # ORION: copy "$nc\40-tunnels-local.ORION" "C:\Users\heine\.ssh\config.d\40-tunnels-local" # 5. Verifiser ssh -G TU-px5 ``` **Referanseimplementering:** `/home/heine/.ssh/config.d/` på laravelserver-v11 (fullt operativ, verifisert). Serveren har ingen Nextcloud-klient — filer ligger direkte (ikke symlinket). ---
Oversikt operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-ssh-server.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-ssh-server.md
Source date: 2026-03-19
Keywords: ["oversikt"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: SSH Jump Servers **Version:** 1.0 **Date:** 2026-02-28 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/CURRENT-ssh-server.md --- ## Oversikt Magitek-infrastrukturen bruker **to SSH jump hosts** — én per lokasjon — for å muliggjøre cross-site tilgang. Begge eksponeres via pfsense NAT på port 12322. --- ## Jump Host: Kontoret (VM 113) | Egenskap | Verdi | |----------|-------| | **Hostname** | ssh-server | | **VM/CT ID** | 113 | | **Type** | VM (Ubuntu) | | **Proxmox Host** | px1 | | **LAN IP** | 172.20.0.95 | | **Lokasjon** | Kontoret (Kolskogheiane 12) | | **OS** | Ubuntu (TODO: bekreft versjon) | | **Rolle** | SSH jump host — gir ekstern tilgang til kontorets LAN | | **Status** | Aktiv | ### NAT-konfigurasjon (pfsense kontoret) ``` Public: 62.97.227.206:12322 ↓ pfsense NAT LAN: 172.20.0.95:22 (VM 113, ssh-server) ``` ### Tilgang | Metode | Detaljer | |--------|----------| | SSH (fra kontoret LAN) | `ssh heine@172.20.0.95` | | SSH (fra hjemme/eksternt) | `ssh -p 12322 heine@62.97.227.206` | | SSH (via Windows alias, HERMES) | `ssh ssh_server_nativja.no` eller `ssh SSH_server_magitek` | | Via Proxmox | `pct exec 113 -- kommando` (hvis LXC) eller `qm guest exec 113 -- kommando` (hvis VM) | ### Bruk som jump host ```bash # Fra laptop hjemme (HERMES) → kontoret ssh -J heine@62.97.227.206:12322 heine@172.20.0.94 # → reportmaker ssh -J heine@62.97.227.206:12322 heine@172.20.0.42 # → NPM ssh -J heine@62.97.227.206:12322 heine@172.20.0.104 # → docker1 # I Windows SSH config (ProxyJump-syntaks) Host TU-Laravelserver-v-11(heine) HostName 172.20.0.94 ProxyJump heine@62.97.227.206:12322 User heine ``` --- ## Jump Host: Hjemme (ub-sshtunnel) | Egenskap | Verdi | |----------|-------| | **Hostname** | ub-sshtunnel | | **VM/CT ID** | TODO: bekreft | | **Type** | VM/CT (Ubuntu) | | **Proxmox Host** | px5 | | **LAN IP** | 192.168.86.192 | | **Lokasjon** | Hjemme (Skeisstøa 37c) | | **OS** | Ubuntu (TODO: bekreft versjon) | | **Rolle** | SSH jump host — gir ekstern tilgang til hjemme-LANet | | **Status** | Aktiv |
v1.2 - 2026-03-01 operations/magitek-server-ops/kontoret/services knowledge info CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["v12","20260301"]
Cross-domain: []
Symptoms: []
Body:
### v1.2 - 2026-03-01 - Proxy host ID 17: zyxel1920.nativja.no (stunnel → ZyXEL XS1920) - Forward scheme: https, port 8443, advanced config: `proxy_ssl_verify off;` - SSL certificate ID 18: zyxel1920.nativja.no (utløper 2026-05-30) - Access list 5 "LAN_Kontor_hjemme_Scandic" nå med 4 proxy hosts - Dokumentert access lists-tabell - Stunnel proxy (CT 133, 172.20.0.5:8443) som backend for ZyXEL switch ### v1.1 - 2026-02-28 (Update 2) - Lagt til WebGUI og SSH credentials (nå i CURRENT-credentials.md) - Gotcha NPM-K-02: Dokumentert agent-endret passord - Gotcha NPM-K-03: Packeton packages.json autentisering-krav - Gotcha NPM-K-04: NPM API token-format og levetid - Packeton: Added deploy key for GitHub, DNS info, auth requirements - Klargjort at brukeren må verifisere hvilken passord som fungerer ### v1.0 - 2026-02-28 - Initial versjon — kartlegging under TASK-009 (packages.magitek.no oppsett) - Hostname: nginxpm-ub2404, IP: 172.20.0.42, Ubuntu 24.04 - Docker compose i /home/heine/, SQLite DB (ikke MariaDB) - Packeton-container pa port 8088 - NPM API-passord tilbakestilt og dokumentert - packages.magitek.no proxy host (ID 16) + SSL-sertifikat (ID 17) opprettet - Gotchas NPM-K-01 til NPM-K-04 dokumentert
v1.7 - 2026-03-04 operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["v17","20260304"]
Cross-domain: []
Symptoms: []
Body:
### v1.7 - 2026-03-04 - 10.0.0.0/24 (WireGuard road warrior subnet) lagt til alle 25 proxy host nginx-configs - WG road warrior-klienter (HERMES 10.0.0.2) fikk 401/basic auth uten denne endringen - Oppdatert NPM-K-09 og access list-tabell ### v1.6 - 2026-03-04 - Dokumentert gotcha NPM-K-08: zyxel1920.magitek.no krever `proxy_ssl_verify off` (stunnel selvsignert) og `proxy_set_header Cookie ""` (gammel ZyXEL-firmware) - Dokumentert gotcha NPM-K-09: 192.168.86.0/24 lagt til alle 25 proxy host nginx-configs for WireGuard-tilgang fra hjemme. ADVARSEL: direkte nginx-endringer overskives hvis proxy host redigeres i NPM GUI. Permanent fix: oppdater Access List ID 5 i NPM GUI. ### v1.5 - 2026-03-04 - **Wildcard SSL `*.magitek.no` via DNS-01 challenge** (Cloudflare API) — cert ID 48 - Alle 16 *.magitek.no proxy hosts byttet fra individuelle HTTP-01 cert til wildcard - 16 Cloudflare CNAME-records slettet — interne tjenester ikke lenger offentlig eksponert - DNS for interne domener nå KUN via Pi-hole (172.20.0.6 kontoret / 192.168.86.2 hjemme) - certbot-dns-cloudflare installert i NPM container, credentials i /data/cloudflare.ini - Auto-renewal cron (mandager kl 03:00): `tools/ssl-renewal/renew-magitek-wildcard.sh` - MERK: certbot-dns-cloudflare forsvinner ved container-restart — renewal-script reinstallerer ### v1.4 - 2026-03-04 - 11 nye SSL-sertifikater (cert 36-46) for alle proxy hosts som manglet SSL - Ny proxy host: pihole-kolsk.magitek.no (ID 30, cert 47) for Pi-hole kontoret admin - Alle 27 proxy hosts har nå gyldig Let's Encrypt SSL med ssl_forced=true - SSL fikset via certificate_id="new" metoden (NPM proxy host PUT) ### v1.3 - 2026-03-04 - 9 nye proxy hosts for *.magitek.no migrering fra *.nativja.no (ID 21-29) - Proxmox-servere: px1, pmox10, pmox15 (alle med websocket support) - Infrastruktur: pfsense-kolsk, npm-kolsk, zyxel1920, freshtomato, mainwp, todo - SSL-sertifikater: VENTER på Cloudflare NS-propagasjon - Navnekonvensjon: -kolsk = kontoret, -skeis = hjemme
Sjekk NPM-logg operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["sjekk","npmlogg"]
Cross-domain: []
Symptoms: []
Body:
### Sjekk NPM-logg ```bash ssh heine@172.20.0.42 "docker logs heine-app-1 --tail 50" ``` ### Restart NPM ```bash ssh heine@172.20.0.42 "cd /home/heine && docker compose restart app" ``` ## Access Lists (for NPM proxy host access control) | ID | Navn | Klienter | Proxy hosts | |----|------|----------|-------------| | 1 | IP adresser | ? | 7 | | 3 | password | ? | 0 | | 5 | LAN_Kontor_hjemme_Scandic | 172.20.0.0/24, 192.168.86.0/24*, 10.0.0.0/24*, 62.97.227.206, 81.167.27.54, 193.212.224.198 | 4 (inkl. zyxel1920) | > \* 192.168.86.0/24 og 10.0.0.0/24 er kun i nginx-configs (direkte endring), IKKE i NPM GUI ennå. **ID 6 "Local LAN Only"** ble opprettet og umiddelbart slettet — ikke nødvendig. ## Changelog ### v2.2 - 2026-03-19 - Monitoring proxy hosts dokumentert: ID 36 (monitoring-k.magitek.no → 172.20.0.76:3000, cert=57) og ID 37 (monitoring.magitek.no → 192.168.86.162:3000, cert=56) - Dedikerte LE-certs (56, 57) for monitoring — wildcard cert 48 utlopt, monitoring bruker individuelle HTTP-01 certs - Sources: MP-0011, Session b6bb8896 (2026-03-18) ### v2.1 - 2026-03-18 - NPM proxy host ID 35 opprettet for syncrovanis.magitek.no → http://172.20.0.94:80, cert=48, ssl_forced=1, ACL=5 - Gammel soft-deleted proxy host 33/34 fjernet fra DB (blokkerte ny opprettelse) - Pi-hole begge lokasjonene oppdatert: syncrovanis.magitek.no → 172.20.0.42 (NPM) - Gotcha NPM-K-10 oppdatert: syncrovanis bruker nå NPM proxy med wildcard cert ### v2.0 - 2026-03-18 - Gotcha NPM-K-10: syncrovanis.magitek.no trenger IKKE NPM — kun Pi-hole DNS (utdatert, se v2.1) ### v1.9 - 2026-03-13 - Docker MCP-seksjon lagt til — `mcp-docker-server` med SSH socket-forwarding - Ny systemd user service `docker-npm-tunnel.service` for persistent tunnel - GOTCHA: mcp-docker-server støtter kun lokal socket, ikke ssh:// DOCKER_HOST ### v1.8 - 2026-03-05 - Packeton: ny pakke `magitek/kb-system` v1.0.0 registrert - Ny deploy key `github-kb` (ed25519) for `heinesalbu/kb-system` (privat GitHub-repo) - Pakken installert i ReportMaker (artisan kb:*) og magitek-ops (vendor/bin/kb) - Oppdatert Packeton-seksjon med registrerte pakker-tabell og deploy keys-tabell
NPM-K-13: HSTS tvinger HTTPS for ALLE *.magitek.no-domener operations/magitek-server-ops/kontoret/services knowledge low CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["npmk13","hsts","tvinger","https","for","alle","magiteknodomener"]
Cross-domain: []
Symptoms: []
Body:
### NPM-K-13: HSTS tvinger HTTPS for ALLE *.magitek.no-domener - **Symptom:** Intern tjeneste på kun HTTP fungerer i curl men ikke i nettleser - **Rotårsak:** NPM sender `Strict-Transport-Security: max-age=63072000; preload` for alle proxy hosts. Nettlesere cacher dette og tvinger HTTPS for hele *.magitek.no-domenet. - **Leksjon:** ALLE interne tjenester under *.magitek.no MÅ gå gjennom NPM med wildcard cert, selv om de kun er tilgjengelige internt. HTTP-only funker ikke i nettlesere etter besøk av andre *.magitek.no-sider. ## Vanlige Operasjoner ### SSH til NPM kontoret ```bash ssh heine@172.20.0.42 ``` ### Hent NPM API-token ```bash # Hent credentials fra CURRENT-credentials.md → NPM Kontoret, deretter: cat > /tmp/login.json << 'EOF' {"identity":"<email>","secret":"<passord>"} EOF ssh heine@172.20.0.42 "curl -s http://localhost:81/api/tokens -X POST -H 'Content-Type: application/json' -d @/tmp/login.json" ``` ### List proxy hosts ```bash TOKEN="..." ssh heine@172.20.0.42 "curl -s http://localhost:81/api/nginx/proxy-hosts -H 'Authorization: Bearer $TOKEN' | python3 -m json.tool" ``` ### List SSL-sertifikater ```bash TOKEN="..." ssh heine@172.20.0.42 "curl -s http://localhost:81/api/nginx/certificates -H 'Authorization: Bearer $TOKEN' | python3 -m json.tool" ``` ### Opprett proxy host (HTTP) ```bash cat > /tmp/create_proxy.json << 'EOF' { "domain_names": ["nytt-domene.magitek.no"], "forward_scheme": "http", "forward_host": "172.20.0.XX", "forward_port": 80, "block_exploits": false, "allow_websocket_upgrade": false, "access_list_id": 0, "certificate_id": 0, "ssl_forced": false, "http2_support": false, "meta": {"letsencrypt_agree": false}, "advanced_config": "", "locations": [] } EOF TOKEN="..." ssh heine@172.20.0.42 "curl -s http://localhost:81/api/nginx/proxy-hosts -X POST -H 'Content-Type: application/json' -H 'Authorization: Bearer $TOKEN' -d @/tmp/create_proxy.json" ``` ### Aktiver SSL pa eksisterende proxy host ```bash # Erstatt PROXY_ID med faktisk ID cat > /tmp/update_ssl.json << 'EOF' { "domain_names": ["domene.magitek.no"], "forward_scheme": "http", "forward_host": "172.20.0.XX", "forward_port": 80, "block_exploits": false, "allow_websocket_upgrade": false, "access_list_id": 0, "certificate_id": "new", "ssl_forced": true, "http2_support": true, "meta": { "letsencrypt_agree": true, "dns_challenge": false, "letsencrypt_email": "heine@magitek.no" }, "advanced_config": "", "locations": [] } EOF TOKEN="..." ssh heine@172.20.0.42 "curl -s http://localhost:81/api/nginx/proxy-hosts/PROXY_ID -X PUT -H 'Content-Type: application/json' -H 'Authorization: Bearer $TOKEN' -d @/tmp/update_ssl.json" ```
NPM-K-11: Soft-deleted proxy hosts blokkerer nye domener — API kan IKKE slette dem operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["npmk11","softdeleted","proxy","hosts","blokkerer","nye","domener","api","kan","ikke"]
Cross-domain: []
Symptoms: []
Body:
### NPM-K-11: Soft-deleted proxy hosts blokkerer nye domener — API kan IKKE slette dem - **Symptom:** NPM API returnerer `{"error":{"code":400,"message":"domain.no is already in use"}}` ved opprettelse av ny proxy host - **Rotårsak:** Rader med `is_deleted=1` i `proxy_host`-tabellen blokkerer fortsatt domeneregistrering. API returnerer 404 ved forsøk på å slette dem (`DELETE /api/nginx/proxy-hosts/<id>`) - **Løsning:** Slett radene direkte fra SQLite DB, deretter reload nginx: ```bash docker cp heine-app-1:/data/database.sqlite /tmp/npm-db.sqlite # Sjekk: python3 -c "import sqlite3; ..." # Slett via python-script i containeren docker exec heine-app-1 nginx -s reload ``` ### NPM-K-12: Container restart laster IKKE ny nginx-konfig for nye proxy hosts - **Symptom:** Ny proxy host opprettet via API, men `curl -sk https://...` gir TLS `unrecognized name` feil - **Rotårsak:** `docker compose restart app` restarter prosessen, men NPM regenererer ikke alltid nginx-config ved restart - **Løsning:** Kjør `docker exec heine-app-1 nginx -s reload` ETTER proxy host-opprettelse - **Sjekk:** `docker exec heine-app-1 ls /data/nginx/proxy_host/` — configen skal eksistere med riktig ID ### NPM-K-14: monitoring-k.magitek.no proxy peker til CT 137 DHCP-adresse (.76) - **Konfigurasjon:** Proxy host ID 36 `monitoring-k.magitek.no → http://172.20.0.76:3000` (Grafana kontoret, CT 137) - **KRITISK:** CT 137 har DHCP-adresse — faktisk IP er `172.20.0.76`, IKKE `.137` som hostname antyder - **Risiko:** Hvis CT 137 DHCP-lease endres (f.eks. etter reboot av DHCP-server) kan .76 bli en annen maskin - **Konsekvens av IP-endring:** `monitoring-k.magitek.no` slutter å fungere umiddelbart - **Løsning ved IP-endring:** Oppdater proxy host ID 36 i NPM til ny IP (`docker exec` → NPM API PUT eller WebGUI) - **Anbefalt tiltak:** Sett statisk IP på CT 137 (kontroller via `pct set 137 --net0 ip=172.20.0.76/24,...` på pmox10) og oppdater NPM om nødvendig - **Se u5:** CT 137 er dokumentert i kontoret/proxmox-ekspertfil (mon-kontoret)
NPM-K-07: SQLite DB-versjon ved restart operations/magitek-server-ops/kontoret/services knowledge low CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["npmk07","sqlite","dbversjon","ved","restart"]
Cross-domain: []
Symptoms: []
Body:
### NPM-K-07: SQLite DB-versjon ved restart - NPM logger "Current database version: none" ved oppstart — dette er forventet (migrerings-log, ikke en feil) - Tjenesten fungerer normalt ### NPM-K-08: zyxel1920.magitek.no krever proxy_ssl_verify off OG Cookie-header clear - **Årsak 1:** Stunnel-proxy (CT 133, 172.20.0.5:8443) bruker selvsignert sertifikat — NPM må ha `proxy_ssl_verify off` i advanced config - **Årsak 2:** Gammel ZyXEL-firmware tåler ikke store cookies (fra *.magitek.no-sider). Cookie-header må nullstilles: `proxy_set_header Cookie "";` - **Advanced config for zyxel1920.magitek.no (proxy host ID 26):** ```nginx proxy_ssl_verify off; proxy_set_header Cookie ""; ``` ### NPM-K-09: 192.168.86.0/24 og 10.0.0.0/24 lagt til alle 25 proxy host access rules (direkte nginx-endring) - **Bakgrunn:** WireGuard-tilgang fra hjemme (192.168.86.x) og WG road warrior (10.0.0.x) til kontoret blokkeres av NPM access lists som kun tillot 172.20.0.0/24 - **Gjort:** `allow 192.168.86.0/24` og `allow 10.0.0.0/24` lagt til i alle 25 nginx proxy host config-filer via direkte redigering - **KRITISK ADVARSEL:** Dette er direkte endringer i nginx-konfigurasjonsfiler generert av NPM. Hvis en proxy host redigeres og lagres i NPM GUI, vil NPM regenerere nginx-configen og OVERSKRIVE denne endringen! - **Permanent fix:** Oppdater Access List i NPM GUI (legg til 192.168.86.0/24 og 10.0.0.0/24 i de relevante access listene) — spesielt Access List ID 5 "LAN_Kontor_hjemme_Scandic" - **Status 2026-03-04:** Direkte nginx-endring er aktiv. NPM GUI-oppdatering ikke gjort ennå. ### NPM-K-10: syncrovanis.magitek.no — NPM proxy med wildcard cert (OPPDATERT 2026-03-18) - **Gammel status:** Proxy host 33/34 feilet pga HTTP-01 challenge. Opprinnelig satt opp som DNS-only. - **Nytt oppsett (2026-03-18):** NPM proxy host **ID 35** med wildcard cert 48 (*.magitek.no, DNS-01). - **Pi-hole kontoret (CT 108):** `syncrovanis.magitek.no → 172.20.0.42` (NPM) - **Pi-hole hjemme (CT 101):** `syncrovanis.magitek.no → 172.20.0.42` (NPM) - **Forward:** `http://172.20.0.94:80`, ssl_forced=1, cert=48, access_list=5 - **Leksjon:** Interne tjenester bør også bruke NPM + wildcard cert for HTTPS — nettlesere tvinger HTTPS via HSTS fra andre *.magitek.no-tjenester.
Kjente Gotchas operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["kjente","gotchas"]
Cross-domain: []
Symptoms: []
Body:
## Kjente Gotchas ### NPM-K-01: JSON-escaping i NPM API-kall via SSH - Kall til NPM API via SSH + curl feiler med "Bad escaped character" hvis JSON inneholder spesialtegn (!, $, {}) i shell - **Løsning:** Skriv JSON til fil (`/tmp/payload.json`) og bruk `curl -d @/tmp/payload.json` - Se `CURRENT-credentials.md` for NPM API-innlogging ### NPM-K-02: NPM passord ble endret av agent - En agent endret passordet via bcrypt-hash oppdatering i SQLite tabell `auth` - **Status og detaljer:** Se `CURRENT-credentials.md` → NPM Kontoret - **Tilbakestilling:** Generer ny bcrypt-hash via `docker exec heine-app-1 node /tmp/script.js` med `/app/node_modules/bcrypt` og oppdater DB ### NPM-K-03: Packeton packages.json krever autentisering - `https://packages.magitek.no/packages.json` returnerer **401 Authorization Required** uten HTTP Basic auth - **Løsning:** Konfigurer Composer med HTTP Basic auth: ```bash composer config --global http-basic.packages.magitek.no admin Ansjos123 ``` - **Bakgrunn:** Packeton-containeren på port 8088 krever autentisering på offentlige endpoints ### NPM-K-04: NPM API token-format og levetid - Token fra `/api/tokens` returneres som JSON med `token`-felt - Bruk som: `curl -H 'Authorization: Bearer TOKEN' ...` - Token er kortlevd — hent ny token for hver agentlei eller lange operasjoner - **Eksempel:** ```bash # Hent credentials fra CURRENT-credentials.md, deretter: TOKEN=$(ssh heine@172.20.0.42 'curl -s http://localhost:81/api/tokens -X POST -H "Content-Type: application/json" -d @/tmp/payload.json | python3 -c "import sys, json; print(json.load(sys.stdin)[\"token\"])"') ssh heine@172.20.0.42 "curl -s http://localhost:81/api/nginx/proxy-hosts -H 'Authorization: Bearer $TOKEN'" ``` ### NPM-K-05: Docker-compose i /home/heine - Compose-fil er i `/home/heine/docker-compose.yml` (ikke /opt/) - Starte/stoppe: `cd /home/heine && docker compose restart app` ### NPM-K-06: KRITISK — Nye *.magitek.no subdomener trenger CNAME for SSL - **Symptom:** Let's Encrypt HTTP-01 challenge feiler med 404 for nye subdomener som matcher *.magitek.no wildcard (A-record 81.167.27.54) - **Årsak:** WAN-IP 81.167.27.54 NAT-forwarder port 80 korrekt til NPM, men LE-validering feiler (mulig NAT-reflection-problem) - **Løsning:** Opprett CNAME `hostclone.magitek.no → px10.magitek.no` i Webhuset DNS FØR du ber om LE-sertifikat - **Alle fungerende *.magitek.no-tjenester bruker CNAME til px10.magitek.no (62.97.227.206)** - Se også `CURRENT-webhuset-dns.md` gotcha WH-DNS-04
Deploy keys for GitHub (i Packeton-containeren) operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["deploy","keys","for","github","packetoncontaineren"]
Cross-domain: []
Symptoms: []
Body:
### Deploy keys for GitHub (i Packeton-containeren) | Key-navn | Type | GitHub-repo | Formaal | |----------|------|-------------|---------| | `packeton@magitek.no` | ed25519 | (original, ukjent repo) | Opprinnelig deploy key | | `github-kb` | ed25519 | `heinesalbu/kb-system` (privat) | KB-pakke deploy key | ### Registrerte pakker | Pakke | Versjon | GitHub-repo | Beskrivelse | |-------|---------|-------------|-------------| | `magitek/kb-system` | v1.0.0 | `heinesalbu/kb-system` | Universelt KB-system (14k linjer, 41 PHP-filer). Namespace: `Magitek\KbSystem\` | Installert i: - **ReportMaker** (`/var/www/reportmaker`) — via `composer require`, bruker `artisan kb:*` (auto-discovery ServiceProvider) - **magitek-ops** (`/var/www/magitek-ops`) — via path repo + `composer require`, bruker `vendor/bin/kb` CLI KB CLI-kommandoer: `kb:ingest`, `kb:query`, `kb:context`, `kb:freshness`, `kb:extract-lessons`, `kb:archive-safe` **Composer-konfigurasjon:** ```bash composer config --global repositories.magitek composer https://packages.magitek.no composer config --global http-basic.packages.magitek.no admin Ansjos123 ``` **OBS:** packages.json krever HTTP Basic auth (401 Authorization Required uten credentials). ## Docker MCP (lagt til 2026-03-13) **Docker MCP er tilgjengelig i Claude Code** via `mcp-docker-server`. Kobler til Docker på denne maskinen (172.20.0.42) via SSH socket-forwarding. | Egenskap | Verdi | |----------|-------| | **MCP-server** | `mcp-docker-server` | | **Tilgang** | `unix:///tmp/docker-npm.sock` (forwarded via SSH-tunnel) | | **Tunnel-service** | `systemctl --user status docker-npm-tunnel.service` | | **Tunnel-metode** | SSH `-L /tmp/docker-npm.sock:/var/run/docker.sock heine@172.20.0.42` | **GOTCHA:** `mcp-docker-server` støtter KUN lokal socket — ikke `ssh://` DOCKER_HOST. Derfor kjøres en persistent systemd user service (`docker-npm-tunnel.service`) som forwarder Docker-socketen via SSH til `/tmp/docker-npm.sock` på laravelserver-v11. ---
SSL-sertifikater operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["sslsertifikater"]
Cross-domain: []
Symptoms: []
Body:
## SSL-sertifikater ### Wildcard (DNS-01 challenge via Cloudflare API) — UTLOPT | ID | Domene | Utloper | Metode | Status | |----|--------|---------|--------|--------| | **48** | **\*.magitek.no + magitek.no** | **2026-03-04** | **DNS-01 (Cloudflare)** | **UTLOPT** | **OBS:** Wildcard cert 48 utlop 2026-03-04. `provider=other`, `domain_names=[]` — importert cert, ikke auto-renewable. Nye subdomener (monitoring) bruker dedikerte LE HTTP-01 certs (56, 57). Eksisterende *.magitek.no proxy hosts som fortsatt peker til cert 48 har ugyldig SSL. Auto-renewal script: `tools/ssl-renewal/renew-magitek-wildcard.sh` (trenger oppdatering/kjoring) ### Individuelle (HTTP-01 challenge — nativja.no domener) | ID | Domene | Utloper | |----|--------|---------| | 1 | nativja.no, www.nativja.no | 2026-04-29 | | 2 | nx.nativja.no | 2026-05-21 | | 6 | frappe.nativja.no | 2026-05-21 | | 7 | magitek.nativja.no | 2026-04-03 | | 18 | zyxel1920.nativja.no | 2026-05-30 | | 38 | nativja1.nativja.no | 2026-06-02 | | 45 | webserver1.nativja.no | 2026-06-02 | ### Dedikerte LE-certs (HTTP-01, monitoring — wildcard cert 48 utlopt) | ID | Domene | Utloper | Metode | |----|--------|---------|--------| | 56 | monitoring.magitek.no | 2026-06-16 | HTTP-01 (LE) | | 57 | monitoring-k.magitek.no | 2026-06-16 | HTTP-01 (LE) | ### Ubrukte (gamle individuelle *.magitek.no — erstattet av wildcard) Cert ID 9, 11, 14, 15, 17, 26, 36, 37, 39, 40, 41, 42, 43, 44, 46, 47 — kan slettes ## NPM API | Egenskap | Verdi | |----------|-------| | **API endpoint** | http://172.20.0.42:81/api/ | | **Credentials** | Se `CURRENT-credentials.md` → NPM Kontoret | ## Packeton (Privat Composer-registry) | Egenskap | Verdi | |----------|-------| | **Container** | heine-packeton-1 | | **Image** | okvpn/packeton:latest | | **Port** | 8088 (intern 80) | | **DB** | SQLite (/data/packeton.db) | | **Credentials** | Se `CURRENT-credentials.md` → Packeton | | **Public URL** | https://packages.magitek.no | | **Proxy host ID** | 16 (ID for packages.magitek.no i NPM) | | **SSL cert ID** | 17 (Let's Encrypt, utløper 2026-05-29) | | **DNS** | CNAME packages.magitek.no → px10.magitek.no (Webhuset) |
Proxy Hosts (kartlagt 2026-02-28) operations/magitek-server-ops/kontoret/services knowledge low CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["proxy","hosts","kartlagt","20260228"]
Cross-domain: []
Symptoms: []
Body:
## Proxy Hosts (kartlagt 2026-02-28) | ID | Domene | Forward | Port | SSL cert ID | SSL | |----|--------|---------|------|-------------|-----| | 13 | ? | 172.20.0.94 | 8200 | 14 | Ja | | 8 | ? | 172.20.0.107 | 80 | 6 | Ja | | 2 | ? | 172.20.0.63 | 80 | 1 | Ja | | 14 | ? | 192.168.86.94 | 8080 | 0 | Nei | | 4 | ? (NPM-admin) | 172.20.0.42 | 81 | 2 | Ja | | 16 | packages.magitek.no | 172.20.0.42 | 8088 | 17 | Ja | | 17 | zyxel1920.nativja.no | 172.20.0.5 | 8443 | 18 | Ja | | 18 | freshtomato.nativja.no | 172.20.0.2 | 80 | 20 | Ja (LE, Force SSL, HTTP/2) | **TODO:** Kartlegg domene-navn for alle proxy hosts (ID 2, 4, 8, 13, 14). ### Proxy Host ID 17 — zyxel1920.nativja.no (ZyXEL Switch via Stunnel) | Egenskap | Verdi | |----------|-------| | **Domene** | zyxel1920.nativja.no | | **Forward scheme** | https | | **Forward host** | 172.20.0.5 | | **Forward port** | 8443 | | **SSL certificate ID** | 18 (Let's Encrypt) | | **Backend** | Stunnel proxy (CT 133, Ubuntu 20.04) | | **Final target** | ZyXEL XS1920 switch (172.20.0.3:443) via legacy TLS | | **Advanced config** | `proxy_ssl_verify off;` (stunnel uses self-signed cert) | | **Access list ID** | 5 (LAN_Kontor_hjemme_Scandic) | | **Purpose** | ZyXEL switch management interface with modern browsers | **Flow:** Chrome → NPM (172.20.0.42:443, LE cert) → stunnel (172.20.0.5:8443, self-signed) → ZyXEL (172.20.0.3:443, legacy TLS) Kjente proxy hosts: - `reportmaker.magitek.no` → `http://172.20.0.94:80` (Apache/Laravel, ID=12) - `packages.magitek.no` → `http://172.20.0.42:8088` (Packeton, ID=16) - `duplicati-kolsk.magitek.no` → `http://172.20.0.69:8200` (Duplicati, ID=13, migrert fra laravelserver-v11 2026-03-05) - `suitecrm.magitek.no` → `http://172.20.0.102:80` (ID=11) - `skymirror.magitek.no` → `http://172.20.0.94:80` (ID=15) - `hostclone.magitek.no` → `http://172.20.0.94:80` (Hostclone Dashboard, ID=20, ACL=5) - `mainwp.nativja.no` → `http://172.20.0.111:80` (MainWP Dashboard, ID=19, ACL=5) - `px1.magitek.no` → `https://172.20.0.34:8006` (Proxmox px1, ID=21, ACL=5, WS=true) - `pmox10.magitek.no` → `https://172.20.0.32:8006` (Proxmox pmox10, ID=22, ACL=5, WS=true) - `pmox15.magitek.no` → `https://172.20.0.33:8006` (Proxmox pmox15, ID=23, ACL=5, WS=true) - `pfsense-kolsk.magitek.no` → `http://172.20.0.1:81` (pfSense kontoret, ID=24, ACL=5) - `npm-kolsk.magitek.no` → `http://172.20.0.42:81` (NPM admin, ID=25, ACL=5) - `zyxel1920.magitek.no` → `https://172.20.0.5:8443` (ZyXEL switch, ID=26, ACL=5) - `freshtomato.magitek.no` → `http://172.20.0.2:80` (FreshTomato AP, ID=27, ACL=5) - `mainwp.magitek.no` → `http://172.20.0.111:80` (MainWP, ID=28, ACL=5) - `todo.magitek.no` → `http://172.20.0.93:8006` (Todo, ID=29, ACL=5) - `pihole-kolsk.magitek.no` → `http://172.20.0.6:80` (Pi-hole admin, ID=30, ACL=5, advanced: redirect / to /admin/) - `dam.magitek.no` → `http://172.20.0.94:80` (DAM, ID=32, ACL=5) - `syncrovanis.magitek.no` → `http://172.20.0.94:80` (Syncrovanis Dashboard, ID=35, ACL=5, cert=48) - `monitoring-k.magitek.no` → `http://172.20.0.76:3000` (Grafana kontoret, CT 137, ID=36, cert=57, LE dedikert) - `monitoring.magitek.no` → `http://192.168.86.162:3000` (Grafana hjemme via WireGuard, CT 221, ID=37, cert=56, LE dedikert)
Identitet operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-npm-kontoret.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-npm-kontoret.md
Source date: 2026-03-19
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: NPM Kontoret (Nginx Proxy Manager) **Version:** 2.0 **Date:** 2026-03-18 (v2.0) **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/CURRENT-npm-kontoret.md --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Hostname** | nginxpm-ub2404 | | **VM/CT ID** | ? (TODO: finn fra px1 qm/pct list) | | **Type** | KVM VM pa px1 | | **Proxmox Host** | px1 (kontoret) | | **LAN IP** | 172.20.0.42 | | **Lokasjon** | Kontoret (Kolskogheiane 12) | | **OS** | Ubuntu 24.04 (bekreftet via hostname: nginxpm-ub2404) | | **Rolle** | Reverse proxy + SSL-terminering for kontor-tjenester | | **Status** | Aktiv (32+ dagers uptime per 2026-02-28) | ## Tilgang | Metode | Detaljer | |--------|----------| | SSH | `ssh heine@172.20.0.42` | | WebGUI | http://172.20.0.42:81 (NPM admin dashboard) | | Credentials | Se `CURRENT-credentials.md` → NPM Kontoret | **OBS:** Bruk `heine`-bruker, ikke root. **OBS:** `sudo` krever passord. Docker-kommandoer via `docker ...` fungerer direkte (heine er i docker-gruppen). ## Docker Stack **Compose-fil:** `/home/heine/docker-compose.yml` | Container | Image | Status | Porter | |-----------|-------|--------|--------| | heine-app-1 | jc21/nginx-proxy-manager:latest | Running | 80, 81, 443 | | heine-packeton-1 | okvpn/packeton:latest | Running | 0.0.0.0:8088->80/tcp | **Volumer (NPM):** - `./data` → `/data` (nginx config, proxy hosts, SQLite DB) - `./letsencrypt` → `/etc/letsencrypt` (SSL-sertifikater) **DB:** SQLite på `/data/database.sqlite` (ikke MariaDB — ingen DB-container) ### SQLite DB-tilgang og skjema ```bash # Tilgang (sqlite3 finnes IKKE i containeren — bruk python3 eller kopier DB) docker cp heine-app-1:/data/database.sqlite /tmp/npm-db.sqlite python3 -c "import sqlite3; ..." # Eller docker cp tilbake etter endringer ``` **Viktige tabeller:** - `proxy_host` — kolonner: `id`, `domain_names` (JSON), `forward_host`, `forward_port`, `forward_scheme`, `certificate_id`, `ssl_forced`, `access_list_id`, `enabled`, `is_deleted`, `advanced_config` - `certificate` — kolonner: `id`, `provider`, `nice_name`, `domain_names` (JSON), `expires_on`, `is_deleted` - `user` — kolonner: `id`, `email`, `name`, `is_deleted` - `auth` — kolonner: `id`, `user_id`, `type`, `secret` (bcrypt hash) **OBS:** Kolonnen heter `is_deleted` (IKKE `is_disabled`). Mange agenter antar feil navn.
MCP-SERVERS-03: SSH-tunnel allerede i bruk — sjekk for lsof operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-mcp-servers.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-mcp-servers.md
Source date: 2026-03-14
Keywords: ["mcpservers03","sshtunnel","allerede","bruk","sjekk","for","lsof"]
Cross-domain: []
Symptoms: []
Body:
### MCP-SERVERS-03: SSH-tunnel allerede i bruk — sjekk for lsof - **Symptom:** Tunnel-opprettelse feiler med "Address already in use" - **Arsak:** Forrige tunnel-prosess ble ikke ryddet opp - **Losning:** `lsof -ti:PORT | xargs kill` for a frigjore porten, tunnel-wrap.sh sjekker automatisk ### MCP-SERVERS-04: from_openapi() krever tilgjengelig Swagger-URL - **Symptom:** `FastMCP.from_openapi()` feiler med connection error - **Arsak:** Swagger-endepunktet er bak autentisering eller ikke eksponert - **Losning:** Last ned swagger.json lokalt forst, bruk `from_openapi("file:///path/to/swagger.json")` ### MCP-SERVERS-05: Proxmox MCP forblir i magitek-ops - **Symptom:** Forventning om at mcp-proxmox flyttes hit - **Arsak:** 6 instanser fungerer, kompleks .env-konfigurasjon per node - **Losning:** Ikke flytt. Nye servere bygges her, eksisterende Proxmox MCP forblir i `magitek-ops/tools/mcp-proxmox/` ## Vanlige Operasjoner ### Teste en FastMCP-server ``` cd /var/www/mcp-servers/packages/mcp-{name} uvx fastmcp dev server.py ``` ### Aktivere venv ``` source /var/www/mcp-servers/.venv/bin/activate ``` ### Sjekke installert FastMCP-versjon ``` /var/www/mcp-servers/.venv/bin/python -c "import fastmcp; print(fastmcp.__version__)" ``` ### Legge til ferdig server i magitek-ops Rediger `/var/www/magitek-ops/.mcp.json` — legg til nytt objekt under `mcpServers`. ## Changelog ### v1.0 - 2026-03-14 - Initial versjon - Dokumentert monorepo-struktur, teknologivalg, planlagte servere - SSH tunnel pattern, gotchas, integrasjon med magitek-ops
Integrasjon med magitek-ops operations/magitek-server-ops/kontoret/services knowledge low CURRENT-mcp-servers.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-mcp-servers.md
Source date: 2026-03-14
Keywords: ["integrasjon","med","magitekops"]
Cross-domain: []
Symptoms: []
Body:
## Integrasjon med magitek-ops - `magitek-ops/.mcp.json` peker til MCP-servere via filsystemstier - Nye servere bygget her legges til `.mcp.json` nar de er klare - Eksisterende Proxmox MCP forblir i `magitek-ops/tools/mcp-proxmox/` (fungerer, ingen grunn til a flytte) - **Framtidig:** Split individuelle servere til egne repoer nar modne → npm/PyPI/Packeton-publisering ## Opprette Ny Server (Workflow) 1. `cp -r templates/fastmcp-python packages/mcp-{name}` 2. Rediger `server.py` — implementer `@mcp.tool`-funksjoner 3. Rediger `pyproject.toml` — sett riktig pakkenavn 4. For hjemme-tjenester: opprett `.tunnel.env` fra `example.tunnel.env` 5. Test: `cd packages/mcp-{name} && uvx fastmcp dev server.py` 6. Legg til i `.mcp.json`: - Kontoret: `"command": "python", "args": ["server.py"]` - Hjemme: `"command": "bash", "args": ["tunnel-wrap.sh", ".tunnel.env"]` ## Backup - **Repo-backup:** Git → GitHub (`heinesalbu/mcp-servers`, privat) - **Server-backup:** laravelserver-v11 har Proxmox datacenter-backup (sjekk px1 jobs.cfg for VMID) - **Ingen separat backup** av dette repoet utover git push ## Sikkerhet - GitHub-repo er PRIVAT (inneholder potensielt API-nokkler i `.tunnel.env`) - `.tunnel.env` filer BOR ligge i `.gitignore` (inneholder tokens) - `verify=False` i template server.py — sett `True` for tjenester med gyldig SSL - API-nokkler sendes som miljovariable, IKKE hardkodet i kildekode ## Kjente Gotchas ### MCP-SERVERS-01: Python externally-managed — bruk venv eller uvx - **Symptom:** `pip install fastmcp` gir "externally-managed-environment" feil - **Arsak:** Ubuntu 24.04 blokkerer global pip-installasjon - **Losning:** Bruk `.venv/bin/pip install` eller `uvx fastmcp dev server.py` ### MCP-SERVERS-02: console.log() korrumperer stdio i TypeScript MCP-servere - **Symptom:** MCP-klient faar JSON-parse-feil, server crasher - **Arsak:** `console.log()` skriver til stdout som er JSON-RPC-kanalen - **Losning:** Bruk `console.error()` eller `process.stderr.write()` for debug-output
Eksisterende MCP-servere (IKKE i dette repoet) operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-mcp-servers.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-mcp-servers.md
Source date: 2026-03-14
Keywords: ["eksisterende","mcpservere","ikke","dette","repoet"]
Cross-domain: []
Symptoms: []
Body:
## Eksisterende MCP-servere (IKKE i dette repoet) | Server | Lokasjon | Instanser | Teknologi | |--------|----------|-----------|-----------| | **mcp-proxmox** | `/var/www/magitek-ops/tools/mcp-proxmox/` | 6 (px1, hjemme, pmox2, pmox10, pmox15, px3) | TS SDK v0.4, fork av gilby125/mcp-proxmox | | **serena** | Global MCP | 1 | Tredjepart | | **context7** | Global MCP | 1 | Tredjepart | | **docker** | Global MCP | 1 | Tredjepart | | **dam-sqlite** | Global MCP | 1 | Tredjepart | Disse styres via `/var/www/magitek-ops/.mcp.json` og forblir pa sine eksisterende plasseringer. ## Planlagte Servere | Server | Rammeverk | Metode | Status | |--------|-----------|--------|--------| | **mcp-suitecrm** | FastMCP | `from_openapi()` med SuiteCRM swagger.json | Planlagt (EX-0013) | | **mcp-truenas** | FastMCP | Evaluere official truenas-mcp vs custom | Planlagt | | **mcp-bookstack** | FastMCP | Evaluere community (47+ verktoy) vs custom | Planlagt | | **mcp-duplicati** | FastMCP | Ma bygges fra scratch, ingen eksisterende | Planlagt | Evaluert men ikke prioritert: pfSense, Pi-hole, Nextcloud, NPM, MainWP. ## SSH Tunnel Pattern Tjenester pa hjemme-nettverket (192.168.86.x) krever SSH-tunneler. **Dataflyt:** `Claude Code → tunnel-wrap.sh → SSH tunnel (TU-*) → tjeneste-API` **Konfigurasjon per pakke:** 1. Kopier `shared/ssh-tunnel-wrapper/example.tunnel.env` til `packages/mcp-{name}/.tunnel.env` 2. Sett `TUNNEL_LOCAL_PORT`, `TUNNEL_REMOTE_HOST/PORT`, `TUNNEL_SSH_HOST` 3. `ENV_*`-variabler strippes av prefiks og eksporteres til MCP-serveren 4. `.mcp.json` bruker `bash` + `tunnel-wrap.sh` som command (se proxmox-hjemme-monsteret) **Tunnel-wrapper:** `shared/ssh-tunnel-wrapper/tunnel-wrap.sh` - Sjekker om tunnel allerede finnes (`lsof -ti:PORT`) - Oppretter SSH-tunnel med keepalive og timeout - Eksporterer `ENV_*` → strippet variabelnavn - `exec`-er MCP-serverkommandoen ## Tilgang | Metode | Detaljer | |--------|----------| | Filsystem | `/var/www/mcp-servers/` pa laravelserver-v11 | | Git | `git -C /var/www/mcp-servers/ pull` | | Venv | `/var/www/mcp-servers/.venv/bin/python` | | Test | `cd /var/www/mcp-servers/packages/mcp-{name} && uvx fastmcp dev server.py` |
Identitet operations/magitek-server-ops/kontoret/services knowledge medium CURRENT-mcp-servers.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-mcp-servers.md
Source date: 2026-03-14
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: MCP Servers Monorepo **Version:** 1.0 **Date:** 2026-03-14 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/kontoret/services/CURRENT-mcp-servers.md **Naming:** EXPERT-infra-mcp-servers-v{X.Y}-{YYYYMMDD}.md --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Repo** | `/var/www/mcp-servers/` | | **GitHub** | `heinesalbu/mcp-servers` (PRIVAT) | | **Host** | laravelserver-v11 (172.20.0.94) | | **Lokasjon** | Kontoret | | **Type** | Monorepo (utviklingsarbeidsflate, ikke VM/CT) | | **Formaal** | Bygge egne MCP-servere for infrastruktur og tjenester | | **Status** | Aktiv, nyopprettet (init commit 2026-03-14) | ## Struktur ``` /var/www/mcp-servers/ ├── packages/ # Individuelle MCP-servere (tom, planlagte) ├── shared/ │ ├── ssh-tunnel-wrapper/ # tunnel-wrap.sh + example.tunnel.env │ └── auth-helpers/ # OAuth2, Bearer, API-key, Basic Auth patterns ├── templates/ │ ├── fastmcp-python/ # server.py + pyproject.toml (ANBEFALT) │ └── typescript-sdk/ # index.js + package.json ├── docs/ │ └── ARCHITECTURE.md ├── .venv/ # FastMCP 3.1.0 installert └── README.md ``` ## Teknologi | Stack | Versjon | Notat | |-------|---------|-------| | **FastMCP** | 3.1.0 | I `.venv/`, anbefalt for alle nye servere | | **Python** | 3.12.3 | System Python, bruk `.venv/` eller `uvx` | | **uvx** | 0.9.8 | `~/.local/bin/uvx` — kan kjore FastMCP uten venv | | **Node.js** | v24.11.0 | For TypeScript SDK-baserte servere | | **@modelcontextprotocol/sdk** | ^1.0.0 | TypeScript-mal, brukes av eksisterende mcp-proxmox | ### FastMCP Nokkelfunksjoner - Dekorator-API: `@mcp.tool` — minimal boilerplate - Auto-genererer verktoyskjema fra type hints - `FastMCP.from_openapi()` — null-kode generering fra Swagger/OpenAPI spec - `uvx fastmcp dev server.py` — interaktiv testing - `mcp.run()` — stdio JSON-RPC for Claude Code-integrasjon
Dynamisk pool operations/magitek-server-ops/kontoret/network knowledge low CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["dynamisk","pool"]
Cross-domain: []
Symptoms: []
Body:
### Dynamisk pool ``` 172.20.0.62 – 172.20.0.90 (29 adresser, DHCP) ``` --- ## Changelog ### v1.2 - 2026-03-13 - pfSense MCP-server evaluert og **droppet** — pfSense-pkg-API ikke i standard repos (tredjepartsinstall), hjemme har ødelagt pkg-system (libssl.so.30), lav ROI vs SSH ### v1.1 - 2026-03-04 - DHCP DNS endret fra 8.8.8.8,1.1.1.1 til 172.20.0.6 (Pi-hole),8.8.8.8 (fallback) - Gotcha PF-06 oppdatert med Pi-hole info ### v1.0 - 2026-03-01 - Initial versjon — komplett kartlegging via SSH - 10 interfaces kartlagt (WAN + 7 LAN + bridge0 + loopback) - 3 port forwards dokumentert (12322→SSH, 80→NPM, 443→NPM) - 26 DHCP static mappings dokumentert - Brannmurregler kartlagt (WAN deny-default, LAN allow-all) - Ingen VPN konfigurasjon funnet - SSH aktivert og nøkkel-auth satt opp
PF-05: Alle bc:24:11:* MAC-adresser er Proxmox VMs operations/magitek-server-ops/kontoret/network knowledge medium CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["pf05","alle","bc2411","macadresser","proxmox","vms"]
Cross-domain: []
Symptoms: []
Body:
### PF-05: Alle bc:24:11:* MAC-adresser er Proxmox VMs - MAC-prefix bc:24:11 er Proxmox-generert (KVM virtio) - Alle VM/CT-enheter i DHCP-listen med denne prefixen kjører på px1 ### PF-06: ISP DNS lokalt, Pi-hole for DHCP-klienter - pfSense selv bruker ISP DNS (62.97.193.3/53) via Unbound - DHCP-klienter får 172.20.0.6 (Pi-hole) + 8.8.8.8 (fallback) - Pi-hole gir split DNS (kontoret-domener → NPM LAN) + annonse-blokkering - Unbound kjører som lokal resolver på 127.0.0.1:53 --- ## Vanlige Operasjoner ### SSH fra laravelserver-v11 ```bash ssh root@172.20.0.1 "kommando" ``` ### Sjekk brannmurregler ```bash ssh root@172.20.0.1 "pfctl -sr | grep pass | grep -v inet6" ``` ### Sjekk NAT-regler ```bash ssh root@172.20.0.1 "pfctl -sn | grep 'rdr on em0'" ``` ### Sjekk DHCP-leases ```bash ssh root@172.20.0.1 "cat /var/dhcpd/var/db/dhcpd.leases | grep -E '(^lease|hardware|client-hostname|binding)'" ``` ### Sjekk state table ```bash ssh root@172.20.0.1 "pfctl -si | head -10" ``` ### Backup config ```bash ssh root@172.20.0.1 "cat /cf/conf/config.xml" > pfsense-backup-$(date +%Y%m%d).xml ``` ### Restart tjenester ```bash ssh root@172.20.0.1 "pfctl -f /tmp/rules.debug" # Reload FW rules ssh root@172.20.0.1 "/etc/rc.restart_webgui" # Restart WebGUI ``` --- ## IP-adresseoversikt (komplett, fra DHCP + ARP) ### Statiske (DHCP reservasjoner) ``` 172.20.0.1 pfSense (gateway) 172.20.0.2 FreshTomato (WiFi AP) 172.20.0.4 TL-SG105E (managed switch) 172.20.0.12 Xerox skriver 172.20.0.22 ORION (Heines arbeidsstasjon) 172.20.0.23 DESKTOP-CEILUHL (KingaPC) 172.20.0.32 pmox10 (Proxmox, idle) — IKKE i DHCP, statisk på VM 172.20.0.33 pmox15 (Proxmox, hoster NPM) — IKKE i DHCP, statisk på VM 172.20.0.34 px1 (Proxmox, primær) — IKKE i DHCP, statisk på host 172.20.0.42 nginxpm-ub2404 (NPM) 172.20.0.91 wp01 172.20.0.92 ub24-websrv1 172.20.0.93 laravelserver1 172.20.0.94 laravel-v11 (ReportMaker) 172.20.0.95 ssh-server (jump host) 172.20.0.96 node-server 172.20.0.97 metabase 172.20.0.98 mysql-baser 172.20.0.99 proxmoxmailgateway 172.20.0.100 mailcow 172.20.0.101 suitecrm8 172.20.0.102 suitecrm 172.20.0.103 frappe 172.20.0.104 docker1 172.20.0.105 penpot 172.20.0.106 webstudio 172.20.0.107 frappe15 172.20.0.108 wp02 172.20.0.109 wp-kinga 172.20.0.110 wp01-recovery ```
ARP-tabell (aktive enheter ved kartlegging) operations/magitek-server-ops/kontoret/network knowledge low CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["arptabell","aktive","enheter","ved","kartlegging"]
Cross-domain: []
Symptoms: []
Body:
### ARP-tabell (aktive enheter ved kartlegging) | IP | MAC | Status | |----|-----|--------| | 172.20.0.2 | c0:ff:d4:a5:56:9f | FreshTomato AP | | 172.20.0.4 | 68:ff:7b:45:56:01 | TP-Link switch | | 172.20.0.12 | 9c:93:4e:48:6c:61 | Xerox skriver | | 172.20.0.22 | a8:a1:59:87:56:fa | ORION (permanent) | | 172.20.0.23 | 04:0e:3c:3a:60:15 | KingaPC (permanent) | | 172.20.0.32 | f4:39:09:de:91:a7 | pmox10 | | 172.20.0.33 | 10:62:e5:0d:70:10 | pmox15 | | 172.20.0.34 | 40:3f:8c:cc:98:e9 | px1 | | 172.20.0.42 | bc:24:11:b7:af:bb | NPM (permanent) | | 172.20.0.94 | bc:24:11:44:8a:a6 | laravel-v11 | | 172.20.0.95 | bc:24:11:87:30:3a | ssh-server | --- ## VPN - **OpenVPN:** Ingen konfigurasjon funnet (`/var/etc/openvpn/` tom) - **IPsec:** Ingen aktiv (`ipsec statusall` tom) - **Konklusjon:** Ingen VPN mellom kontoret og hjemme — kommunikasjon via SSH-tunneler over internett --- ## Sikkerhet & Backup - **Backup-rutine:** Ukjent (TODO: sjekk AutoConfigBackup) - **Sikkerhetsoppdateringer:** 2.8.1 tilgjengelig — bør planlegges - **Kritiske filer:** `/cf/conf/config.xml` (pfSense master config) - **Passord:** admin/root bruker med passord (lagret i brukerens passordmanager) --- ## Kjente Gotchas ### PF-01: SSH var deaktivert inntil 2026-03-01 - **Symptom:** Port 22 filtered, ingen SSH-tilgang - **Årsak:** SSH ikke aktivert i System → Advanced → Admin Access - **Løsning:** Aktivert via WebGUI, nøkkel lagt til i `/root/.ssh/authorized_keys` ### PF-02: WebGUI på port 8080, IKKE 443 - **Symptom:** https://172.20.0.1 gir timeout - **Årsak:** nginx frontend kjører på port 8080, ikke standard HTTPS - **Løsning:** Bruk http://172.20.0.1:8080 ### PF-03: Anti-lockout kun på em1 (LAN1) - **Symptom:** WebGUI/SSH bare garantert tilgjengelig via em1 - **Årsak:** Anti-lockout-regelen er knyttet til em1 (LAN1 interface) - **Løsning:** Bridge0 har "Allow all" USER_RULE som også tillater tilgang ### PF-04: Kun em3 har aktiv link - **Symptom:** Bare 1 av 7 LAN-porter har link up - **Årsak:** em3 (LAN2_OK) er fysisk koblet til switch — resten er ledige - **Merknad:** Bridge funker likevel fordi all trafikk går via bridget interface
Static Mappings (26 stk) operations/magitek-server-ops/kontoret/network knowledge medium CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["static","mappings","stk"]
Cross-domain: []
Symptoms: []
Body:
### Static Mappings (26 stk) | IP | Hostname | MAC | Identifikator | Rolle | |----|----------|-----|---------------|-------| | 172.20.0.2 | FreshTomato | c0:ff:d4:a5:56:9f | FreshTomatoAPwifi | WiFi AP | | 172.20.0.4 | TL-SG105E | 68:ff:7b:45:56:01 | TPlinkminiswitch | Managed switch | | 172.20.0.12 | XRX9C934E486C61 | 9c:93:4e:48:6c:61 | XeroxPrinter | Xerox skriver | | 172.20.0.22 | ORION | a8:a1:59:87:56:fa | PCHeine | Heines arbeidsstasjon | | 172.20.0.23 | DESKTOP-CEILUHL | 04:0e:3c:3a:60:15 | KingaPC | Kingas PC | | 172.20.0.42 | nginxpm-ub2404 | bc:24:11:b7:af:bb | nginxPM | NPM (pmox15) | | 172.20.0.91 | wp01 | bc:24:11:ab:f1:97 | — | WordPress (stopped) | | 172.20.0.92 | ub24-websrv1 | bc:24:11:df:76:3b | — | Webserver 1 | | 172.20.0.93 | laravelserver1 | bc:24:11:ae:8b:92 | — | Eldre Laravel-server | | 172.20.0.94 | laravel-v11 | bc:24:11:44:8a:a6 | — | **ReportMaker** | | 172.20.0.95 | ssh-server | bc:24:11:87:30:3a | — | SSH jump host (VM 113) | | 172.20.0.96 | node-server | bc:24:11:74:2e:6c | — | Node.js server | | 172.20.0.97 | metabase | bc:24:11:e1:40:91 | — | Metabase analytics | | 172.20.0.98 | mysql-baser | bc:24:11:91:d1:79 | — | MySQL-database | | 172.20.0.99 | proxmoxmailgateway | bc:24:11:63:62:b1 | — | Proxmox Mail Gateway | | 172.20.0.100 | mailcow | bc:24:11:ef:67:a4 | — | Mailcow e-post | | 172.20.0.101 | suitecrm8 | bc:24:11:d6:22:76 | — | SuiteCRM 8 | | 172.20.0.102 | suitecrm | bc:24:11:ea:6c:8c | — | SuiteCRM (eldre) | | 172.20.0.103 | frappe | bc:24:11:94:0f:9d | — | Frappe/ERPNext | | 172.20.0.104 | docker1 | bc:24:11:7e:ff:de | — | Docker host | | 172.20.0.105 | penpot | bc:24:11:81:b4:04 | — | Penpot design | | 172.20.0.106 | webstudio | bc:24:11:d6:e9:ee | — | Webstudio | | 172.20.0.107 | frappe15 | bc:24:11:90:ff:c0 | — | Frappe 15 | | 172.20.0.108 | wp02 | bc:24:11:b8:5c:5a | — | WordPress 2 | | 172.20.0.109 | wp-kinga | bc:24:11:56:50:cb | — | WordPress (Kinga) | | 172.20.0.110 | wp01-recovery | bc:24:11:09:99:d8 | — | WordPress recovery |
DNS operations/magitek-server-ops/kontoret/network knowledge low CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["dns"]
Cross-domain: []
Symptoms: []
Body:
### DNS - Lokal resolver: Unbound (127.0.0.1:53) - Upstream: 62.97.193.3, 62.97.193.53 (ISP) - DHCP-klienter får: 172.20.0.6 (Pi-hole), 8.8.8.8 (fallback) --- ## NAT / Port Forwarding ### Aktive port forwards (WAN → LAN) | Ekstern port | Mål IP | Mål port | Protokoll | Beskrivelse | |-------------|--------|----------|-----------|-------------| | **12322** | 172.20.0.95 | 22 | TCP | SSH jump host (VM 113) | | **80** | 172.20.0.42 | 80 | TCP | HTTP → NPM | | **443** | 172.20.0.42 | 443 | TCP | HTTPS → NPM | ### Outbound NAT - Standard: All LAN (172.20.0.0/24) NATes til WAN IP (62.97.227.206) - ISAKMP static-port NAT for VPN-kompatibilitet ### NAT Reflection Alle port forwards har PFREFLECT-regler på alle LAN interfaces (em1-em7 + bridge0). Dette betyr at LAN-enheter kan nå tjenester via det offentlige domenet/IP-en. --- ## Brannmurregler ### WAN (em0) | Retning | Regel | Beskrivelse | |---------|-------|-------------| | IN | Pass TCP → 172.20.0.42:80 | NAT HTTP | | IN | Pass TCP → 172.20.0.42:443 | NAT HTTPS | | IN | Pass TCP → 172.20.0.95:22 | NAT ssh-server (port 12322) | | IN | DHCP replies | Standard | | * | Default deny | Alt annet blokkeres | ### LAN_BRIDGE (bridge0) | Retning | Regel | Beskrivelse | |---------|-------|-------------| | IN | **Pass ALL** | `USER_RULE: Allow all` — alt fra LAN tillates | | IN | DHCP | Standard DHCP-regler | ### Individuelle LAN-interfaces med egne pass-regler | Interface | Regel | |-----------|-------| | em3 (LAN2_OK) | Pass ALL IPv4 | | em5 (LAN3_OK) | Pass ALL IPv4 | | em7 (LAN4_OK) | Pass ALL IPv4 | ### Anti-lockout - em1 (LAN1): Pass TCP til self:8080 (WebGUI) og self:22 (SSH) ### Firewall-out - Alt utgående fra pfSense selv: tillatt (inkl. route-to via WAN) ### State Table - ~1039 aktive states (per kartlegging) --- ## DHCP Server ### Pool - **Subnet:** 172.20.0.0/24 - **Range:** 172.20.0.62 – 172.20.0.90 (29 dynamiske adresser) - **Default lease:** 2 timer (7200s) - **Max lease:** 24 timer (86400s) - **DNS:** 172.20.0.6 (Pi-hole), 8.8.8.8 (fallback) - **Gateway:** 172.20.0.1
Identitet operations/magitek-server-ops/kontoret/network knowledge medium CURRENT-pfsense.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/network/CURRENT-pfsense.md
Source date: 2026-03-13
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: pfSense Kontoret **Version:** 1.2 **Date:** 2026-03-13 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/CURRENT-pfsense.md --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Hostname** | pfSense.home.arpa | | **Type** | Fysisk maskin (gjenbrukt enterprise-brannmur, ukjent merke — kostbar da ny) | | **LAN IP** | 172.20.0.1 (bridge0, LAN_BRIDGE) | | **WAN IP** | 62.97.227.206/30 (em0, DHCP fra ISP) | | **Gateway** | 62.97.227.205 | | **Lokasjon** | Kontoret (Kolskogheiane 12) | | **OS** | pfSense 2.7.2-RELEASE (FreeBSD 14.0-CURRENT) | | **Oppgradering** | 2.8.1 tilgjengelig | | **Serial** | 1431B01921 | | **Netgate Device ID** | f85fc3b01b6ee3c772fd | | **CPU** | Intel Core2 Quad Q9400 @ 2.66GHz (4 cores) | | **RAM** | 4 GB | | **Disk** | 27 GB (7% brukt, 23 GB ledig) | | **Uptime** | 33+ dager (per 2026-03-01) | | **Rolle** | Brannmur, gateway, NAT, DHCP for 172.20.0.0/24 | | **Status** | Aktiv | --- ## Tilgang | Metode | Detaljer | |--------|----------| | **SSH** | `ssh root@172.20.0.1` (nøkkel OK, port 22) | | **WebGUI** | http://172.20.0.1:8080 (nginx frontend, admin-bruker) | | **Console** | PuTTY fra ORION → 172.20.0.1 (root + passord) | **SSH-status:** Aktivert 2026-03-01, nøkkel-autentisering OK fra laravelserver-v11. --- ## Nettverksarkitektur ### Interfaces (10 stk) | Interface | Fysisk | Rolle | IP | Link Status | |-----------|--------|-------|----|-------------| | **WAN_NR5** | em0 | WAN (Internet) | 62.97.227.206/30 (DHCP) | UP, 1000baseT | | **LAN1** | em1 | Bridge-medlem | — | DOWN | | **LAN6_OK** | em2 | Bridge-medlem | — | DOWN | | **LAN2_OK** | em3 | Bridge-medlem | — | UP, 1000baseT | | **LAN7_OK** | em4 | Bridge-medlem | — | DOWN | | **LAN3_OK** | em5 | Bridge-medlem | — | DOWN | | **LAN8MGT** | em6 | Bridge-medlem | — | DOWN | | **LAN4_OK** | em7 | Bridge-medlem | — | DOWN | | **LAN_BRIDGE** | bridge0 | LAN Bridge (em1-em7) | 172.20.0.1/24 | UP | **Arkitektur:** Alle 7 LAN-porter (em1-em7) er bridget til `bridge0` (LAN_BRIDGE). Kun **em3 (LAN2_OK)** har aktiv link (1000baseT) — dette er trolig porten som kobler til switchen.
v1.0 - 2026-03-05 operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["v10","20260305"]
Cross-domain: []
Symptoms: []
Body:
### v1.0 - 2026-03-05 - Initial kartlegging etter vedlikeholdssesjon - Hardware: AMD Ryzen 9 3900X, 94 GiB RAM, 1.82 TB NVMe + 4x SSD (ZFS raid10) - 4 kjorende (VM 112, 113, CT 133, 134), 23 stoppede VMs, 7 stoppede CTs - RAM-optimering: VM 112 80G->48G, ZFS ARC cappet til 8 GiB - Disk-opprydding: 22G->11G, snapshot-opprydding, kernel purge - LVM thinpool: 42%->37.6% - 7 gotchas dokumentert (PX1-01 til PX1-07)
PX1-07: Kernel-oppgradering venter reboot operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["px107","kerneloppgradering","venter","reboot"]
Cross-domain: []
Symptoms: []
Body:
### PX1-07: Kernel-oppgradering venter reboot - 6.8.12-19 installert men 6.8.12-16 kjorer - Oppgradering fikser PX1-04 (dmaengine slab leak) - Krever planlagt nedetid (VM 112 = laravelserver-v11) ## Ressursoversikt (etter optimering 2026-03-05) | Ressurs | Total | Brukt | Ledig | |---------|-------|-------|-------| | CPU | 24 threads (Ryzen 9 3900X) | ~1% | ~99% | | RAM | 94 GiB | 24 GiB (inkl ZFS ARC 8G) | 70 GiB | | NVMe root | 79 GB | 11 GB (15%) | 64 GB | | LVM thinpool | 1.69 TB | 37.6% | ~1.06 TB | | ZFS raid10 | 1.73 TB | 63 GB (3%) | 1.67 TB | ## Monitoring & Ressursovervåking px1 er fysisk server — viften reagerer på samlet CPU-last fra ALLE VM-er. Monitoring skjer på tre nivåer: | Nivå | Verktøy | Lokasjon | Fanger | |------|---------|----------|--------| | **VM-intern** | atop (10s), PCP, sar | Inne i VM 112, 122 etc. | Hvilken prosess spiket | | **Proxmox RRD** | Innebygd | px1 `/var/lib/rrdcached/db/pve2-vm/` | Hvilken VM spiket (WebGUI → Summary) | | **Fysisk host** | Ingen (px1 har ikke iDRAC/IPMI) | — | Temp/vifte utilgjengelig | ### VM-er med atop/PCP installert | VM | Hostname | atop intervall | PCP | sar | |----|----------|---------------|-----|-----| | 112 | laravelserver-v11 | 10s | Ja | Ja | | 122 | suitecrm | 10s | Ja | Ja | ### Feilsøking: "Viften spinner opp" 1. **Proxmox WebGUI** → Node px1 → Summary → CPU-graf → finn tidspunkt 2. **Proxmox WebGUI** → Hver VM → Summary → finn hvilken VM spiket 3. **SSH inn i VM-en** → `atop -r /var/log/atop/atop_$(date +%Y%m%d) -b HH:MM` → finn prosessen 4. Alternativt: `ssh root@172.20.0.34 "head -1 /proc/stat"` for sanntid host-CPU ### Viktig kontekst - px1 har **ingen iDRAC/IPMI** — kan ikke lese temperatur eller vifte-RPM remote - Proxmox RRD er alltid aktivt, ingen konfigurasjon nødvendig - Korte spikes (<10s) fanges av atop men IKKE av sar (10 min intervall) --- ## Changelog ### v1.1 - 2026-03-15 - Monitoring-seksjon lagt til: tre-nivaa arkitektur (VM-intern, Proxmox RRD, fysisk host) - VM 112 + 122 har atop (10s), PCP, sar installert - Dokumentert at px1 har ingen iDRAC/IPMI - VM 122 disk oppdatert: 32G→80G (utvidet 2026-03-15) - Backup vmid-liste oppdatert: VM 122, CT 133, 134, 135 lagt til
Disk-opprydding operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["diskopprydding"]
Cross-domain: []
Symptoms: []
Body:
### Disk-opprydding - Slettet vzdump backup VM 110 (7 GB, desember 2024) - Slettet ISO: proxmox-mail-gateway (1.5 GB) - Journal vacuum: 1.3 GB -> 200 MB - apt cache renset (135 MB) - Slettet CT template ubuntu-20.04 (205 MB) - Slettet /root/.vscode-server (376 MB) - Slettet /tmp scripts - Purget gamle kjerner: 6.8.12-4 og 6.8.12-11 (beholder 6.8.12-16 running + 6.8.12-19) - Root-disk: 22 GB -> 11 GB (15% av 79 GB) ### Snapshot-opprydding - VM 111 (laravelserver1): 8 av 9 snapshots slettet, beholdt `pre_ressurser` - VM 123 (frappe): 3 av 4 snapshots slettet, beholdt `oppgradert_frappe` - Orphaned LVM snap volumes for VM 120 og 129 (na CTs): 6 volumes slettet (68 GiB) - LVM thin pool: 42% -> 37.6% ## Kjente Gotchas ### PX1-01: VM 112 RAM overallokering (FIKSET 2026-03-05) - **Var:** 80 GB RAM til VM 112 pa host med 94 GB total = 85% allokert til 1 VM - **Fikset:** Redusert til 48 GB med balloon min 8 GB. Faktisk bruk ~5 GiB. - **Backlog:** M-017 (kan lukkes) ### PX1-02: 23 stoppede VMs — oppryddingskandidat - Mange er test/eksperiment-VMs som aldri startes - 5 er base templates (100, 101, 106, 119, 127) brukt av linked clones — ma beholdes - Resten (18 VMs) er kandidater for arkivering til PBS + sletting - **Backlog:** M-090 ### PX1-03: snap_vm-112-disk-0_pre_disk_expansion (150 GiB) - Storste enkelt-snapshot pa aktiv VM - Blokkerer ~150 GiB pa LVM thinpool - Kan slettes hvis VM 112 disk-ekspansjonen er verifisert stabil ### PX1-04: dmaengine-unmap-2 slab leak (~1.1 GiB) - 18.2M objekter i slab cache, vokser over tid - Kjent kernel-bug i 6.8.x-serien - Fikses med oppgradering til nyere kernel (6.8.12-19 installert, krever reboot) - Ikke kritisk, men sloser RAM over tid ### PX1-05: 19 LVM snapshots for stoppede VMs - Mange stoppede VMs har snapshots som tar plass i thinpool - Ved arkivering av stoppede VMs: slett snapshots forst for a frigjore thinpool-plass - Se vedlikeholdsseksjonen for allerede oppryddede snapshots ### PX1-06: ZFS ARC var ucappet - **Var:** ARC c_max ~47 GiB (slukte nesten alt ledig RAM) - **Fikset 2026-03-05:** Satt til 8 GiB via `/etc/modprobe.d/zfs.conf` - **Verifisert:** `cat /proc/spl/kstat/zfs/arcstats | grep c_max` = 8589934592
VM 112 (laravel-v11) — VIKTIGST operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["112","laravelv11","viktigst"]
Cross-domain: []
Symptoms: []
Body:
### VM 112 (laravel-v11) — VIKTIGST Hoved-utviklingsserver. Kjorer Apache 2.4 + PHP-FPM 8.3. Hosting: magitek-ops, reportmaker. RAM optimert 2026-03-05: 80 GB -> 48 GB (balloon min 8 GB). Faktisk bruk ~5 GiB. Disker: 150G boot (LVM, 98% full thinpool allokering), 213G+510G (ZFS raid10). ## Stoppede VMs (23 stk) | ID | Navn | RAM | Disk | Merknad | |----|------|-----|------|---------| | 100 | ub2404 | 8G | 32G | Base template (linked clones) | | 101 | ub24-websrv1 | 8G | 32G | Base template | | 106 | ub2204min | 8G | 16G | Base template | | 107 | ub2204-minimal | 1G | 16G | Minimal test | | 108 | node-dev-srv | 8G | 32G | Node.js dev | | 109 | Copy-of-VM-ub2404 | 8G | 32G | Kopi/test | | 110 | webserver1 | 16G | 52G | Gammel webserver | | 111 | laravelserver1 | 4G | 32G | Forgjenger til VM 112 | | 114 | node-server | 8G | 32G | Node.js | | 115 | metabase | 8G | 32G | BI-verktoy | | 116 | mysql-baser | 8G | 32G | DB-server | | 117 | ProxmoxMailGateway | 4G | 12G | Mail gateway | | 118 | mailcow | 8G | 32G | Mail server | | 119 | ub2404-docker | 8G | 32G | Docker base template | | 121 | emptyubuntu | 8G | 32G | Tom | | 122 | suitecrm | 8G | 80G | CRM (ZFS, disk utvidet 32G→80G 2026-03-15) | | 123 | frappe | 3G | 32G | ERPNext test | | 124 | docker1 | 5G | 52G | Docker host | | 125 | penpot | 4G | 32G | Design tool | | 126 | webstudio | 8G | 32G | Web builder | | 127 | ub2204 | 8G | 32G | Base template | | 128 | frappe15 | 3G | 32G | Frappe v15 test | | 132 | pbsm2-backup-server | 8G | 64G | PBS test (aldri brukt) | ## Stoppede CTs (7 stk) | ID | Navn | Disk | Merknad | |----|------|------|---------| | 102 | openVPN | 16G | VPN test | | 103 | debian12 | 16G | Test | | 104 | openvpn2 | 16G | VPN test | | 105 | openvpn3 | 20G | VPN test | | 120 | wp01 | 18G | WordPress (stoppet) | | 129 | wp02 | 8G | WordPress (stoppet) | | 130 | wp-kinga | 12G | WordPress (stoppet) | | 131 | wp01-recovery | 8G | Recovery | ## Vedlikehold 2026-03-05 ### RAM-optimering - VM 112: 80 GB -> 48 GB (balloon min 8 GB). Bruk for: ~80%. Bruk etter: ~22% -> ~5 GiB faktisk. - ZFS ARC: Ucappet (~47 GiB) -> 8 GiB max. Persistent via `/etc/modprobe.d/zfs.conf`. - Host etter optimering: 24 GiB brukt / 70 GiB tilgjengelig (av 94 GiB).
PBS (Proxmox Backup Server) operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["pbs","proxmox","backup","server"]
Cross-domain: []
Symptoms: []
Body:
### PBS (Proxmox Backup Server) | Storage | Datastore | Server | Innhold | |---------|-----------|--------|---------| | extbackup | extbackup | magitek.no | backup | ### Lokal | Storage | Sti | Innhold | |---------|-----|---------| | local | /var/lib/vz | iso, vztmpl, backup | | raid10dataset | /raid10/proxmox_data | rootdir, images, iso, vztmpl, backup, snippets | ## Backup - **Proxmox backup-jobb:** backup-a837400f-3bb6 - **Schedule:** 02:00 daglig - **Storage:** extbackup (PBS, magitek.no) - **Mode:** Snapshot - **VMs/CTs inkludert:** 110, 111, 112, 113, 114, 115, 116, 120, 122, 123, 124, 128, 129, 130, 133, 134, 135 - **Ikke inkludert:** Base templates (100, 101, 106, 119, 127), test VMs (107-109, 117-118, 121, 125-126, 132), CTs (102-105, 131) ## Aktive VMs/CTs (4 kjorende) | ID | Navn | Type | Status | RAM | Disk | Rolle | |----|------|------|--------|-----|------|-------| | 112 | laravel-v11 | VM | Running | 48 GB (balloon min 8G) | 150G LVM + 213G+510G ZFS | Hoved dev-server (172.20.0.94) | | 113 | ssh-server | VM | Running | 2 GB | 32G LVM | SSH jump host (172.20.0.95) | | 133 | legacy-tls-proxy | CT | Running | - | 2G LVM | TLS proxy | | 134 | infra-tools | CT | Running | - | 2G LVM | Infrastruktur-verktoy | | 137 | mon-kontoret | CT | Running | - | - | Monitoring stack (Prometheus+Grafana+Alertmanager) | ### CT 137 (mon-kontoret) — Monitoring Stack - **Rolle:** Prometheus + Grafana + Alertmanager for kontoret (del av MP-0011 HA monitoring) - **IP:** `172.20.0.76` (**DHCP** — faktisk adresse, IKKE `.137` som hostname antyder) - **DNS-override:** Pi-hole kontoret (CT 108) har dnsmasq override: `monitoring-k.magitek.no → 172.20.0.42` (via NPM) - **NPM proxy:** `monitoring-k.magitek.no → http://172.20.0.76:3000` (Grafana, proxy host ID 36, cert 57) - **KRITISK:** CT 137 bruker DHCP — hvis IP-adressen endres (f.eks. DHCP-server restart) slutter `monitoring-k.magitek.no` å fungere - **Anbefalt:** Sett statisk IP (`pct set 137 --net0 ip=172.20.0.76/24,gw=172.20.0.1,...`) for å unngå IP-drift - **Oppsatt:** 2026-03-18 via MP-0011 (session b6bb8896)
Identitet operations/magitek-server-ops/kontoret/proxmox knowledge medium CURRENT-px1.md 100 2026-03-20 02:00:44
Source file: coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md
Source date: 2026-03-19
Keywords: ["identitet"]
Cross-domain: []
Symptoms: []
Body:
# Infrastructure Sub-Expert: px1 **Version:** 1.1 **Date:** 2026-03-15 **Parent:** coordination/experts/operations/magitek-server-ops/CURRENT.md **Load:** coordination/experts/operations/magitek-server-ops/kontoret/proxmox/CURRENT-px1.md --- ## Identitet | Egenskap | Verdi | |----------|-------| | **Hostname** | px1 | | **Type** | Fysisk server (Proxmox host) | | **CPU** | AMD Ryzen 9 3900X 12-Core (1 socket, 24 threads) | | **RAM** | 94.2 GiB (Proxmox) / ~96 GB physical | | **LAN IP** | 172.20.0.34 (vmbr0, gateway 172.20.0.1) | | **Lokasjon** | Kontoret | | **PVE versjon** | 8.4.17 | | **Kernel** | 6.8.12-16-pve (running), 6.8.12-19 (installed, neste boot) | | **Boot** | EFI (NVMe) | | **Rolle** | Hoved-Proxmox for kontoret, hoster laravelserver-v11 (dev) | | **Status** | Online, uptime 37+ dager per 2026-03-05 | ## Tilgang | Metode | Detaljer | |--------|----------| | SSH | `ssh px1` (root@172.20.0.34) fra laravelserver-v11 | | WebGUI | `https://172.20.0.34:8006` | ## Nettverk Enkelt oppsett: 1x bridge (vmbr0) pa enp8s0 (aktiv). enp9s0 og enp42s0 ned/ledig. ## Disker og Storage ### Fysiske disker | Disk | Storrelse | Type | Innhold | |------|-----------|------|---------| | nvme0n1 | 1.82 TB | NVMe | PVE boot: root 80G + swap 8G + data thinpool 1.69T | | sda | 931.5 GB | SSD (Samsung 870 QVO 1TB) | ZFS raid10 mirror-0 | | sdb | 894.3 GB | SSD (Kingston SA400S37 960G) | ZFS raid10 mirror-0 | | sdc | 894.3 GB | SSD (Kingston SA400S37 960G) | ZFS raid10 mirror-1 | | sdd | 894.3 GB | SSD (Kingston SA400S37 960G) | ZFS raid10 mirror-1 | NVMe SMART: PASSED. Root disk: 11 GB / 79 GB brukt (15%). ### LVM Thinpool (local-lvm) 1.69 TB total, 37.6% brukt. Pa NVMe. Inneholder disker+snapshots for 28 VMs + 7 CTs. 5 base/template volumes: base-100, base-101, base-106, base-119, base-127 (brukt av linked clones). Snapshots pa LVM: 19 stk, mange for stoppede VMs. Storste: `snap_vm-112-disk-0_pre_disk_expansion` (150 GiB). ### ZFS Pool (raid10) | Pool | Storrelse | Brukt | Ledig | Helse | |------|-----------|-------|-------|-------| | raid10 | 1.73 TB | 63.1 GB (3%) | 1.67 TB | ONLINE | Konfig: 2x mirror (mirror-0: Samsung+Kingston, mirror-1: 2x Kingston). Redundant. Siste scrub: 2026-02-08, 0 errors. ZFS datasets: vm-112-disk-0 (213G), vm-112-disk-1 (510G), vm-122-disk-0 (44G), 3x vm-122-state snapshots (49G total), proxmox_data (10.3G). **ZFS ARC:** Begrenset til 8 GiB via `/etc/modprobe.d/zfs.conf` (`options zfs zfs_arc_max=8589934592`). Persistent. Satt 2026-03-05 (var ucappet ~47 GiB for).
**Quality Mode:** BALANCED magitek-ops lesson medium MASTERPLAN.md 99 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0007-260313-sentry-selfhosted/MASTERPLAN.md
Source date: 2026-03-13
Keywords: ["quality","mode","balanced"]
Cross-domain: []
Symptoms: []
Body:
**Why:** Bug-crusher agent spends 30-50% of tokens manually grepping 260+ log files. magitek-ops lesson medium MASTERPLAN.md 99 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0007-260313-sentry-selfhosted/MASTERPLAN.md
Source date: 2026-03-13
Keywords: ["crusher","agent","spends","tokens","manually","grepping","files","sentry","aggregates","deduplicates"]
Cross-domain: []
Symptoms: []
Body:
Sentry aggregates, deduplicates, and provides structured error context. Combined with the Sentry MCP server, agents can query production errors directly instead of parsing raw logs.
Deploy a self-hosted Sentry instance on Proxmox infrastructure to provide centralized error track… magitek-ops lesson medium MASTERPLAN.md 99 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0007-260313-sentry-selfhosted/MASTERPLAN.md
Source date: 2026-03-13
Keywords: ["deploy","self","hosted","sentry","instance","proxmox","infrastructure","provide","centralized","error"]
Cross-domain: []
Symptoms: []
Body:
for ReportMaker. The `sentry/sentry-laravel` package is already installed on ReportMaker (172.20.0.94) with an empty DSN — this masterplan covers the server-side deployment and integration.
**Architecture choice:** Host-level routing with iptables on px1 rather than VLAN trunking throug… magitek-ops lesson medium MASTERPLAN.md 99 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0006-260313-pentest-lab/MASTERPLAN.md
Source date: 2026-03-13
Keywords: ["architecture","choice","host","level","routing","iptables","rather","than","vlan","trunking"]
Cross-domain: []
Symptoms: []
Body:
he ZyXEL switch and pfSense. This avoids risk to existing network infrastructure while providing equivalent isolation (the bridge has no physical uplink — L2 isolation is absolute).
Set up an isolated Kali Linux VM on px1 (kontoret) for AI-driven penetration testing. magitek-ops lesson medium MASTERPLAN.md 99 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0006-260313-pentest-lab/MASTERPLAN.md
Source date: 2026-03-13
Keywords: ["isolated","kali","linux","kontoret","driven","penetration","testing","claude","code","laravelserver"]
Cross-domain: []
Symptoms: []
Body:
Claude Code on laravelserver-v11 (172.20.0.94) will SSH into the Kali VM to run pentest tools against explicitly scoped targets. The VM is network-isolated via an internal-only Proxmox bridge (vmbr99, 10.99.0.0/24) with no physical uplink. Routing and firewall rules on the px1 host control all traffic: only SSH inbound from laravelserver and scope-controlled outbound to designated targets are permitted. No internet access, no LLM/Claude access, no management network access.
**Grunnlag:** `coordination/explore/EX-0008-260305-kb-system-universalization/EXPLORE.md` magitek-ops lesson medium MASTERPLAN.md 98 2026-03-20T02:00:45Z
Source file: coordination/masterplans/active/MP-0004-260305-kb-universalization/MASTERPLAN.md
Source date: 2026-03-05
Keywords: ["grunnlag","coordination","explore","system","universalization"]
Cross-domain: []
Symptoms: []
Body:
Ingestion History

Loading…