GMKtec NucBox K8 Plus · AMD Ryzen 7 8845HS · 32 Go · 1 To SSD
OS
Ubuntu 24.04.4 LTS Server · Kernel 6.8.0-136-generic
Réseau
UniFi Dream Machine SE · VLAN 1/30/50/60
Domaine
obbconnect.net · Cloudflare Zero Trust : obbconnect
✅Audit sécurité 05/04/2026 complété. HomeKit filtré 07/04/2026. Rapport Graylog Intelligent déployé 10/04/2026. Harmony Hubs intégrés HA 10/04/2026. TR-004U migré NAS Storage Mode 09/04/2026. Vault épinglé (1.17.6 le 15/04/2026, aujourd'hui 1.21.4). 1641 — WiZ Entrée 1+2 intégrés HA + automation crépuscule (19/04/2026). Sensibo Air Pro x3 + ConnectLife THZEWIFI x3 intégrés. Architecture: Sensibo=capteurs ambiants, ConnectLife=commandes. Google Weather remplace Met.no (19/05/2026). Confort Climatique v5: humidex, cible été dynamique, fan_mode low, rééval 5min, hystérésis météo 0.4°C (19/05/2026). Admin VLAN migré 192.168.1.0/24 → 10.10.1.0/24 (20/05/2026). Python Matter Server déployé + Claude Code opérationnel sur homeserver — API UniFi UDM-SE via Vault obbconnect/unifi-mcp (04/06/2026). NTP recentralisé sur NAS 10.10.1.60 post-renumération réseau — homeserver, Pi + DHCP UniFi (Default/IoT/Apt) corrigés (09/06/2026). Confort Climatique v5 finding 3 corrigé (ordre choose: turn_off×4 avant rattrapage fan). Rename sensor.aire_ouverte_temperature_feels_like_2 → sans suffixe _2 (11/06/2026). Agent de maintenance nocturne déployé, Phases 1 à 6 : diagnostic + actions correctives bornées sur allowlist validée, notification Telegram via n8n, timer systemd quotidien 04:15 America/Montreal (21/07/2026). Inventaire Docker audité — 19 conteneurs : stack Zigbee2MQTT + Mosquitto + ESPHome + OTBR (Thread) documenté ; Apple TV (10.10.1.168/.169) et Grafana (NAS 10.10.1.60:3000) corrigés (21/07/2026).
ℹDocument de référence opérationnelle pour l'administration du homeserver domotique OBBConnect. Généré automatiquement — toujours à jour.
Section 1
Inventaire des machines
Rôles et adresses IP de chaque équipement
Machine
IP
VLAN
Rôle
homeserver (GMKtec NucBox K8 Plus)
10.10.1.21
VLAN 1 Admin
Mini PC principal · AMD Ryzen 7 8845HS · 32 Go · 1 To · Héberge tous les conteneurs Docker · Refroidissement : dual-fan Hyper Ice Chamber 2.0 (CPU Fan + System Fan) · BIOS Full Speed abaissé à 65°C (10/04/2026)
QNAP TS-435XeU
10.10.1.60
VLAN 1 Admin
NAS — sauvegardes automatiques SMB, serveur NTP primaire (stratum 9, UDP/123), Grafana :3000. TR-004U : Storage Pool 2 (External RAID), Volume VOL_TR004U 21.61 TB, partages FILMS / TV_SHOWS / IPHONE_OBB
Raspberry Pi 4
10.10.1.70
VLAN 1 Admin
Monitoring températures rack — Prometheus + Pushgateway + Node Exporter. Grafana hébergé sur le NAS (10.10.1.60:3000)
UDM-SE
10.10.1.1
VLAN 1 Admin
UniFi Dream Machine SE — routeur/firewall, VLANs, WireGuard
✅Correctif NTP post-renumération réseau (09/06/2026) — la migration 192.168.1.x → 10.10.1.x avait laissé les clients pointés sur l'ancien serveur 192.168.1.60 (mort). Source NTP recentralisée sur le NAS 10.10.1.60. Dérive de −24,4 s sur homeserver résorbée (offset désormais −5,4 ms).
⚠Les ~20 appareils IoT non accessibles en SSH récupèrent la nouvelle config NTP au renouvellement de leur bail DHCP — automatique sous 24 h pour le VLAN IoT (lease 86400 s).
Section 4
Règles UFW — homeserver
Audit sécurité 05/04/2026 · Règles ciblées par port et subnet
✅Audit UFW 05/04/2026 — règles larges ALLOW Anywhere depuis LAN et IoT supprimées. DNS port 53 restreint aux 4 subnets légitimes. Toutes les règles sont maintenant ciblées par port et subnet.
Règle
Action
Source
Commentaire
22/tcp
ALLOW
10.10.1.0/24
SSH — Admin VLAN uniquement
8123/tcp
ALLOW
10.10.1.0/24
Home Assistant — Admin VLAN
8123/tcp
ALLOW
192.168.30.0/24
Home Assistant — IoT VLAN
8123/tcp
ALLOW
172.16.0.0/12
Home Assistant — réseaux Docker
9000/tcp
ALLOW
10.10.1.0/24
Portainer — Admin VLAN
9001/tcp
ALLOW
10.10.1.0/24
Graylog UI — Admin VLAN
5140/tcp+udp
ALLOW
10.10.1.0/24
Graylog Syslog — Admin VLAN
3000/tcp
ALLOW
10.10.1.0/24
AdGuard UI — Admin VLAN
81/tcp
ALLOW
10.10.1.0/24
NPM Admin — Admin VLAN
80/tcp · 443/tcp
ALLOW
Anywhere
NPM HTTP/HTTPS
53/tcp+udp
ALLOW
10.10.1.0/24
AdGuard DNS — Admin VLAN
53/tcp+udp
ALLOW
192.168.30.0/24
AdGuard DNS — IoT VLAN
53/tcp+udp
ALLOW
192.168.2.0/24
AdGuard DNS — WireGuard VPN
53/tcp+udp
ALLOW
172.16.0.0/12
AdGuard DNS — Docker networks
21064
ALLOW
10.10.1.0/24
HomeKit Bridge — Admin VLAN
Anywhere
ALLOW
192.168.2.0/24
WireGuard VPN clients — accès admin complet
8095/tcp
ALLOW
192.168.30.0/24
Music Assistant API — IoT VLAN Sonos
8097/tcp
ALLOW
192.168.30.0/24
Music Assistant Streamserver — IoT VLAN Sonos
8095/tcp
ALLOW
172.19.0.0/16
Music Assistant — NPM Docker
5678/tcp
ALLOW
172.19.0.0/16
n8n — NPM Docker
2375/tcp
ALLOW
172.19.0.0/16
Docker API — n8n
22/tcp
ALLOW
172.19.0.0/16
SSH — n8n Docker network
3001/tcp
ALLOW
10.10.1.0/24
Uptime Kuma — Admin VLAN
Section 5
Accès distant
VPN · Cloudflare Zero Trust · Tunnels SSH · Claude Code
Méthode
Portée
Détails
Usage
SSH direct
Local + VPN
ssh homeserver — ed25519 via 1Password + Touch ID
Administration système, Docker CLI, Claude Code
VS Code Remote SSH
Local + VPN
Extension Remote-SSH → homeserver 10.10.1.21
Claude Code interactif, édition configs, terminal intégré
WireGuard VPN
Distant
vpn.obbconnect.net:51820 — split-tunnel subnets LAN
⚠Toujours fermer le tunnel avec Ctrl+C après utilisation.
WireGuard VPN
Paramètre
Valeur
Domaine
vpn.obbconnect.net (Cloudflare DNS only, TTL 2 min)
Port
51820/UDP
Subnet VPN
192.168.2.0/24 — gateway 192.168.2.1
Clients
OBB24 (192.168.2.2), MacBook Pro OBB (192.168.2.3), CLIENT_NAS_CATH (192.168.2.4)
Split-tunnel
192.168.2.0/24 + 10.10.1.0/24 + 192.168.30.0/24
ℹFix 27/03/2026 : route statique 192.168.2.0/24 ajoutée dans /etc/netplan/50-cloud-init.yaml + règle UFW ALLOW from 192.168.2.0/24. Admin VLAN migré vers 10.10.1.0/24 le 20/05/2026 (le split-tunnel route désormais 10.10.1.0/24, plus 192.168.1.0/24).
Claude Code — Administration IA
ℹClaude Code sur homeserver — Installé (/usr/local/bin/claude, projet ~/claude-obbconnect/). Accès via VS Code Remote SSH ou terminal SSH. Token Anthropic via Vault dans l'environnement. CLAUDE.md avec règles de sécurité opérationnelles. API UniFi UDM-SE via Vault obbconnect/unifi-mcp.
Section 6
Nginx Proxy Manager
Certificat SSL wildcard *.obbconnect.net · Proxy hosts par nom
Paramètre
Valeur
Ports exposés
80 (HTTP), 443 (HTTPS), 81 (interface admin)
Certificat SSL
Wildcard *.obbconnect.net — Let's Encrypt + Cloudflare DNS
Expiration cert.
21 juin 2026 — renouvellement automatique cron 3h15 via Certbot
home.obbconnect.net — nav → /dist/docs.html · /dist/glossaire.html · /dist/network.html
Workflow mise à jour doc
# 1. Modifier le script via Claude Code (VS Code) ou directement
# Les scripts sont dans scripts/generate|glossaire|network/
# 2. Régénérer les HTML
python3 ~/Documents/obbconnect-home/scripts/generate/generate_current.py
python3 ~/Documents/obbconnect-home/scripts/glossaire/glossaire_current.py
python3 ~/Documents/obbconnect-home/scripts/network/network_current.py
# 3. Pousser sur GitHub
cd ~/Documents/obbconnect-home && git add -A && git commit -m '...' && git push origin main
# OU utiliser update-obbdoc (place les scripts versionnés dans ~/Downloads/)
update-obbdoc
⚠Ne jamais éditer dist/ directement. HTML générés par les scripts Python. Images dans assets/images/ — dossier unique.
⚠mDNS ne traverse pas les VLANs — Sonos et appareils similaires nécessitent des IPs fixes dans configuration.yaml HA.
⚠NAT WireGuard disparaît après reset modem — Règle persistée via /data/on_boot.d/10-wireguard-nat.sh avec sleep 10.
⚠Route retour VPN homeserver — La route 192.168.2.0/24 doit être dans /etc/netplan/50-cloud-init.yaml pour survivre aux reboots.
⚠Music Assistant — mode host networking — NPM contacte MA via 172.17.0.1:8095. Ports 8095 et 8097 requis depuis VLAN IoT.
⚠Vault — exposé sur l'IP admin — ⚠ Le port 8200 est désormais publié sur 10.10.1.21:8200 (VLAN Admin), ce qui inverse le durcissement du 05/04/2026 (l'audit avait retiré l'exposition host). Accès aussi via vault.obbconnect.net (NPM) et tunnel SSH. Vérifier que l'exposition sur l'IP admin est bien voulue.
⚠Certificat SSL wildcard — *.obbconnect.net expire le 21 juin 2026 — renouvellement auto cron 3h15 via Certbot.
⚠NPM proxy hosts — noms de conteneurs — Toujours utiliser les noms de conteneurs (ex: vault, adguardhome) — les IPs Docker changent après reboot.
⚠TextEdit corrompt UTF-8 — Toujours utiliser VS Code pour éditer index.html. Jamais TextEdit.
⚠Images dashboard — Toujours copier depuis assets/images/ avant git add. Git compare les hash.
⚠TR-004U — NAS Storage Mode uniquement — Ne jamais reconfigurer en External Storage + Software RAID (mdadm+LVM). QTS ne remonte pas ce type de volume automatiquement au boot. Toujours utiliser NAS Storage Mode natif (Storage Pool 2).
⚠GMKtec — ventilateurs non visibles par Linux — Contrôle propriétaire BIOS. Linux ne lit pas les RPM (cat /sys/class/hwmon/hwmon*/fan*_input → vide). Normal. BIOS modifié : Full Speed 85°C → 65°C (10/04/2026). Dual-fan Hyper Ice Chamber 2.0 : CPU Fan (sous carte mère) + System Fan (sous couvercle transparent). CPU sous stress ≤ 48°C.
⚠Vault — image épinglée à 1.21.4 — Ne jamais utiliser hashicorp/vault:latest — incompatible avec le kernel Ubuntu (CAP_SETFCAP bloqué). Toujours épingler une version explicite (actuellement 1.21.4).
⚠Structure Docker normalisée — Tous les services dans /opt/docker/[service]/docker-compose.yml. /home/homeadmin/docker/ supprimé le 05/04/2026.
⚠Claude Code — actions write — Toute modification UniFi/Docker/Vault/config production nécessite confirmation explicite avant exécution. Claude Code tourne sur homeserver (/usr/local/bin/claude v2.1.x, projet ~/claude-obbconnect). Token Anthropic via Vault obbconnect/ai/anthropic.
⚠Vault CLI sur homeserver — Le CLI vault natif est installé sur le host. Le serveur écoute sur 10.10.1.21:8200 (port publié sur l'IP admin — 127.0.0.1:8200 ne répond pas). Usage : export VAULT_ADDR=http://10.10.1.21:8200 puis vault kv list obbconnect (token dans ~/.vault-token). Alternative dans le conteneur : docker exec -e VAULT_ADDR=http://127.0.0.1:8200 vault vault [commande].
⚠Admin VLAN migré 20/05/2026 — Subnet Admin migré de 192.168.1.0/24 vers 10.10.1.0/24 pour résoudre un conflit WireGuard VPN. SSH config Mac, split-tunnel WireGuard, Apple TV et Grafana pointent désormais tous en 10.10.1.x.
⚠NTP — pointer sur 10.10.1.60, jamais 192.168.1.60 — La renumération réseau 192.168.1.x → 10.10.1.x a tué l'ancien serveur de temps 192.168.1.60. Source NTP unique : NAS 10.10.1.60 (stratum 9). Vérifier les clients : timedatectl show -p NTP -p NTPSynchronized + timedatectl timesync-status. Côté UniFi : NTP Server DHCP = 10.10.1.60 sur Default/IoT/Apt.
Section 14
Checklist de santé système
Vérifications rapides après maintenance ou reboot
homeserver (10.10.1.21)
✓
Docker actif — sudo systemctl status docker
✓
Tous conteneurs UP — docker ps --format 'table {{.Names}}\t{{.Status}}'
✓
Home Assistant — curl -s -o /dev/null -w '%{http_code}' https://ha.obbconnect.net
✓
AdGuard DNS test — dig @10.10.1.21 google.com +short
✓
Route VPN homeserver — ip route show | grep 192.168.2
✓
DDNS résolution — dig vpn.obbconnect.net +short → IP WAN Bell
/opt/maintenance-agent/ — dépôt git local, pas de remote distant
Compte de service
svc-maintenance (uid 996) — sudoers en allowlist stricte de commandes exactes, jamais ALL
Horaire
Timer systemd night-maintenance.timer — 04:15 America/Montreal, après la fenêtre des sauvegardes/certbot/cron existants
Mode par défaut
dry-run — le passage en --live se fait allowlist par allowlist, après validation manuelle d'un run réel
Notification
Workflow n8n dédié (maintNocturneOBB1) → Telegram. Fallback : rapport écrit en local si n8n injoignable
Politique d'autonomie
Contrôle
Politique
Diagnostic approfondi
Toujours autorisé, strictement lecture seule (logs, code de sortie, OOMKilled, nombre de redémarrages) — même sur mongodb/opensearch/vault
Restart simple
Autorisé automatiquement sur l'allowlist Tier 1 uniquement — jamais bases de données, jamais Vault (unseal manuel requis)
Réparation bornée
Recréer depuis un docker-compose.yml inchangé, ou revenir à la dernière image fonctionnelle connue — jamais modifier config/volume/données
Reboot complet
Exceptionnel : conditions strictes, jamais plus d'1/24h, jamais si backup/transfert actif, notification systématique
Jamais automatique
Secrets/comptes, réseau/DNS/pare-feu/Cloudflare/NPM, mises à jour paquets/kernel, Home Assistant, toute commande root arbitraire décidée librement par le modèle
Phases du projet
Phase
Contenu
État
1
Audit lecture seule de l'infrastructure existante
Terminé
2
Création des fichiers du projet (script, allowlist, systemd, sudoers, workflow n8n)
Terminé
3-4
Durcissement + installation (compte de service, sudoers, unités systemd dans /etc)
Terminé
5
Validation en conditions réelles (--live) sur un conteneur non critique — uptime-kuma
Terminé
6
Notification Telegram via n8n active, timer nocturne activé (04:15)
Terminé
7
Politique de reboot complet — brief finalisé, pas encore déployé sur le homeserver
À venir
⚠Transition en cours : le cron historique 30 3 * * * docker restart music-assistant est conservé temporairement comme filet de sécurité pendant que l'agent bascule en --live sur ce conteneur. À retirer après 2-3 nuits d'observation concluantes.