Document pve-test's wifi-primary network and add Claude node guardrails

pve-test was briefly clustered with pve1 then deliberately de-clustered
so it could move to wifi-primary networking (4addr bridge mode, bonded
with a wired LAN backup) - a change not achievable while clustered given
corosync's latency requirements. Captures that as a reproducible script
plus docs: cluster separation procedure, the wifi network design and the
live-cutover pitfalls hit along the way, and node-role/history context.

Also adds CLAUDE.md guardrails for pve1 (production) vs pve-test
(sandbox) - this repo had none before, despite scripts here being able
to make real changes to both.

Separately: both nodes' mgmt firewalls were dropping ICMP by default
(TCP 22/8006 only), which looked like an outage mid-troubleshooting even
though SSH/web UI were fine. Added an explicit ping-allow rule to the
firewall template, applied it live on both nodes, and added an audit.sh
check so it stays enforced.
This commit is contained in:
2026-07-21 21:20:27 +00:00
parent 8c5b76cb15
commit ba73420350
10 changed files with 553 additions and 5 deletions
+17
View File
@@ -54,6 +54,23 @@ Default-deny at datacenter/node level, whitelist only what's needed (see
`config/pve-firewall/cluster.fw.example`, applied by
`scripts/deploy-firewall.sh`.
**ICMP echo (ping) is explicitly allowed from the management network**,
alongside SSH/8006 — not required for anything to function, but without
it `policy_in: DROP` silently eats ping while SSH/web UI keep working.
That split (ping dead, everything else fine) reads exactly like a real
outage mid-troubleshooting; see `06-pve-test-wifi-network.md` for a case
this caused genuine confusion after a network change. If you ever debug
"can't ping but can SSH", check this firewall before assuming the
network itself is broken.
**This file is cluster-wide, not per-node**: `cluster.fw` lives in
`/etc/pve/firewall/` — shared via pmxcfs across every node in a cluster.
A node that joins a cluster inherits whatever's already there, and (per
`docs/05-node-roles.md`) keeps its own local copy after leaving. Don't
assume a node's firewall state matches what `deploy-firewall.sh` was
last run with directly against it — check `pve-firewall status` /
`/etc/pve/firewall/cluster.fw` on the actual node.
## Repos and updates
Fresh installs point at the enterprise repo, which fails on `apt update`