Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| dienste:bytecluster0002 [26.07.2020 16:14] – Forwarding mape2k | dienste:bytecluster0002 [02.12.2023 21:36] (aktuell) – mape2k | ||
|---|---|---|---|
| Zeile 3: | Zeile 3: | ||
| bytecluster0002 ist ein Virtualisierungsserver, | bytecluster0002 ist ein Virtualisierungsserver, | ||
| Er löst [[bytecluster0001]] ab. | Er löst [[bytecluster0001]] ab. | ||
| + | |||
| + | ====== Virtuelle Hardware ====== | ||
| + | |||
| + | * 4 Kerne | ||
| + | * 16 GB RAM | ||
| + | * Volumes | ||
| + | * 160 GB / // | ||
| + | * 100 GB /mnt/data // | ||
| + | |||
| + | ====== Migration ====== | ||
| + | |||
| + | * mehr zur Migration unter [[dienste: | ||
| + | |||
| + | ====== Festlegungen (Diskussionsgrundlage) ====== | ||
| + | |||
| + | * Kein produktiver Container ohne Dokumentation. | ||
| + | * Der erste Schritt beim Installieren und Testen ist immer einer leere Dokumentation. | ||
| + | * Container ohne Dokumentation werden ohne Rückfrage heruntergefahren und bei Kapazitätsengpässen entfernt. | ||
| + | * Spiel- und Testcontainer sind eindeutig im Namen gekennzeichnet. | ||
| + | * Mit Resourcen (Disk/RAM) wird verantwortungsvoll umgegangen - Upscaling geht später immer. | ||
| + | |||
| + | ====== Container ====== | ||
| + | |||
| + | * siehe [[dienste: | ||
| ====== Administratoren ====== | ====== Administratoren ====== | ||
| Zeile 10: | Zeile 34: | ||
| * [[user: | * [[user: | ||
| * [[user: | * [[user: | ||
| - | |||
| - | ====== ToDo ====== | ||
| - | |||
| - | * Container-Image vorbereiten (Anpassungen Betriebssystem) und ggf. SSH-Logins? | ||
| - | * Traefik-Container | ||
| ====== IPs /DNS ====== | ====== IPs /DNS ====== | ||
| Zeile 23: | Zeile 42: | ||
| ===== intern ===== | ===== intern ===== | ||
| + | |||
| + | * Vergabe siehe [[dienste: | ||
| * Netzwerk für Internetzugang und Traefik | * Netzwerk für Internetzugang und Traefik | ||
| * 10.2.0.254/ | * 10.2.0.254/ | ||
| * fd00: | * fd00: | ||
| + | |||
| + | * Netzwerk für Datenbankserver und -clients | ||
| + | * 10.3.0.0/24 | ||
| + | * fd00: | ||
| + | * IPs liegen am Host nicht an | ||
| ====== Betrieb ====== | ====== Betrieb ====== | ||
| Zeile 62: | Zeile 88: | ||
| ===== Betriebssystem ===== | ===== Betriebssystem ===== | ||
| - | * Debian | + | * Debian |
| ==== Vorkonfiguration ===== | ==== Vorkonfiguration ===== | ||
| Zeile 71: | Zeile 97: | ||
| ==== Grundeinrichtung ==== | ==== Grundeinrichtung ==== | ||
| + | ====== Migration ====== | ||
| - System aktualisieren | - System aktualisieren | ||
| Zeile 79: | Zeile 106: | ||
| * mc (Dateimanager) | * mc (Dateimanager) | ||
| * debian-goodies (Debian-Systemtools) | * debian-goodies (Debian-Systemtools) | ||
| + | * needrestart (Prüfung von Diensteneustarts nach Update) | ||
| * net-tools (Netzwerktools) | * net-tools (Netzwerktools) | ||
| - | * **apt-get install vim mc debian-goodies net-tools** | + | * **apt-get install vim mc debian-goodies |
| - Suche in der Konsole mit Bild-ab/ | - Suche in der Konsole mit Bild-ab/ | ||
| ... | ... | ||
| Zeile 91: | Zeile 119: | ||
| ==== Absicherung ==== | ==== Absicherung ==== | ||
| - | - NFS / rpcbind deaktivieren (wird nicht benötigt, offene Ports schließen) | + | - NFS / rpcbind deaktivieren |
| - | * **systemctl | + | * **< |
| - | * **systemctl disable | + | |
| - sudo installieren und konfigurieren | - sudo installieren und konfigurieren | ||
| * **apt-get install sudo** | * **apt-get install sudo** | ||
| Zeile 102: | Zeile 129: | ||
| - SSH - Login als root und mit Passwort deaktivieren | - SSH - Login als root und mit Passwort deaktivieren | ||
| * Vorher mindestens einen Benutzer einrichten, der einen SSH-Schlüssel hinterlegt hat! | * Vorher mindestens einen Benutzer einrichten, der einen SSH-Schlüssel hinterlegt hat! | ||
| - | - Konfiguration anpassen< | + | - Konfiguration anpassen< |
| - | ... | + | |
| PermitRootLogin no | PermitRootLogin no | ||
| - | ... | ||
| PasswordAuthentication no | PasswordAuthentication no | ||
| - | ... | + | KbdInteractiveAuthentication |
| - | ChallengeResponseAuthentication | + | |
| - | ... | + | |
| </ | </ | ||
| - SSH-Daemon neustarten | - SSH-Daemon neustarten | ||
| Zeile 152: | Zeile 175: | ||
| * Aktuelle Regeln nicht speichern | * Aktuelle Regeln nicht speichern | ||
| - NAT (portbasiert) für IPv4 | - NAT (portbasiert) für IPv4 | ||
| - | * **iptables -t nat -A POSTROUTING -o eth0 -s '10.2.0.0/24' | + | * **iptables -t nat -A POSTROUTING -o eth0 -s 10.2.0.0/24 -j MASQUERADE** |
| + | - NAT-Reflection für IPv4 (Zugriff von intern auf externe IP-Adresse für Ports 80/443) | ||
| + | * **< | ||
| + | * **< | ||
| + | * **< | ||
| - NAT (prefixbasiert) für IPv6 | - NAT (prefixbasiert) für IPv6 | ||
| - | * **ip6tables -t nat -A POSTROUTING -o eth0 --to 2a01: | + | * **< |
| - | * **ip6tables -t nat -A PREROUTING -i eth0 -d 2a01: | + | * **< |
| + | - NAT-Reflection für IPv6 (Zugriff von intern auf externe IP-Adresse) | ||
| + | * **< | ||
| - Regeln speichern | - Regeln speichern | ||
| * **netfilter-persistent save** | * **netfilter-persistent save** | ||
| Zeile 168: | Zeile 197: | ||
| </ | </ | ||
| - sysctl-Konfiguration übernehmen | - sysctl-Konfiguration übernehmen | ||
| - | * **sysctl --system -a** | + | * **< |
| + | ==== Eingerichtete Forwards ==== | ||
| + | |||
| + | * Port 80/443 für Container [[dienste: | ||
| + | * **iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | * **iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | |||
| + | * NGINX default im web-container< | ||
| + | iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | </ | ||
| + | * Dokuwiki im web-container< | ||
| + | iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | </ | ||
| + | * Nextcloud im nextcloud.test container< | ||
| + | iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | </ | ||
| + | * Wordpress im wordpress.test container< | ||
| + | iptables -t nat -A PREROUTING -d 138.201.246.25/ | ||
| + | </ | ||
| + | |||
| ===== Proxmox ===== | ===== Proxmox ===== | ||
| Zeile 262: | Zeile 310: | ||
| </ | </ | ||
| - Domain hinterlegen | - Domain hinterlegen | ||
| - | * **pvenode config set --acme domains=$(hostname --fqdn)** | + | * **< |
| - Erstes Zertifikat intitialisieren | - Erstes Zertifikat intitialisieren | ||
| * **pvenode acme cert order**< | * **pvenode acme cert order**< | ||
| Task OK | Task OK | ||
| </ | </ | ||
| + | |||
| + | ==== SSH-Forward-Hook einrichten ==== | ||
| + | |||
| + | - Skript hinterlegen< | ||
| + | # | ||
| + | # Hook script to automatically forward SSH-Port to Container | ||
| + | |||
| + | VMID=$1 | ||
| + | PHASE=$2 | ||
| + | |||
| + | |||
| + | NETWORK_INTERFACE_EXTERNAL=eth0 | ||
| + | NETWORK_INTERFACE_INTERNAL=vmbr0 | ||
| + | SSH_DESTINATION_PORT=22 | ||
| + | SSH_FORWARD_BASE_PORT=22000 | ||
| + | |||
| + | # Determine container details | ||
| + | IP_ADDRESS_INTERNAL=$(pct config $VMID | grep " | ||
| + | # IP_LAST_OCTET=$(pct config $VMID | grep " | ||
| + | SSH_FORWARD_PORT=$(expr $SSH_FORWARD_BASE_PORT + $VMID) | ||
| + | |||
| + | echo "GUEST HOOK on VMID $VMID for phase $PHASE" | ||
| + | |||
| + | echo " | ||
| + | echo " | ||
| + | |||
| + | case " | ||
| + | |||
| + | # First phase ' | ||
| + | # ist started. Exiting with a code != 0 will abort the start | ||
| + | pre-start) echo "$VMID is starting, doing preparations.\n" | ||
| + | | ||
| + | ;; | ||
| + | |||
| + | # Second phase ' | ||
| + | # successfully started. | ||
| + | post-start) echo "$VMID started successfully.\n" | ||
| + | ;; | ||
| + | |||
| + | # Third phase ' | ||
| + | # via the API. Will not be executed if the guest is stopped from | ||
| + | # within e.g., with a ' | ||
| + | pre-stop) echo "$VMID will be stopped.\n" | ||
| + | ;; | ||
| + | |||
| + | # Last phase ' | ||
| + | # This should even be executed in case the guest crashes or stopped | ||
| + | # unexpectedly. | ||
| + | post-stop) echo "$VMID stopped. Doing cleanup.\n" | ||
| + | | ||
| + | ;; | ||
| + | |||
| + | *) echo "Got unknown phase ' | ||
| + | exit 1 | ||
| + | ;; | ||
| + | esac | ||
| + | </ | ||
| + | - Skript ausführbar machen | ||
| + | * **chmod +x / | ||
| + | |||
| + | ==== Zusätzliches Volume einrichten ==== | ||
| + | |||
| + | - Volume vorbereiten als /mnt/data | ||
| + | - Volume in Proxmox einbinden | ||
| + | * **pvesm add dir data -content rootdir, | ||
| ==== Anpassung des Standard-Templates auf Debian-Basis ==== | ==== Anpassung des Standard-Templates auf Debian-Basis ==== | ||
| Zeile 275: | Zeile 388: | ||
| * **pveam update** | * **pveam update** | ||
| - Verfügbare Images anzeigen | - Verfügbare Images anzeigen | ||
| - | * **pveam available --section system | grep debian**< | + | * **< |
| - | system | + | system |
| - | system | + | - Debian |
| - | - Debian | + | * **pveam download local debian-12-standard_12.2-1_amd64.tar.zst** |
| - | * **pveam download local debian-10.0-standard_10.0-1_amd64.tar.gz** | + | |
| - Template in neuen Ordner entpacken | - Template in neuen Ordner entpacken | ||
| * **mkdir / | * **mkdir / | ||
| * **cd / | * **cd / | ||
| - | * **tar --numeric-owner --extract --verbose --file=/ | + | * **< |
| - In das Template-System wechseln | - In das Template-System wechseln | ||
| * **systemd-nspawn -D / | * **systemd-nspawn -D / | ||
| Zeile 292: | Zeile 404: | ||
| - Template: Konfiguration und Software anpassen | - Template: Konfiguration und Software anpassen | ||
| - APT-Quellen auf Hetzner festlegen | - APT-Quellen auf Hetzner festlegen | ||
| - | * **echo "deb http:// | + | * **< |
| - | * **echo "deb http:// | + | * **< |
| - | * **echo "deb http:// | + | * **< |
| - | * **echo "deb http:// | + | * **< |
| - Alle Änderungen aus Betriebssystem von bytecluster0002 vornehmen | - Alle Änderungen aus Betriebssystem von bytecluster0002 vornehmen | ||
| * Ausnahmen: NFS deaktivieren und SSH neustarten | * Ausnahmen: NFS deaktivieren und SSH neustarten | ||
| Zeile 304: | Zeile 416: | ||
| * **logout** | * **logout** | ||
| - Template packen und temporären Ordner entfernen | - Template packen und temporären Ordner entfernen | ||
| - | * **tar --numeric-owner --create --gzip --verbose --file=/ | + | * **< |
| * **cd** | * **cd** | ||
| - | * **rm --recursive / | + | * **< |
| + | |||
| + | ==== Neuen Container anlegen ==== | ||
| + | === Anmelden bei Proxmox Web-Gui === | ||
| + | - Vorbedingung: | ||
| + | * Auf Console einloggen (via hinterlegtem Public Key) | ||
| + | * **pve_generate_oath** ausführen (als normaler Nutzer) | ||
| + | * Angezeigten QR-Code mit Smartphone scannen und an beliebiges 2FA tool (z.B. Google Auhenticator) weiterleiten | ||
| + | * Wichtig: QR-Code-Anzeige in der Konsole mit **Enter** schliessen | ||
| + | - https:// | ||
| + | * Username + Passwort wie im Linux | ||
| + | * 2FA-Token aus der Smartphone-App | ||
| + | |||
| + | === Container anlegen und konfigurieren === | ||
| + | - **Create CT** Button oben rechts | ||
| + | - **hostname** frei wählen (z.B. ' | ||
| + | - **template** // | ||
| + | - Plattengröße, | ||
| + | - Unter **network** statische IPs vergeben: IPv4: 10.2.0.x/24 Gateway 10.2.0.0 IPv6: fd00: | ||
| + | - Im letzten Tab bestätigen und ggfs. Container sofort starten. | ||
| + | |||
| + | === Automatischen SSH-Forward für Container konfigurieren === | ||
| + | |||
| + | - Per SSH auf dem Host einloggen | ||
| + | - Hook-Skript an Container binden | ||
| + | * **sudo pct set <CT ID> -hookscript local: | ||
| + | - Container ist nach dem (Neu)Start per SSH auf Port 22000 + <CT ID> (z.B. 22149 für Container mit ID 149) direkt erreichbar | ||
| + | |||
| + | === In Container einloggen === | ||
| + | |||
| + | * Vor weiteren Konfigurationen ist der Container nicht von aussen erreichbar, sondern nur über den Host | ||
| + | * Die Benutzer-Accounts des Hosts sind auch im Container angelegt, das Passwort liegt in einer passwort.txt im Home des Benutzers im Container | ||
| + | * Ein Login ist über mittels SSH-Key möglich, die Keys sind in den Containern vorab hinterlegt | ||
| + | * Es empfiehlt sich, SSH Agent forwarding zu nutzen, statt seinen private key auf den Host zu kopieren | ||
| + | < | ||
| + | * Dazu am eigenen Rechner einmal **ssh-add** (je nach system einmalig oder nach jedem Login), dann **ssh -A bytecluster0002.bytespeicher.org**; | ||
| + | * Zum Passwort ändern kann man sich zur Konsole des Containers verbinden | ||
| + | * Von der Konsole des Hosts aus mit **sudo pct console <CT ID>** | ||
| + | * Über das Web-Frontend kann man die " | ||
| + | * In der Konsole kann man sich als root mit dem festgelegten Passwort einloggen und mit **passwd < | ||
| + | * Alle bekannten Nutzer sind sudo-fähig | ||