Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
dienste:bytecluster0002 [25.07.2020 16:47] – Template fertig machen mape2k | dienste:bytecluster0002 [02.12.2023 22: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 ====== | ||
+ | ===== extern ===== | ||
* bytecluster0002.bytespeicher.org | * bytecluster0002.bytespeicher.org | ||
* 138.201.246.25 | * 138.201.246.25 | ||
* 2a01: | * 2a01: | ||
+ | |||
+ | ===== intern ===== | ||
+ | |||
+ | * Vergabe siehe [[dienste: | ||
+ | |||
+ | * Netzwerk für Internetzugang und Traefik | ||
+ | * 10.2.0.254/ | ||
+ | * fd00: | ||
+ | |||
+ | * Netzwerk für Datenbankserver und -clients | ||
+ | * 10.3.0.0/24 | ||
+ | * fd00: | ||
+ | * IPs liegen am Host nicht an | ||
====== Betrieb ====== | ====== Betrieb ====== | ||
Zeile 56: | Zeile 88: | ||
===== Betriebssystem ===== | ===== Betriebssystem ===== | ||
- | * Debian | + | * Debian |
==== Vorkonfiguration ===== | ==== Vorkonfiguration ===== | ||
Zeile 65: | Zeile 97: | ||
==== Grundeinrichtung ==== | ==== Grundeinrichtung ==== | ||
+ | ====== Migration ====== | ||
- System aktualisieren | - System aktualisieren | ||
Zeile 73: | 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 85: | 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 96: | 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 | ||
* **systemctl restart sshd** | * **systemctl restart sshd** | ||
+ | |||
+ | ===== Netzwerk ===== | ||
+ | ==== Bridges für Netzwerk(e) einrichten ==== | ||
+ | |||
+ | Die Einrichtung von Bridges sollte nicht über die Web-GUI erfolgen, da dabei u.U. bestehende Konfigurationen aus dem Ordner / | ||
+ | |||
+ | - Bridge für Internetzugang in Containern und Datenbanknetzwerk anlegen< | ||
+ | ... | ||
+ | auto vmbr0 | ||
+ | iface vmbr0 inet static | ||
+ | address 10.2.0.254 | ||
+ | netmask 255.255.255.0 | ||
+ | bridge_ports none | ||
+ | bridge_stp off | ||
+ | bridge_fd 0 | ||
+ | # | ||
+ | iface vmbr0 inet6 static | ||
+ | address fd00: | ||
+ | netmask 64 | ||
+ | |||
+ | auto vmbr1 | ||
+ | iface vmbr1 inet manual | ||
+ | bridge_ports none | ||
+ | bridge_stp off | ||
+ | bridge_fd 0 | ||
+ | # | ||
+ | </ | ||
+ | - Bridges starten | ||
+ | * **ifup vmbr0** | ||
+ | * **ifup vmbr1** | ||
+ | |||
+ | ==== Paketfilter einrichten ==== | ||
+ | |||
+ | **Hinweis**: | ||
+ | |||
+ | - iptables-persistent installieren, | ||
+ | * **apt-get install iptables-persistent** | ||
+ | * Aktuelle Regeln nicht speichern | ||
+ | - NAT (portbasiert) für IPv4 | ||
+ | * **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-Reflection für IPv6 (Zugriff von intern auf externe IP-Adresse) | ||
+ | * **< | ||
+ | - Regeln speichern | ||
+ | * **netfilter-persistent save** | ||
+ | |||
+ | ==== Forwarding aktivieren ==== | ||
+ | |||
+ | - sysctl-Konfiguration erstellen< | ||
+ | # Forwarding aktivieren | ||
+ | net.ipv4.conf.eth0.forwarding = 1 | ||
+ | net.ipv4.conf.vmbr0.forwarding = 1 | ||
+ | net.ipv6.conf.all.forwarding = 1 | ||
+ | </ | ||
+ | - sysctl-Konfiguration übernehmen | ||
+ | * **< | ||
+ | |||
+ | ==== 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 140: | Zeile 250: | ||
- Enterprise-Repository deaktivieren | - Enterprise-Repository deaktivieren | ||
* **sed -i -e 's/^/# /' / | * **sed -i -e 's/^/# /' / | ||
+ | |||
==== 2FA Grundeinrichtung ===== | ==== 2FA Grundeinrichtung ===== | ||
Zeile 200: | 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 213: | 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 230: | 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 242: | 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 |