Add unattended host recovery safeguards
This commit is contained in:
1 parent
2eb99c643c
commit
ce5bbc2e69
6 files changed
+112
-1
No files matched your search
@@ -74,6 +74,7 @@ Option „Bewegung reduzieren“ erhalten automatisch eine unbewegte Variante.
|
|||||||
- [Zielarchitektur und Sicherheitsgrenzen](docs/ARCHITECTURE.md)
|
- [Zielarchitektur und Sicherheitsgrenzen](docs/ARCHITECTURE.md)
|
||||||
- [Installation und Abnahme](docs/INSTALLATION.md)
|
- [Installation und Abnahme](docs/INSTALLATION.md)
|
||||||
- [WireGuard-Heimseite](docs/WIREGUARD_HOME_PEER.md)
|
- [WireGuard-Heimseite](docs/WIREGUARD_HOME_PEER.md)
|
||||||
|
- [Checkliste für den unbeaufsichtigten Standort](docs/REMOTE_SITE_CHECKLIST.md)
|
||||||
- [Betrieb und Profilwechsel](docs/OPERATIONS.md)
|
- [Betrieb und Profilwechsel](docs/OPERATIONS.md)
|
||||||
- [Sicherheitsmodell](docs/SECURITY.md)
|
- [Sicherheitsmodell](docs/SECURITY.md)
|
||||||
- [Disaster Recovery](docs/DISASTER_RECOVERY.md)
|
- [Disaster Recovery](docs/DISASTER_RECOVERY.md)
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ SECONDARY_GPU_DEVICES=1
|
|||||||
IMAGE_GPU_DEVICES=0
|
IMAGE_GPU_DEVICES=0
|
||||||
FLUX_MODEL_DIR=/data/models/FLUX.2-klein-4B
|
FLUX_MODEL_DIR=/data/models/FLUX.2-klein-4B
|
||||||
|
|
||||||
|
# Headless remote recovery. The ASUS UEFI settings documented in
|
||||||
|
# docs/REMOTE_SITE_CHECKLIST.md are additionally required.
|
||||||
|
ENABLE_HARDWARE_WATCHDOG=true
|
||||||
|
WAKE_ON_LAN_INTERFACE=enp7s0
|
||||||
|
|
||||||
# WireGuard client. The home peer must route 10.77.0.2/32 back to this host.
|
# WireGuard client. The home peer must route 10.77.0.2/32 back to this host.
|
||||||
WIREGUARD_ENABLE=true
|
WIREGUARD_ENABLE=true
|
||||||
WG_INTERFACE=wg0
|
WG_INTERFACE=wg0
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
# Checkliste für einen unbeaufsichtigten Standort
|
||||||
|
|
||||||
|
Athena wird ohne lokales KVM betrieben. Vor dem Transport müssen Betriebssystem,
|
||||||
|
UEFI und Heimtunnel gemeinsam geprüft werden. Keine einzelne Maßnahme ersetzt die
|
||||||
|
anderen.
|
||||||
|
|
||||||
|
## UEFI des ASUS PRIME B550-PLUS
|
||||||
|
|
||||||
|
Im UEFI mit `F7` in den Advanced Mode wechseln und unter
|
||||||
|
`Advanced > APM Configuration` setzen:
|
||||||
|
|
||||||
|
- `Restore AC Power Loss`: **Power On**
|
||||||
|
- `Power On By PCI-E`: **Enabled**
|
||||||
|
- `ErP Ready`: **Disabled** (sonst kann Wake-on-LAN abgeschaltet werden)
|
||||||
|
|
||||||
|
Empfohlen ist zusätzlich ein kontrollierbarer Zwischenstecker. Nach einem
|
||||||
|
erzwungenen Aus- und Wiedereinschalten der Netzspannung startet Athena durch
|
||||||
|
`Restore AC Power Loss = Power On` selbständig. Der Zwischenstecker darf nicht
|
||||||
|
für normale Neustarts verwendet werden.
|
||||||
|
|
||||||
|
## Debian
|
||||||
|
|
||||||
|
Der Installer aktiviert standardmäßig den vorhandenen SP5100-Hardware-Watchdog
|
||||||
|
mit 60 Sekunden und konfiguriert Wake-on-LAN für das in
|
||||||
|
`WAKE_ON_LAN_INTERFACE` genannte Interface. SSH und Docker müssen aktiviert sein.
|
||||||
|
|
||||||
|
Vor dem Transport prüfen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl is-enabled ssh docker wg-quick@wg0
|
||||||
|
systemctl is-active ssh docker wg-quick@wg0
|
||||||
|
ethtool enp7s0 | grep Wake-on
|
||||||
|
systemctl show -p RuntimeWatchdogUSec
|
||||||
|
wg show
|
||||||
|
```
|
||||||
|
|
||||||
|
Erwartet werden `enabled`, `active`, `Wake-on: g`, ein Watchdog-Wert von einer
|
||||||
|
Minute sowie ein aktueller WireGuard-Handshake.
|
||||||
|
|
||||||
|
## Netzwerk und VPN
|
||||||
|
|
||||||
|
- Der physische Anschluss bezieht seine Adresse per DHCP; im Standortnetz muss
|
||||||
|
dafür eine Freigabe bzw. Registrierung existieren.
|
||||||
|
- Der WireGuard-Tunnel muss **vor dem Transport** erfolgreich aufgebaut und von
|
||||||
|
zuhause erreichbar getestet sein.
|
||||||
|
- Für WireGuard braucht Athena keine eingehende Portfreigabe am Standort: Der
|
||||||
|
Host baut den Tunnel mit `PersistentKeepalive = 25` nach Hause auf.
|
||||||
|
- Wake-on-LAN funktioniert über Stadtgrenzen nur, wenn ein Gerät im Standortnetz
|
||||||
|
das Magic Packet senden darf. Der robuste Notweg ist deshalb der steuerbare
|
||||||
|
Zwischenstecker plus `Restore AC Power Loss = Power On`.
|
||||||
|
- SSH über das Standortnetz erst dann einschränken, wenn der VPN-Notweg nach einem
|
||||||
|
echten Neustart nachweislich funktioniert.
|
||||||
|
|
||||||
|
## Pflichtproben vor Abfahrt
|
||||||
|
|
||||||
|
1. Normaler Neustart: VPN, SSH, Docker, Open WebUI und Medium-Profil kommen zurück.
|
||||||
|
2. Rechner sauber herunterfahren und per Wake-on-LAN einschalten.
|
||||||
|
3. Netzspannung bei laufendem Rechner trennen, 30 Sekunden warten, wieder
|
||||||
|
einschalten: Athena bootet automatisch vollständig hoch.
|
||||||
|
4. WireGuard aus- und wieder einschalten und Fail-closed-Routing prüfen.
|
||||||
|
5. Von zuhause aus ausschließlich über die spätere VPN-Adresse zugreifen.
|
||||||
|
|
||||||
|
Ohne erfolgreich getesteten WireGuard-Tunnel und die UEFI-Stromoptionen gilt der
|
||||||
|
Host nicht als bereit für einen unbeaufsichtigten Standort.
|
||||||
+35
-1
@@ -64,7 +64,40 @@ install_base_packages() {
|
|||||||
apt-get update
|
apt-get update
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||||
ca-certificates curl git gnupg jq openssl wireguard-tools iptables \
|
ca-certificates curl git gnupg jq openssl wireguard-tools iptables \
|
||||||
iproute2 pciutils rsync unattended-upgrades
|
iproute2 pciutils rsync unattended-upgrades ethtool
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_remote_recovery() {
|
||||||
|
log "Remote-Recovery (Hardware-Watchdog und Wake-on-LAN) konfigurieren"
|
||||||
|
|
||||||
|
if [[ ${ENABLE_HARDWARE_WATCHDOG:-true} == true ]]; then
|
||||||
|
[[ -e /dev/watchdog0 || -e /dev/watchdog ]] || \
|
||||||
|
die "Hardware-Watchdog angefordert, aber kein Watchdog-Gerät vorhanden."
|
||||||
|
install -d -m 0755 /etc/systemd/system.conf.d
|
||||||
|
cat >/etc/systemd/system.conf.d/90-mike-ai-watchdog.conf <<'EOF'
|
||||||
|
[Manager]
|
||||||
|
# PID 1 feeds the hardware watchdog. If the kernel or userspace freezes long
|
||||||
|
# enough that it cannot be fed, the firmware resets the machine.
|
||||||
|
RuntimeWatchdogSec=60s
|
||||||
|
RebootWatchdogSec=10min
|
||||||
|
KExecWatchdogSec=10min
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reexec
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n ${WAKE_ON_LAN_INTERFACE:-} ]]; then
|
||||||
|
ip link show "$WAKE_ON_LAN_INTERFACE" >/dev/null 2>&1 || \
|
||||||
|
die "Wake-on-LAN-Interface existiert nicht: $WAKE_ON_LAN_INTERFACE"
|
||||||
|
ethtool "$WAKE_ON_LAN_INTERFACE" | grep -q 'Supports Wake-on:.*g' || \
|
||||||
|
die "Das Interface unterstützt kein Wake-on-LAN per Magic Packet."
|
||||||
|
cat >/etc/network/if-up.d/mike-ai-wol <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
[ "\${IFACE:-}" = "$WAKE_ON_LAN_INTERFACE" ] || exit 0
|
||||||
|
/usr/sbin/ethtool -s "$WAKE_ON_LAN_INTERFACE" wol g
|
||||||
|
EOF
|
||||||
|
chmod 0755 /etc/network/if-up.d/mike-ai-wol
|
||||||
|
ethtool -s "$WAKE_ON_LAN_INTERFACE" wol g
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
install_docker() {
|
install_docker() {
|
||||||
@@ -393,6 +426,7 @@ PY
|
|||||||
|
|
||||||
hostnamectl set-hostname "$AI_HOSTNAME"
|
hostnamectl set-hostname "$AI_HOSTNAME"
|
||||||
install_base_packages
|
install_base_packages
|
||||||
|
setup_remote_recovery
|
||||||
install_docker
|
install_docker
|
||||||
install_nvidia
|
install_nvidia
|
||||||
setup_wireguard
|
setup_wireguard
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
[Manager]
|
||||||
|
RuntimeWatchdogSec=60s
|
||||||
|
RebootWatchdogSec=10min
|
||||||
|
KExecWatchdogSec=10min
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
[ "${IFACE:-}" = "enp7s0" ] || exit 0
|
||||||
|
/usr/sbin/ethtool -s enp7s0 wol g
|
||||||
Reference in new issue
Block a user