Trotz dynamischer IP: So läuft LiveKit (Matrix RTC) hinter deinem DSL/Kabel Anschluss

Du kennst das sicher: Du willst LiveKit – also die Technologie hinter den coolen Matrix-Videoanrufen – auf deinem eigenen Server betreiben. Soweit, so gut. Aber dann kommt der Haken, der vielen von uns mit einem normalen DSL- oder Kabelanschluss begegnet: die dynamische IP-Adresse. 💀

LiveKit braucht in seiner $CONFIG_FILE in den $rtc.ips.includes die öffentliche, erreichbare IP-Adresse deines Servers, damit es weiß, wo es die RTC-Datenpakete hinschicken muss. Ändert sich diese IP (weil dein Router nachts die Verbindung trennt oder neu startet), steht LiveKit dumm da. Es funktioniert einfach nicht mehr, bis du die Konfiguration manuell angepasst hast. Das kann richtig nervig werden.

Klar, man könnte einen TURN-Server nutzen, aber das ist nicht dasselbe wie das direkte LiveKit. Oder man mietet einen teuren VPS mit fester IP. Man könnte natürlich auch versuchen, den Wert rtc.use_external_ip in der Konfiguration auf true zu setzen, aber das hat sich in der Praxis nicht immer als funktional und zuverlässig erwiesen. Was also, wenn du es einfach bei dir zu Hause betreiben willst? Genau dafür habe ich eine Lösung gebaut.

🛠️ Mein Skript: Der LiveKit IP-Wächter

Ich habe ein kleines Bash-Skript geschrieben, das diesen nervigen Job automatisch für dich erledigt. Es ist im Grunde ein IP-Wächter, der ständig aufpasst, ob sich deine öffentliche IP geändert hat.

Wenn sich die IP ändert, passiert Folgendes – und das ist das Geniale:

  1. Backup: Zuerst macht es ein Backup deiner aktuellen $CONFIG_FILE.
  2. YAML-Update: Dann schnappt es sich die neue IP und fügt sie in die LiveKit-Konfiguration ein.
  3. Restart & Check: Es startet den LiveKit-Dienst (egal ob Docker oder Docker Compose!) neu, wartet kurz, und prüft per Healthcheck, ob alles wieder läuft.
  4. Optionale Benachrichtigung: Auf Wunsch sendet es dir sogar eine Nachricht über ntfy!

⚙️ Die Schlüsselstellen in der Konfiguration (Deine Variablen)

Um dieses Skript bei dir zum Laufen zu bringen, musst du nur die Variablen am Anfang anpassen. Ich habe mir extra Mühe gegeben, sie so einfach wie möglich zu halten:

  • CONFIG_FILE: Der absolute Pfad zu deiner LiveKit-Konfigurationsdatei.
  • RUNTIME: Hier legst du fest, wie du LiveKit betreibst.
    • Setze es auf "compose", wenn du Docker Compose nutzt (wie ich meistens). Dann musst du auch die nächsten beiden Variablen ($COMPOSE_FILE_PATH und $COMPOSE_SERVICE) anpassen.
    • Setze es auf "docker", wenn du einen einzelnen Docker-Container nutzt. Dann kommt der Name des Containers in die Variable $CONTAINER_NAME.
  • ENABLE_IPV6: Wenn dein Server nur über IPv6 erreichbar ist und du das nutzen willst, setze es auf true. Sonst bleibst du bei false (IPv4). Achtung, ich konnte dieses Feature nicht testen!
  • WAIT_AFTER_RESTART: Die Zeit (in Sekunden), die das Skript nach dem Neustart wartet, bevor es den Healthcheck startet. 20 Sekunden sind ein guter Puffer!
  • HEALTHCHECK_DOMAIN: Deine Domain, über die das LiveKit erreichbar ist. Wichtig, damit das Skript prüfen kann, ob der Dienst wieder läuft.
  • NTFY_URL / NTFY_TOKEN: Wenn du die optionalen Benachrichtigungen nutzen willst, füllst du diese hier aus.

💾 So installierst und nutzt du das Script

Du brauchst eigentlich nur git und optional yq (das vereinfacht das Editieren der YAML-Datei ungemein).

Schritt 1: Das Skript holen

Mit git ist das schnell erledigt – du klonst einfach mein Repository:

git clone https://git.techniverse.net/scriptos/livekit-ip-watch.git

Schritt 2: Die Konfiguration anpassen

Öffne die Datei livekit-ip-watch/livekit-ip-watch.v1.sh und passe die Variablen im Konfigurationsbereich an deine Pfade und Einstellungen an.

Schritt 3: Ausführen und Automatisieren

Du kannst das Skript einmalig starten, um zu testen, ob es funktioniert:

bash livekit-ip-watch.v1.sh

Meine Ausgabe sah zum Beispiel so aus – du siehst, es erkennt die neue IP, nutzt den Fallback-Editor, startet den Dienst neu und meldet nach der Wartezeit, dass der Healthcheck erfolgreich war:

➜ bash livekit-ip-watch.v1.sh
[2025-10-27 19:56:30] INFO:  Neue IP erkannt: 152.53.118.246 (alt: none)
[2025-10-27 19:56:30] INFO:  Backup erstellt: /home/scripts/livekit-ip-watch/backups/config.yaml.20251027195630.bak
[2025-10-27 19:56:30] WARN:  yq nicht gefunden – Fallback-Editor wird verwendet.
[2025-10-27 19:56:30] INFO:  Restart des Dienstes...
[+] Restarting 1/1
 ✔ Container matrix-element-call-livekit  Started                                                                                                                           46.8s
[2025-10-27 19:57:17] INFO:  Warte 20 Sekunden...
[2025-10-27 19:57:37] INFO:  Healthcheck OK.

Wichtig dabei: Deine DynDNS muss natürlich immer aktuell sein, sonst schlägt der Healthcheck über deine Domain fehl!

Wenn das klappt, richtest du es am besten als Cronjob ein. Das machst du, indem du den Befehl crontab -e in deiner Bash-Konsole ausführst und eine Zeile wie */5 * * * * /pfad/zum/script/livekit-ip-watch.v1.sh > /dev/null 2>&1 hinzufügst. Damit läuft das Skript alle fünf Minuten automatisch im Hintergrund und prüft deine IP-Adresse.

💡 Mein Fazit

Mit dieser Lösung läuft dein LiveKit-Server auf deinem dynamischen Anschluss genauso zuverlässig wie auf einem Server mit fester IP. Du hast einen robusten Mechanismus, der IP-Wechsel automatisch abfängt und deinen Dienst neustartet.

Probier es aus und gib mir Feedback!

👥 Techniverse Community

Lust auf Austausch rund um Matrix, Selfhosting und andere smarte IT-Lösungen?
In der Techniverse Community triffst du Gleichgesinnte, kannst Fragen stellen oder einfach nerdigen Talk genießen. 🚀

👉 Jetzt der Gruppe auf Matrix beitreten
~ Direkte Raumadresse: #community:techniverse.net

Wir freuen uns, wenn du dabei bist!

Vielen Dank fürs Teilen!