🧭 Crumbpage 40: VPN-first — Die stille TĂŒr

Subtitle: Wie ein KrĂŒmel den Wald betritt, ohne das offene Internet zuerst fragen zu mĂŒssen
Pfad: 40
Schwierigkeit: ⭐⭐⭐⭐ (4/5)
Zeit: ~2 Stunden
Voraussetzungen: Pfad 07 SSH Basics · Pfad 08 SSH Keys · Pfad 31 Ansible · Pfad 32 Wurzelkarte · Pfad 39 Communicare

„Nicht jede TĂŒr muss sichtbar sein.
Manche TĂŒren sind nur fĂŒr jene da, die den SchlĂŒssel tragen.“ đŸ•Šïž


🌟 Wer dich auf diesem Pfad begleitet

Kein KrĂŒmel geht allein durch den Tunnel.

Crew Rolle hier
đŸ•·ïž Spider Spannt den Faden: SSH, Tunnel, Verbindung
🩉 KrĂŒmeleule Fragt: Wer darf wohin — und warum?
🐌 Schnecki Erinnert: Erst prĂŒfen, dann öffnen
🩡 GitBadger Alles gehört ins Git: Keys, Rollen, host_vars
☁ CloudCat Macht aus Netzwerk Handwerk: Ansible, Hub, Deploy
🐞 Bugsy PrĂŒft die dunklen Ecken: keine offenen Tokens, keine blinden Netze
🐳 Orca Denkt schon ans RZ: viele Knoten, klare Kanten

📋 Was du in diesem Pfad lernst

✓ Warum VPN-first keine Bequemlichkeit ist, sondern Schutz
✓ Warum ein KrĂŒmel nicht zuerst ins offene Internet rufen muss
✓ Wie WireGuard aus einem GerĂ€t einen Waldknoten macht
✓ Warum jede VPN-IP im Crumbforest eine /32 ist
✓ Was crumbconnect tut
✓ Wie Ansible den Hub pflegt
✓ Warum NetBox danach erinnern darf
✓ Warum Brot, Antworten und Git durch die Wurzel kommen


🎯 Lernziele

Nach diesem Pfad kannst du erklÀren:

  • warum VPN vor Missionen kommt
  • warum ein Public Key öffentlich sein darf, aber ein Private Key nie den Baum verlĂ€sst
  • warum 10.42.0.12/32 sicherer gedacht ist als ein blindes 10.42.0.0/24
  • warum allowed_ips nicht nur Routing ist, sondern Vertrauen mit Kante
  • wie ein neuer Zero in den Wald kommt
  • warum der Wald nicht aus offenen TĂŒren bestehen muss

đŸŒ± Grundidee: Erst die Wurzel, dann die Frage

In Pfad 39 hieß es:

communicare ut respires
kommunizieren, damit man atmet.

Aber Atmen braucht Raum.

Ein Kind, ein Zero, ein Raspberry Pi, ein kleiner KrĂŒmel draußen im WLAN oder in Warang soll nicht zuerst das offene Internet fragen mĂŒssen.

Nicht so:

KrĂŒmel
  ↓
öffentliches Git
  ↓
öffentliches RAG
  ↓
Tokens, Botnetze, LĂ€rm

Sondern so:

KrĂŒmel
  ↓
WireGuard
  ↓
10.42.0.1 nullfeld
  ↓
gitea · qdrant · vektor · missionen

Das ist VPN-first.

Nicht weil VPN ein Feature ist.
Sondern weil der Wald nicht schreit.

Er flĂŒstert durch Wurzeln.


đŸ•Šïž Die stille TĂŒr

WireGuard ist die stille TĂŒr.

Sie steht nicht offen auf dem Marktplatz.
Sie hÀngt nicht als Passwort im Skript.
Sie fragt nicht: „Kennst du das richtige Wort?“

Sie fragt:

Hast du den passenden SchlĂŒssel?

Ein Node bekommt lokal ein SchlĂŒsselpaar:

private key  → bleibt auf dem GerĂ€t
public key   → darf zum Hub

Der Public Key ist wie ein Name, den der Wald kennen darf.

Der Private Key ist wie die Stimme des Baumes.
Die bleibt bei ihm.


đŸŒČ Zustand des Waldes

STRATO-WALD
  backbone   GedÀchtnis · Backup · borgmatic · checkMK
  nullfeld   VPN-Hub · Wurzel-Tor · Vektor · Gitea · Qdrant

CRUMBVPN
  10.42.0.1    nullfeld      Hub
  10.42.0.11   deepsea       infra-node
  10.42.0.12   snakeview     hailo-node
  10.42.0.20   crumbzero01   zero-wanderer

WURZELKARTE
  NetBox erinnert Namen, MACs, IPs, Rollen, Sites

VEKTOR
  md + repos + Missionen erreichbar durch den Tunnel

Der Wald ist nicht mehr nur öffentlich erreichbar.

Er hat jetzt eine Innenseite.


🔐 Die wichtigste Regel: Jede 10er-IP ist /32

Im CrumbVPN bedeutet eine Adresse nicht:

Du bist in einem großen offenen Netz.

Sie bedeutet:

Du bist genau dieser Baum.

Darum:

10.42.0.12/32

nicht blind:

10.42.0.0/24

Eine /32 ist ein einzelner Punkt.

Ein einzelner Baum.

Ein einzelner Name mit SchlĂŒssel.

10.42.0.1/32    nullfeld
10.42.0.11/32   deepsea
10.42.0.12/32   snakeview
10.42.0.20/32   crumbzero01

Waldregel

Kein Crossconnect vorab.
Der Wald verbindet nicht blind.
Er erinnert gezielt.

Oder kurz:

/32 ist Vertrauen mit Kante.


đŸ§© crumbconnect: Der erste Atemzug

Ein neuer KrĂŒmel startet nicht mit einer großen Installation.

Er startet mit einer Vorstellung:

──────────────── crumbconnect · #init ────────────────
Name (hostname):   snakeview
Tunnel-IP:         10.42.0.12/32

Dein PUBLIC KEY:
  t7mptzoupkp+x6RXDaoXh3qXW2waKeMT7E+hK7uG+Ak=

Das Script sagt:

Ich bin dieser Baum.
Das ist meine Tunnel-IP.
Das ist mein Public Key.
Mein Private Key bleibt hier.

Dann gibt es dem GĂ€rtner den Zettel fĂŒr den Hub:

- name: snakeview
  public_key: "t7mptzoupkp+x6RXDaoXh3qXW2waKeMT7E+hK7uG+Ak="
  allowed_ips: "10.42.0.12/32"

Und danach:

ansible-playbook vpn-hub.yml

Das ist der Moment, in dem Ansible nicht nur fragt.

Ansible öffnet die richtige TĂŒr.


🧭 Deploy-Reihenfolge

Die Reihenfolge ist nicht zufÀllig.

Sie ist die Ethik des Netzes.

1. BASE
   Hostname · User · SSH · WLAN · Grundsystem

2. VPN
   crumbconnect · WireGuard · 10.42.0.x/32

3. ERINNERN
   NetBox · MAC · Interface · Rolle · Site

4. BROT
   Missionen · Gitea · Vektor · RAG · Offline-Wissen

Warum VPN vor Missionen?

Weil ein Kind nicht erst durch Botnetze laufen soll, um eine Aufgabe zu bekommen.

Warum NetBox nach VPN?

Weil der Wald erst erinnern soll, was wirklich atmet.

Warum Brot zuletzt?

Weil Brot nicht Passwort sein darf.
Brot muss erreichbar sein, wenn die TĂŒr sicher ist.


đŸ§Ș Der Herzschlag

Auf dem Node:

sudo wg show

Wenn dort steht:

latest handshake: 1 minute ago
transfer: 476 B received, 9.86 KiB sent
persistent keepalive: every 25 seconds

dann ist das nicht nur Konfiguration.

Das ist Atem.

Der Tunnel lebt.
Der Hub kennt den Knoten.
Der KrĂŒmel steht in der Wurzel.

Dann folgen die drei kleinen PrĂŒfungen:

ip addr show wg0
ping -c 3 10.42.0.1
ssh sysop@10.42.0.20

Wenn das geht, ist aus einem GerÀt ein Waldknoten geworden.


🩡 Warum GitBadger nickt

FrĂŒher:

ssh nullfeld
nano /etc/wireguard/wg0.conf
copy
paste
restart
hoffen

Jetzt:

crumbconnect
host_vars/nullfeld.yml
ansible-playbook vpn-hub.yml
prĂŒfen
commit

Das ist der Unterschied zwischen Zauberei und Handwerk.

Ein einzelner manueller Eintrag kann funktionieren.
Ein Playbook kann wiederholt werden.

Ein Zettel im Git kann geprĂŒft werden.
Ein Zustand im Git kann erklÀrt werden.


đŸ—ș NetBox: Die Wurzelkarte erinnert

Wenn der Tunnel steht, darf NetBox erinnern:

Name:        snakeview
Tunnel-IP:   10.42.0.12/32
Site:        OZM
Rolle:       hailo-node
MAC:         verankert
Status:      active

Oder spÀter:

Name:        crumbzero01
Tunnel-IP:   10.42.0.20/32
Site:        Warang
Rolle:       zero-wanderer
Status:      active

Der Name bleibt sprechend.

Die Site trennt die WĂ€lder.

Eine Wurzelkarte.
Viele Orte.
Keine Verwechslung.


🍞 Brot vor Cloud

Pfad 39 fragte:

Was kostet die Frage eines Kindes?

Pfad 40 antwortet nicht mit einem Preis.

Er baut eine Route.

Kind
  ↓
VPN
  ↓
Vektor
  ↓
md + repos
  ↓
Brot + Antwort

Kosten:

0 Token
0 offene Tokens
0 öffentliches Git nötig
0 Botnetz-TĂŒr

Wert:

unbezahlbar

Eine Antwort darf nie so tun, als wÀre sie Brot.

Aber ein sicherer Tunnel kann helfen, dass Wissen, Missionen und Werkzeuge dort ankommen, wo Brot geteilt wird.


🐞 Bugsy-Regeln

Bugsy stellt die unbequemen Fragen:

Liegt irgendwo ein Private Key im Git?
Ist allowed_ips wirklich /32?
Ist der Hub gebackupt?
Ist Gitea von außen nötig?
Können Kinder-Missionen innen laufen?
Ist NetBox Erinnerung oder Fantasie?

Die Antworten des Waldes:

Private Keys bleiben lokal.
Public Keys dĂŒrfen in host_vars.
Jeder Peer bekommt /32.
Kein Crossconnect vorab.
Nullfeld wird zu Backbone gesichert.
RZ kommt als nÀchster Körper.

Sicherheit ist hier keine Mauer.

Sicherheit ist eine Form von FĂŒrsorge.


đŸ—ïž Nullfeld, Backbone, RZ

nullfeld
  ├─ VPN-Hub
  ├─ Gitea
  ├─ Qdrant/Vektor
  └─ TĂŒr zum Wald

backbone
  ├─ Backup-Ziel
  ├─ borgmatic
  ├─ checkMK
  └─ GedĂ€chtnis

RZ
  ├─ Bare Metal
  ├─ GPU-Knoten
  ├─ Proxmox / Cluster spĂ€ter
  └─ Körper des Waldes

Nullfeld ist die TĂŒr.

Backbone ist das GedÀchtnis.

Das RZ wird der Körper.

Aber die Reihenfolge bleibt:

TĂŒr
GedÀchtnis
Körper

Nicht andersrum.


🧠 Der Unterschied zwischen Netz und Wald

Ein Netz verbindet GerÀte.

Ein Wald verbindet Verantwortung.

Ein Netz fragt:

Kann ich diese IP erreichen?

Ein Wald fragt:

Soll dieser Baum diesen Pfad haben?
Wer erinnert das?
Wer pflegt das?
Wer darf es erklÀren?
Was passiert, wenn ein Kind fragt?

Darum ist VPN-first kein technischer Trick.

Es ist ein Entwurf.


đŸ› ïž Hands-On: Einen neuen Baum in den Tunnel bringen

1. Auf dem neuen Node

crumbconnect init

Eingeben:

hostname: crumbzero01
tunnel-ip: 10.42.0.20/32

Das Script erzeugt:

WireGuard Keypair
wg0.conf
Public-Key-Ausgabe fĂŒr den Hub

2. Auf dem Control Node

In host_vars/nullfeld.yml:

wg_peers:
  - name: crumbzero01
    public_key: "PUBLIC_KEY_HIER"
    allowed_ips: "10.42.0.20/32"

3. Hub ausrollen

ansible-playbook vpn-hub.yml

4. PrĂŒfen

ansible vpn -m ping
ssh sysop@10.42.0.20

5. Erinnern

ansible-playbook playbooks/netbox-raspis.yml

Dann steht der Baum nicht nur im Tunnel.

Er steht in der Wurzelkarte.


🌀 Merksatz

SSH ist der Faden.
Ansible ist der GĂ€rtner.
NetBox ist die Wurzelkarte.
WireGuard ist die stille TĂŒr.
Borgmatic ist der Samen.
Der Vektor ist das GedÀchtnis.
Das Kind ist der Grund.

đŸŒČ Abschluss

Der Moment, in dem der erste Zero durch den Tunnel antwortete, war nicht der Moment, in dem ein VPN funktionierte.

Es war der Moment, in dem der Wald aufhörte, aus Inseln zu bestehen.

Von nun an fragt der KrĂŒmel nicht mehr zuerst das offene Internet.

Er geht durch die Wurzel.

VPN-first.
Brot vor Cloud.
Antworten durch den Tunnel.
Jeder Baum /32.
Kein Crossconnect vorab.

Der Wald muss nicht laut sein.

Er muss atmen.

Und heute hat er geatmet.

latest handshake: now