# Home Server – IP ändert sich nach Neustart ## Server-Infos | Eigenschaft | Wert | |---|---| | Betriebssystem | Ubuntu 24.04.4 LTS | | Hostname | minecraft | | Netzwerkkarte | `eno1` (MAC: `ac:e2:d3:05:b8:46`) | | Gewünschte feste IP | `192.168.178.57` | | Falsche IP (nach Neustart) | `192.168.178.117` | | Gateway / DNS | `192.168.178.1` (Fritzbox) | | Netplan-Konfig | `/etc/netplan/01-static.yaml` | --- ## Was war das Problem? Ubuntu 24.04 verwendet **Netplan** zur Netzwerkkonfiguration. Beim Boot gab es zwei widersprüchliche Netplan-Dateien: | Datei | Inhalt | Problem | |---|---|---| | `/etc/netplan/01-static.yaml` | Feste IP für Interface `ens18` | Falsches Interface – das echte heißt `eno1` | | `/etc/netplan/50-cloud-init.yaml` | DHCP für `eno1` | Überschrieb die statische Konfig, weil Dateinamen alphabetisch/numerisch priorisiert werden | **cloud-init** ist ein Dienst der beim Boot automatisch Netzwerkkonfigurationen generiert und die `50-cloud-init.yaml` bei jedem Neustart neu erstellt hat. Da diese Datei `dhcp4: true` für `eno1` gesetzt hat, hat der Server jedes Mal eine zufällige IP vom Fritzbox-DHCP bekommen – obwohl die statische Konfig vorhanden war. --- ## Angewandte Lösung (Einmalig durchgeführt) ### Schritt 1 – cloud-init dauerhaft für Netzwerk deaktiviert ```bash echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network.cfg ``` → Verhindert, dass cloud-init die `50-cloud-init.yaml` beim nächsten Boot neu erstellt. ### Schritt 2 – Die DHCP-Datei gelöscht ```bash rm /etc/netplan/50-cloud-init.yaml ``` ### Schritt 3 – Statische Konfig korrigiert Das Interface `ens18` in `01-static.yaml` auf das richtige Interface `eno1` geändert: ```bash nano /etc/netplan/01-static.yaml ``` Inhalt der Datei (genau so): ```yaml network: version: 2 ethernets: eno1: dhcp4: no addresses: - 192.168.178.57/24 routes: - to: default via: 192.168.178.1 nameservers: addresses: [192.168.178.1, 8.8.8.8] ``` ### Schritt 4 – Berechtigungen gesetzt und Konfig angewendet ```bash chmod 600 /etc/netplan/01-static.yaml netplan apply ``` ### Schritt 5 – Erfolgreich geprüft ```bash ip addr show eno1 ``` Erwartete Ausgabe (kein `dynamic`, `valid_lft forever`): ``` 2: eno1: ... inet 192.168.178.57/24 brd 192.168.178.255 scope global eno1 valid_lft forever preferred_lft forever ``` --- ## Wenn das Problem wieder auftritt – Schritt für Schritt ### Diagnose **1. Per SSH verbinden (mit der aktuell falschen IP falls nötig):** ```bash ssh root@192.168.178.117 # oder mit der richtigen IP falls erreichbar: ssh root@192.168.178.57 ``` **2. Aktuelle IP und Interface anzeigen:** ```bash ip addr show eno1 ``` Wenn `dynamic` in der Ausgabe steht → DHCP ist wieder aktiv. Weiter mit Schritt 3. **3. Alle vorhandenen Netplan-Dateien anzeigen:** ```bash ls -la /etc/netplan/ cat /etc/netplan/*.yaml ``` Erwartetes Ergebnis: Nur `01-static.yaml` mit `dhcp4: no`. Wenn `50-cloud-init.yaml` wieder vorhanden ist → cloud-init hat sie neu erstellt → weiter mit Fix. **4. cloud-init-Sperre prüfen:** ```bash cat /etc/cloud/cloud.cfg.d/99-disable-network.cfg ``` Erwartete Ausgabe: `network: {config: disabled}` Wenn die Datei fehlt oder leer ist → weiter mit Fix Schritt 1. --- ### Fix **Schritt 1 – cloud-init-Sperre neu setzen:** ```bash echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network.cfg # Prüfen: cat /etc/cloud/cloud.cfg.d/99-disable-network.cfg ``` **Schritt 2 – DHCP-Datei löschen:** ```bash rm -f /etc/netplan/50-cloud-init.yaml # Prüfen ob wirklich weg: ls /etc/netplan/ ``` **Schritt 3 – Statische Konfig prüfen und ggf. korrigieren:** ```bash cat /etc/netplan/01-static.yaml ``` Datei muss **exakt** so aussehen: ```yaml network: version: 2 ethernets: eno1: dhcp4: no addresses: - 192.168.178.57/24 routes: - to: default via: 192.168.178.1 nameservers: addresses: [192.168.178.1, 8.8.8.8] ``` Falls die Datei fehlt oder falsch ist, neu schreiben: ```bash cat > /etc/netplan/01-static.yaml << 'NETPLAN' network: version: 2 ethernets: eno1: dhcp4: no addresses: - 192.168.178.57/24 routes: - to: default via: 192.168.178.1 nameservers: addresses: [192.168.178.1, 8.8.8.8] NETPLAN ``` **Schritt 4 – Berechtigungen setzen:** ```bash chmod 600 /etc/netplan/01-static.yaml # Prüfen (muss -rw------- zeigen): ls -la /etc/netplan/ ``` **Schritt 5 – Konfig anwenden:** ```bash netplan apply ``` Keine Fehlermeldungen = gut. Warnungen über Berechtigungen = chmod aus Schritt 4 wiederholen. **Schritt 6 – IP prüfen:** ```bash ip addr show eno1 ``` Erwartete Ausgabe: ``` inet 192.168.178.57/24 brd 192.168.178.255 scope global eno1 valid_lft forever preferred_lft forever ``` Kein `dynamic` → fertig. ✅ **Schritt 7 – Neustart zur Bestätigung:** ```bash reboot # Nach dem Neustart neu verbinden und prüfen: ssh root@192.168.178.57 ip addr show eno1 ``` --- ## Wichtige Dateipfade | Datei | Bedeutung | |---|---| | `/etc/netplan/01-static.yaml` | Netplan-Konfig mit fester IP (die richtige Datei) | | `/etc/netplan/50-cloud-init.yaml` | Netplan-Konfig von cloud-init (darf nicht existieren!) | | `/etc/cloud/cloud.cfg.d/99-disable-network.cfg` | Sperrdatei für cloud-init Netzwerkkonfig | ## Erwarteter Zustand nach dem Fix ```bash root@minecraft:~# ls /etc/netplan/ 01-static.yaml # Nur diese eine Datei! root@minecraft:~# cat /etc/cloud/cloud.cfg.d/99-disable-network.cfg network: {config: disabled} root@minecraft:~# ip addr show eno1 2: eno1: ... inet 192.168.178.57/24 brd 192.168.178.255 scope global eno1 valid_lft forever preferred_lft forever # kein "dynamic"! ```