Files
Statische-IP-mit-Netplan-ko…/README.md
2026-06-04 05:28:48 +00:00

225 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
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"!
```