dienste:bytecluster0002

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dienste:bytecluster0002 [12.12.2020 22:38] – ↷ Links angepasst weil Seiten im Wiki verschoben wurden mape2kdienste:bytecluster0002 [02.12.2023 22:36] (aktuell) mape2k
Zeile 3: Zeile 3:
 bytecluster0002 ist ein Virtualisierungsserver, der Kommunikationsdienste für den Verein bereitstellt. bytecluster0002 ist ein Virtualisierungsserver, der Kommunikationsdienste für den Verein bereitstellt.
 Er löst [[bytecluster0001]] ab. Er löst [[bytecluster0001]] ab.
 +
 +====== Virtuelle Hardware ======
 +
 +  * 4 Kerne
 +  * 16 GB RAM
 +  * Volumes
 +    * 160 GB / //(inkludiert)//
 +    * 100 GB /mnt/data //(zusätzlich)//
 +
 +====== Migration ======
 +
 +  * mehr zur Migration unter [[dienste:bytecluster0002:migration]]
  
 ====== Festlegungen (Diskussionsgrundlage) ====== ====== Festlegungen (Diskussionsgrundlage) ======
Zeile 14: Zeile 26:
 ====== Container ====== ====== Container ======
  
-  * [[dienste:bytecluster0002:web|wiki]] +  * siehe [[dienste:bytecluster0002:host-netzwerke|host-netzwerke]] 
-  * [[dienste:bytecluster0002:traefik|traefik]] +
-  * [[dienste:bytecluster0002:mariadb|mariadb]] +
-  * [[dienste:bytecluster0002:nextcloud|nextcloud]] +
-  * [[dienste:bytecluster0002:wordpress|wordpress]]+
 ====== Administratoren ====== ====== Administratoren ======
  
Zeile 79: Zeile 88:
 ===== Betriebssystem =====  ===== Betriebssystem ===== 
  
-  * Debian 10 minimal (vorinstalliert)+  * Debian 12 minimal (vorinstalliert)
  
 ==== Vorkonfiguration ===== ==== Vorkonfiguration =====
Zeile 88: Zeile 97:
  
 ==== Grundeinrichtung ==== ==== Grundeinrichtung ====
 +====== Migration ======
  
   - System aktualisieren   - System aktualisieren
Zeile 110: Zeile 120:
  
   - NFS / rpcbind deaktivieren und beenden (wird nicht benötigt, offene Ports schließen)   - NFS / rpcbind deaktivieren und beenden (wird nicht benötigt, offene Ports schließen)
-    * **systemctl disable --now rpcbind.service rpcbind.socket**+    * **<nowiki>systemctl disable --now rpcbind.service rpcbind.socket</nowiki>**
   - sudo installieren und konfigurieren   - sudo installieren und konfigurieren
     * **apt-get install sudo**     * **apt-get install sudo**
Zeile 119: 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<file|/etc/ssh/sshd_config+    - Konfiguration anpassen<file|/etc/ssh/sshd_config.d/01_custom.conf>
-...+
 PermitRootLogin no PermitRootLogin no
-... 
 PasswordAuthentication no PasswordAuthentication no
-... +KbdInteractiveAuthentication no
-ChallengeResponseAuthentication no +
-...+
 </file> </file>
     - SSH-Daemon neustarten     - SSH-Daemon neustarten
Zeile 169: 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-j MASQUERADE**  +    * **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) +  - NAT-Reflection für IPv4 (Zugriff von intern auf externe IP-Adresse für Ports 80/443
-    * **iptables -t nat -A POSTROUTING -o vmbr0 -j SNAT --to-source 138.201.246.25**+    * **<nowiki>iptables -t nat -A PREROUTING -i vmbr0 -s 10.2.0.0/24 -d 138.201.246.25/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.2.0.1:80</nowiki>** 
 +    * **<nowiki>iptables -t nat -A PREROUTING -i vmbr0 -s 10.2.0.0/24 -d 138.201.246.25/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.2.0.1:443</nowiki>** 
 +    * **<nowiki>iptables -t nat -A POSTROUTING -o vmbr0 -s 10.2.0.0/24 -j SNAT --to-source 138.201.246.25</nowiki>**
   - NAT (prefixbasiert) für IPv6   - NAT (prefixbasiert) für IPv6
     * **<nowiki>ip6tables -t nat -A POSTROUTING -o eth0 --to 2a01:4f8:c17:cf64:ffff::/80 -s fd00:10:2:0::/64 -j NETMAP</nowiki>**     * **<nowiki>ip6tables -t nat -A POSTROUTING -o eth0 --to 2a01:4f8:c17:cf64:ffff::/80 -s fd00:10:2:0::/64 -j NETMAP</nowiki>**
     * **<nowiki>ip6tables -t nat -A PREROUTING -i eth0 -d 2a01:4f8:c17:cf64:ffff::/80 --to fd00:10:2:0::/64 -j NETMAP</nowiki>**     * **<nowiki>ip6tables -t nat -A PREROUTING -i eth0 -d 2a01:4f8:c17:cf64:ffff::/80 --to fd00:10:2:0::/64 -j NETMAP</nowiki>**
 +  - NAT-Reflection für IPv6 (Zugriff von intern auf externe IP-Adresse)
 +    * **<nowiki>ip6tables -t nat -A POSTROUTING -o vmbr0 -s fd00:10:2::/64 -j SNAT --to-source 2a01:4f8:c17:cf64::1</nowiki>**
   - Regeln speichern   - Regeln speichern
     * **netfilter-persistent save**     * **netfilter-persistent save**
Zeile 305: Zeile 315:
 Task OK Task OK
 </file>  </file> 
 +
 +==== SSH-Forward-Hook einrichten ====
 +
 +  - Skript hinterlegen<file|/var/lib/vz/snippets/ssh_forward.sh>
 +#!/usr/bin/sh
 +# 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 "bridge=$NETWORK_INTERFACE_INTERNAL" | sed --regexp-extended 's/.*ip=([0-9\.]*)\/.*/\1/')
 +# IP_LAST_OCTET=$(pct config $VMID | grep "bridge=$NETWORK_INTERFACE_INTERNAL" | sed --regexp-extended 's/.*ip=[0-9]+\.[0-9]+\.[0-9]+\.([0-9]+)\/.*/\1/')
 +SSH_FORWARD_PORT=$(expr $SSH_FORWARD_BASE_PORT + $VMID)
 +
 +echo "GUEST HOOK on VMID $VMID for phase $PHASE"
 +
 +echo "Internal IP address: $IP_ADDRESS_INTERNAL"
 +echo "SSH-Port on host: $SSH_FORWARD_PORT"
 +
 +case "$PHASE" in
 +
 +  # First phase 'pre-start' will be executed before the guest
 +  # ist started. Exiting with a code != 0 will abort the start
 +  pre-start) echo "$VMID is starting, doing preparations.\n"
 +             iptables -t nat -A PREROUTING -i $NETWORK_INTERFACE_EXTERNAL -p tcp --dport $SSH_FORWARD_PORT -j DNAT --to $IP_ADDRESS_INTERNAL:$SSH_DESTINATION_PORT
 +             ;;
 +
 +  # Second phase 'post-start' will be executed after the guest
 +  # successfully started.
 +  post-start) echo "$VMID started successfully.\n"
 +              ;;
 +
 +  # Third phase 'pre-stop' will be executed before stopping the guest
 +  # via the API. Will not be executed if the guest is stopped from
 +  # within e.g., with a 'poweroff'
 +  pre-stop) echo "$VMID will be stopped.\n"
 +            ;;
 +
 +  # Last phase 'post-stop' will be executed after the guest stopped.
 +  # This should even be executed in case the guest crashes or stopped
 +  # unexpectedly.
 +  post-stop) echo "$VMID stopped. Doing cleanup.\n"
 +             iptables -t nat -D PREROUTING -i $NETWORK_INTERFACE_EXTERNAL -p tcp --dport $SSH_FORWARD_PORT -j DNAT --to $IP_ADDRESS_INTERNAL:$SSH_DESTINATION_PORT
 +             ;;
 +
 +  *) echo "Got unknown phase '$PHASE'\n"
 +     exit 1
 +     ;;
 +esac
 +</file>
 +  - Skript ausführbar machen
 +    * **chmod +x /var/lib/vz/snippets/ssh_forward.sh**
 +
 +==== Zusätzliches Volume einrichten ====
 +
 +  - Volume vorbereiten als /mnt/data
 +  - Volume in Proxmox einbinden
 +    * **pvesm add dir data -content rootdir,images,backup -path /mnt/data/**
  
 ==== Anpassung des Standard-Templates auf Debian-Basis ==== ==== Anpassung des Standard-Templates auf Debian-Basis ====
Zeile 313: Zeile 388:
     * **pveam update**     * **pveam update**
   - Verfügbare Images anzeigen   - Verfügbare Images anzeigen
-    * **<nowiki>pveam available --section system | grep debian</nowiki>**<code>system          debian-10.0-standard_10.0-1_amd64.tar.gz +    * **<nowiki>pveam available --section system | grep debian</nowiki>**<code>system          debian-11-standard_11.7-1_amd64.tar.zst 
-system          debian-8.0-standard_8.11-1_amd64.tar.gz +system          debian-12-standard_12.2-1_amd64.tar.zst</code> 
-system          debian-9.0-standard_9.7-1_amd64.tar.gz</code> +  - Debian 12 Image herunterladen 
-  - Debian 10 Image herunterladen +    * **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 /tmp/template**     * **mkdir /tmp/template**
     * **cd /tmp/template**     * **cd /tmp/template**
-    * **<nowiki>tar --numeric-owner --extract --verbose --file=/var/lib/vz/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz --directory=/tmp/template</nowiki>**+    * **<nowiki>tar --numeric-owner --extract --verbose --file=/var/lib/vz/template/cache/debian-12-standard_12.2-1_amd64.tar.zst --directory=/tmp/template</nowiki>**
   - In das Template-System wechseln   - In das Template-System wechseln
     * **systemd-nspawn -D /tmp/template**<code|Ausgabe>     * **systemd-nspawn -D /tmp/template**<code|Ausgabe>
Zeile 330: 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://mirror.hetzner.de/debian/security buster/updates main contrib non-free" > /etc/apt/sources.list.d/hetzner-security-updates.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/security bookworm-security main contrib" > /etc/apt/sources.list.d/hetzner-security-updates.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster main contrib non-free" > /etc/apt/sources.list.d/hetzner-mirror.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm main contrib" > /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster-updates main contrib non-free" >> /etc/apt/sources.list.d/hetzner-mirror.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm-updates main contrib" >> /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster-backports main contrib non-free" >> /etc/apt/sources.list.d/hetzner-mirror.list**+      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm-backports main contrib" >> /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>**
     - 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 342: Zeile 416:
       * **logout**       * **logout**
   - Template packen und temporären Ordner entfernen   - Template packen und temporären Ordner entfernen
-    * **<nowiki>tar --numeric-owner --create --gzip --verbose --file=/var/lib/vz/template/cache/debian-10-$(hostname).tar.gz .</nowiki>**+    * **<nowiki>tar --numeric-owner --create --zstd --verbose --file=/var/lib/vz/template/cache/debian-12-$(hostname).tar.zst .</nowiki>**
     * **cd**     * **cd**
     * **<nowiki>rm --recursive /tmp/template</nowiki>**     * **<nowiki>rm --recursive /tmp/template</nowiki>**
Zeile 364: Zeile 438:
   - Unter **network** statische IPs vergeben: IPv4: 10.2.0.x/24 Gateway 10.2.0.0 IPv6: fd00:10:2:0::x/64 Gateway fd00:10:2:0::0 mit freiem x (0 = host, 10 = web, ...);    - Unter **network** statische IPs vergeben: IPv4: 10.2.0.x/24 Gateway 10.2.0.0 IPv6: fd00:10:2:0::x/64 Gateway fd00:10:2:0::0 mit freiem x (0 = host, 10 = web, ...); 
   - Im letzten Tab bestätigen und ggfs. Container sofort starten.   - 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:snippets/ssh_forward.sh**
 +  - 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 === === In Container einloggen ===
 +
   * Vor weiteren Konfigurationen ist der Container nicht von aussen erreichbar, sondern nur über den Host   * Vor weiteren Konfigurationen ist der Container nicht von aussen erreichbar, sondern nur über den Host
-  * Die Nutzeraccounts des Hosts sind auch im Container angelegt, jedoch mit unbekanntem Passwort +  * 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 public key möglich, wenn dieser beim erstellen hinterlegt wurde+  * 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     * Es empfiehlt sich, SSH Agent forwarding zu nutzen, statt seinen private key auf den Host zu kopieren
 <code|Disclaimer>Wird SSH Agent Forwarding genutzt, kann potentiell jeder mit root/sudo-Rechten solange ihr eingeloggt seid euren Key benutzen, um sich in eurem Namen lokal oder auf weiteren (auch externen) Servern einzuloggen, auf denen der selbe Key benutzt wird!</code> <code|Disclaimer>Wird SSH Agent Forwarding genutzt, kann potentiell jeder mit root/sudo-Rechten solange ihr eingeloggt seid euren Key benutzen, um sich in eurem Namen lokal oder auf weiteren (auch externen) Servern einzuloggen, auf denen der selbe Key benutzt wird!</code>
-    * Dazu vom Heimrechner einmal **sshd-add** (je nach system einmalig oder nach jedem Login), dann **ssh -A bytecluster0002.bytespeicher.org**; von dort dann **ssh 10.2.0.x** zum Container +    * Dazu am eigenen Rechner einmal **ssh-add** (je nach system einmalig oder nach jedem Login), dann **ssh -A bytecluster0002.bytespeicher.org**; von dort dann **ssh 10.2.0.x** zum Container 
-  * Alternativ kann von der Konsole des Hosts aus mit **sudo lxm-attach <CT ID>** direct eine root-Konsole des Containers erreicht werden +  * Zum Passwort ändern kann man sich zur Konsole des Containers verbinden 
-    * aus dieser kann mit **passwd <nutzername>** das Nutzerpasswort geändert werden +    * Von der Konsole des Hosts aus mit **sudo pct console <CT ID>** 
-  * Sobald das Nutzerpasswort bekannt ist, kann auch eine Konsole im Web-Frontend (Rechtsklick auf den Container) genutzt werden +    * Über das Web-Frontend kann man die "Console" nutzen 
-  * Alle bekannten Nutzer sind sudoer+    * In der Konsole kann man sich als root mit dem festgelegten Passwort einloggen und mit **passwd <nutzername>** das Benutzer-Passwort ändern 
 +  * Alle bekannten Nutzer sind sudo-fähig
  • dienste/bytecluster0002.1607809109.txt.gz
  • Zuletzt geändert: 12.12.2020 22:38
  • von mape2k