UniFi UCG Ultra/ Provider Zwangstrennung erkennen bzw. neue externe IP in HA erkennen

Setze für den Internetverkehr ein Modem Vigor167 und als Router eine UniFi UCG Ultra ein. Es gibt zwar noch eine FB7590, die regelt aber ausschließlich die DECT Geräte (Heizkörperthermostate) inkl. Telefonie. Funktioniert alles problemlos und geschmeidig.

Habe jetzt Tailscale für den externen Zugriff auf HA als App eingerichtet. Funktioniert auch prima. Allerdings macht die Zwangstrennung mit Vergabe einer neuen externen IP von 1&1 Tailscale Probleme. Sobald eine neue externe IP bei der Zwangstrennung vergeben wird funktioniert die Tailscale-App nicht mehr.
Manuelle Lösung ist Tailscale-App neu starten und es geht wieder bis zur nächsten Zwangstrennung mit neuer externer IP.

Meine Idee wäre jetzt, dass HA über die Unifi Integration die Änderung der externen IP als Trigger erkennt und dann einen Reboot der Tailscale-App durchführt. Damit wäre Tailscale in HA durchgehend verfügbar und muss nicht manuell von mir gestartet werden.

Sollte ich was undeutlich beschrieben haben, gerne nachfragen und Voraus Dank für Eure Unterstützung.

Melde doch die FritzBox bei MyFritz an, und lasse Tailscale auf die myfritz Adresse zeigen.
Wenn das nicht geht, weil die FritzBox nur DECT und kein Internet macht musst Du in der UCG Ultra einen dyndns dienst eintragen. Dafür musst Du dich bei einem der Dienste anmelden.
Eingetragen wird das an der Internetkonfiguration unter dnydns.

Ich hab kein Unifi-GW bei mir, daher die Frage:

Zeigt die Integration überhaupt die externe IP an.

So als Tip, ähnlich hab ich das mal auf meiner Firewall für den Update von DynDNS gemacht:

  • externe IP abfragen und eine Datei speicher
  • regelmässig externe IP abfragen und mit der gespeicherten vergleich
  • ist die gleich, nichts machen
  • ist die unterschiedlich, gewünschte Aktionen auslösen.

Dürfte sich sicherlich mit einer Automatisierung machen lassen, wenn die externe IP vorliegt.

Sonst muss die was basteln, welche die externe IP von einer Testwebseite, z.b https://www.wieistmeineip.de/ holt

Also bei mir läuft alles über die UDM Pro als GW. Aber leider gibt es keine Entität, die irgendwelchen Bezug zur WAN Adresse hat. Bin alles durchgegangen. Vermutlich gibt es eine solche Entität generell innerhalb Unifi (da die UDM ja genau weiß, wann sie eine neue öffentliche IP erhalten hat) aber die Integration greift diese offensichtlich nicht ab.

Wenn du mal eine Lösung hast, wäre ich sehr daran interessiert. Aktuell löse ich das Problem so, dass ich den Reconnect auf 04:00 getimed habe und den Tailgate-Service um 04:15 einfach neustarte. Ist zwar unprofessionell, aber funktioniert bis dato einwandfrei :wink:

Hab das mal auf meiner OPNSense gemacht unter FreeBSD - ich muss mal suchen,. ob ich das Script noch habe

1 „Gefällt mir“

Habe es mit Hilfe der KI mal folgendermaßen versucht.

  1. Trigger für “externe IP” erstellt, (s.u.., in der sensor.yaml) Läuft alle 5 Minuten (300sek.)
  2. Dann einen Textsensor erstellt und in diesem einmalig manuell die aktuelle IP-Adresse hinterlegt.
  3. Die Automation vergleicht dann externe IP gegen Textsensor.
  4. Wenn sie gleich ist passiert nichts
  5. Wenn Sie ungleich ist wird der Trigger zum Neustart der Tailscale-App geschaltet
  6. Tailscale-App wird neu gestartet und im Textsensor die neue IP vermerkt.
  7. Zusätzlich gebe ich noch eine Whatsapp für mich aus, dass die IP verändert wurde

Aktuell habe ich den Neustart der Tailscale-App deaktiviert und teste ob alles korrekt funktioniert. Nachdem 1&1 sehr unregelmäßig die IP-Adresse ändert kann der Test länger dauern.

Ergebnis ob der Ansatz funktioniert ergänze ich dann hier.

# ------- Unifi Trigger externe Ip -------
#sensor:
  - platform: rest
    name: Externe IP
    resource: https://api.ipify.org?format=json
    value_template: "{{ value_json.ip }}"
    scan_interval: 300
# ------- Unifi Trigger externe Ip Ende -------

Im Prinzip das was Tuxtom007 geschrieben hat.

Bei Bedarf kann ich auch die Autmation hier mal einstellen. Würde ich aber erst dann machen wenn der Test positiv verläuft.

1 „Gefällt mir“

Automation im Test erfolgreich heute Nacht gelaufen.

  1. Durch den IP-Wechsel wurde der Trigger gestartet.
  2. Die Whatsappnachricht wurde mir erfolgreich zugestellt
  3. Die neue IP-Adresse wurde in die Text-Variable geschrieben
  4. Dieser Schritt ist von mir noch deaktiviert. Den Neustart der Tailscale-App werde ich erst nach mehreren Testläufen scharf schalten.
1 „Gefällt mir“

Hab das Script nicht mehr, hätte dir auch nicht viel genutzt, weil das auf meiner OPNSense lief unter FreeBSD

Cool. Das werde ich die Tage auch direkt mal versuchen. Danke dir

@jabberwoky - wollte gerade mal deine Automation nachbauen, um dann festzustellen, dass mein Wissen gar nicht dazu ausreicht :see_no_evil_monkey:

Was ich schon geschafft habe, ist folgendes

  1. Ordner “sensors” erstellt

  2. wan_ip_change.yaml im o.a. Ordner angelegt

  3. via configuration.yaml wie folgt auf den Ordner verlinkt

sensor: !include_dir_list sensors/

So - und jetzt kann ich der nächsten Anweisung schon nicht mehr folgen. :see_no_evil_monkey:

Kannst du mir das etwas detaillierter oder ggf. mit Screenshots mal aufzeigen?

Zudem - weil ich gerade erst die Whatsapp-Notification eingebunden habe - vielleicht auch noch erklären, wie du dann genau HA beigebracht hast, bei IP Änderung eine Nachricht zu verschicken?
Ich brauche dazu ja ein “event” - stehe mal wieder am Bahnhof.

Dank dir schon mal und ein schönes Wochenende.

Die Automation hatte ich noch gar nicht gepostet.

Versuche mal die Schritte zu erklären:

Trigger für “externe IP” erstellt,
(s.u.., in der sensor.yaml) Läuft alle 5 Minuten (300sek.)
Dazu den Trigger in der configuration.yaml erstellen.
Dazu suchst du in der configuration.yaml den Sektor “sensor:” und stellst unterhalb den u.s. code ein.
Achte auf die Leerstellen das die übereinstimmen. Der Sektor “sensor:” darf nur einmal vohanden sein. Aus meinem Schnipsel löschen wenn er bei dir schon besteht.
Sollte er in deiner configuration.yaml noch nicht vorhanden sein kannst du den Schnipsel wie nachstehend einfügen.
# ------- Unifi Trigger externe Ip -------
sensor:
- platform: rest
name: Externe IP
resource: https://api.ipify.org?format=json
value_template: "{{ value_json.ip }}"
scan_interval: 300
# ------- Unifi Trigger externe Ip Ende -------

Helfer anlegen:
Einstellungen → Geräte & Dienste → Helfer → Helfer erstellen - “Text-Eingabe” → Name: Letzte bekannte externe IP

Nachdem ersellen den Wert der aktuelle Ip-Adresse eintragen
Einstellungen → Geräte & Dienste → Helfer
“Letzte bekannte externe IP” anklicken
Dort gibt es ein Eingabefeld, in das du direkt deine aktuelle externe IP4-Adresse eintippen und speichern kannst.
Das musst Du intial nur einmal machen. Wenn die Automation läuft wird hier automatisch die letzte bekannte IP vermerkt.

Damit hast nun die IP-Adressen (“Letzte bekannte externe IP” und “Externe IP”) zum Vergleichen in der Automation:

Nachfolgend der Versand von Whatsapp-Nachrichten.

Wie Du über Whatsapp Nachrichten verschicken kannst erklärt Simon hier. Das zuerst einrichten.

Zum Schluß die Automation erstellen und die entsprechenden Stellen anpassen.

Einstellungen - Automationen - u.rechts Automation erstellten - neue Automation erstellen - oben rechts auf die drei Punkte - in yaml bearbeiten - u.s. code einfügen und speichern.

alias: Externe IP geändert -> Tailscale Add-on neu starten
description: >
  Erkennt IP-Wechsel durch 1&1-Zwangstrennung (auch über einen
  unavailable-Zwischenzustand) und startet das Tailscale-Add-on neu
triggers:
  - entity_id: sensor.externe_ip
    trigger: state
conditions:
  - condition: template
    value_template: |
      {{ trigger.to_state.state is match('^\d{1,3}(\.\d{1,3}){3}$')
         and trigger.to_state.state != states('input_text.letzte_bekannte_externe_ip') }}
actions:
  - action: notify.MIT DEINEM WHATSAPP NOTIY ersetzen
    data:
      title: Tailscale neu gestartet
      message: >
        Externe IP hat sich geändert: {{
        states('input_text.letzte_bekannte_externe_ip') }} → {{
        trigger.to_state.state }}. Tailscale-Add-on wird neu gestartet.
  - action: input_text.set_value
    target:
      entity_id: input_text.letzte_bekannte_externe_ip
    data:
      value: "{{ trigger.to_state.state }}"
  - action: hassio.addon_restart
    data:
      addon: a0d7b954_tailscale
mode: single

Anschließend den Code noch auf Deine Einstellungen anpassen.

  • Die Zeile: - action: notify**.MIT DEINEM WHATSAPP NOTIY ersetzen**
    Beispiel action: notify.whatsapp_hanswurst
  • Kontrolle ob addon-Slug korrrekt ist: addon: a0d7b954_tailscale
2 „Gefällt mir“

@jabberwoky Noch mal herzlichen Dank. Heute in der Nacht kam die WhatsApp Nachricht und Tailscale wurde erfolgreich neugestartet. :saluting_face:

Allerdings hat es vorher, mit der “best practice” (also das auslagern der Sensoren in einzelne yaml Dateien innerhalb eines Ordners und diesen dann via sensor: !include_dir_list sensors/
verlinken, nicht geklappt. Aber egal - bleibt jetzt so.
Da ich noch am Anfang stehe, ist meine configuration.yaml eh so gut wie leer :wink:

Kleines Update:
Der Neustart der Tailscale-App wird sofort nach Erkennen der neuen IP ausgeführt. Das hat vereinzelt (wirklich vereinzelt) zu einem Problem geführt. Der Aufbau der neuen IP-Adresse inkl. Synchronisierung mit dem Netzwerk kann etwas dauern. War der Sync noch nicht abgeschlossen, wurde Tailscale zwar neu gestartet aber der neue Weg war nicht vorhanden. Ergebnis HA nicht über Tailscale erreichbar.

Habe die Automation jetzt dahingehend angepasst, dass nach Erkennen der neuen IP der Neustart der Tailscale-App um fünf Minuten verzögert wird. Das behebt das Problem des nicht fertig gestellten Sync der Leitung.
Nachfolgend die angepasste Automation:

alias: Externe IP geändert -> Tailscale Add-on neu starten
description: >
  Erkennt IP-Wechsel durch 1&1-Zwangstrennung (auch über einen
  unavailable-Zwischenzustand). Wartet nach der Erkennung, bis sich Router/NAT
  stabilisiert haben, und startet das Tailscale-Add-on dann einmalig neu.
triggers:
  - entity_id: sensor.externe_ip
    trigger: state
conditions:
  - condition: template
    value_template: |
      {{ trigger.to_state.state is match('^\\d{1,3}(\\.\\d{1,3}){3}$')
         and trigger.to_state.state != states('input_text.letzte_bekannte_externe_ip') }}
actions:
  - action: notify.MIT DEINEM WHATSUP NOTIFY ersetzen
    data:
      title: Externe IP geändert
      message: >
        Externe IP hat sich geändert: {{
        states('input_text.letzte_bekannte_externe_ip') }} → {{
        trigger.to_state.state }}. Warte 5 Minuten, bevor Tailscale neu
        gestartet wird.
  - action: input_text.set_value
    target:
      entity_id: input_text.letzte_bekannte_externe_ip
    data:
      value: '{{ trigger.to_state.state }}'
  - delay: '00:05:00'
  - action: hassio.addon_restart
    data:
      addon: a0d7b954_tailscale
  - action: notify.whatsapp_hartmut
    data:
      title: Tailscale neu gestartet
      message: Tailscale-Add-on wurde nach der IP-Änderung neu gestartet.
mode: single

Anschließend den Code wieder auf Deine Einstellungen anpassen.

  • Die Zeile: - action: notify**.MIT DEINEM WHATSAPP NOTIY ersetzen**
    Beispiel action: notify.whatsapp_hanswurst
  • Kontrolle ob addon-Slug korrrekt ist: addon: a0d7b954_tailscale

Hinweis: Wenn die IP-Adresse innerhalb der 5 Minuten nochmals vom Provider gewechselt wird, erkennt das die Automation nicht. Meiner Kenntniss nach zwar möglich aber n der Praxis dürfte das aber kaum bzw. gar nicht vorkommen.

1 „Gefällt mir“