UDM-PRO-SE | DSL-Modem erreichen

  • Was wollen wir?

    Auf das an der UDM-PRO-SE angeschlossenes Modem zugreifen.


    Warum wollen wir das?

    Das Modem hat nur ein Netzwerk-Interface (wie z.B Vigor 130), es stehen keine normalen LAN-Ports mehr zu Verfügung oder sollen nicht verschwendet werden.

    Dennoch wäre ein gelegentlicher Zugriff erwünscht, um sich z.B die (V)DSL-Verbidungsdatenanzuschauen oder Updates durchzuführen.



    Und wie geht das genau?

    Voraussetzungen:

    • Grundkenntnisse auf der Linux Shell
    • Modem Konfiguration
    • einen (privaten) IP-Bereich der NIRGENDWO intern benutzt wird.
      Das Beispiel hier benutzt: 10.99.99.0/28
      10.99.99.1/28 -> IP des Modem
      10.99.99.2/28 -> IP des der UDM
    • UDM-PRO-SE getestet mit der 2.5.11, es spricht aber nichts dagegen, dass
      es auch auf den andere UMD oder DR funktioniert. Da müssen aber ggf.
      Pfade, Netzwerkschnittellen UND Start-Scripte angepasst werden.



    Step1: Modem Konfiguration

    Am Beispiel eines DrayTek Vigor 130, IP Adresse und Maske setzen und fertig.

    Step2:

    auf der UDM-PRO-DE ist das "/data“ Verzeichnis der Ort, der soweit bekannt, nicht von Updates überschrieben wird (auf der UDM-PRO ist zur Zeit /mnt/data/)

    sofern noch nicht geschehen hier ein „myScripts“ Verzeichnis anlegen (mkdir /data/myScripts) wo dann alles reinkommt.

    Dort dann eine accessModem.sh erstellen mit folgenden Inhalt.



    Angepasst werden muss ggf.:

    INTERFACE=„eth8“ -> eth8 ist Port 9 auf der UDM-PRO-SE, eth9 währe der obere SFP Port 10, eth10 der untere SFP Port 11
    LOCALE_IP="10.99.99.2/28“ -> Die Ip und Maske die die UDM bekommt
    REMOTE_IP=„10.99.99.1“ -> die IP des Modems


    Nach dem da Script ausführbar ist (chmod +x accessModem.sh) kann es mit /data/myScripts/accessModem.sh start gestartet werden

    oder mit stop" die einstellungen auch wieder entfernt werden.

    Mehr ist nicht nötig um dann über die 10.99.99.1 auf das Modem zuzugreifen.



    STEP3: AUTO START

    Wer nach einem Boot das script nicht Manuel starten möchte fügt noch eine Start Unit hinzu.

    (Hier sind dann auch die Meisten unterschiede zu normalen UDM da läuft das booten von Skripten anders ab)

    Dazu im gleichen "/data/myScripts/„ Verzeichnis eine „accessModem.service" anlegen:



    mit ln -s /data/myScripts/accessModem.service /etc/systemd/system/accessModem.service einen link der datei in system config Verzeichnis anlegen

    und mit systemctl enable accessModem die start unit dem System bekannt machen.


    EXTARS:



    Mit Routen die auf die UDM gehen können interne oder auch externe Ziele erreicht werden. Hier eine route zu meinen 192.168.1.0/24 netz

    in dem z.B ein Syslog stehen könnte (man erspart sich irgendwelche Portforwarding regeln) oder die Zweite IP is ein Zeitserver der extern liegt

    (offizieller ptb.de Zeitserver) die IP dann auch als NTP quelle im router eintragen und schon hat dieser auch die richtige Uhrzeit...


    Anmerkungen:

    für die USG gibt es HIER eine schöne Beschreibung.

    Firewall Regeln beachten, auf Gruppen / Vlan / Anschluss basierenden Regeln greifen wahrscheinlich nicht

    da das "interface" an "Unifi" vorbei eingerichtet ist.

    das (p)SNAT mit iptables könnte man sich sparen, die zu Modems degradierten Router (Vigor/Fritz) lassen aber selten eine default route auf dem LAN

    Interface zu. Manuelle Routen für die nötigen VLAN währen aber auch möglich, ist aber extra Pflege auf dem Modem (siehe extras)

    Mit dem NAT und ohne Routen hat das Modem aber auch nur max zugriff auf die UDM und kann die Geräte dahinter nicht direkt erreichen



    Disclaimer:

    Alle Anleitungen/Tutorials sind nach bestem Wissen und Gewissen verfasst, gehen immer von den definierten Software/Firmware-Versionen aus und sind auf das englische GUI ausgelegt.

    Es gibt keine Garantie auf Erfolg. Im Falle eines Misserfolges hilft aber die Community hier sicherlich weiter.

    Keiner der Autoren oder der Betreiber des Forums ist für die aus der Nutzung resultierenden Probleme/Herausforderungen verantwortlich.

    Jegliche hier beschriebenen Schritte erfolgen ausnahmslos in eigener Verantwortung des Durchführenden.

    Eltern haften für ihre Kinder.

Kommentare 21

  • Hallo,


    wie müsste das Skript erweitert werden wenn 2 Internet Anbieter angeschlossen sind? z.B. an Lan Port 8. Sprich 2 Modems im Bridge Mode.


    LG

    Franz

    • Script Kopieren unter anderen Namen abspeichern (sowas wie accessModem2.sh)

      Editieren mit anderen IP / Port

      Startcript Kopieren (sowas wie accessModem2.service) und auch einflegen.


      Oder halt alles Doppelt in eine Datei reinschieben, variabel anpassen oder hardcofieren.

    • Danke... habs schon hingebracht...

  • Hallo,


    ich habe heute von meiner alten USG auf die UXG migriert und dabei leider erst festgestellt dass die gateway.config.json Einstellungen gar nicht mehr gehen.


    Jetzt bin ich hier drauf gestoßen auf der Suche nach einer Lösung für das Vigor 165-Problem. Leider scheint es auf der UXG-Lite nicht zu funktionieren:


    Code
    root@UXG-Lite:/data/myScripts# ./accessModem.sh start
    RTNETLINK answers: Operation not supported
    Cannot find device "eth0.modem"
    Cannot find device "eth0.modem"


    Das passiert direkt beim 1. command, also bei


    Code
    /sbin/ip link add name ${INTERFACE}.modem link ${INTERFACE} type macvlan


    Hat vielleicht jemand eine Idee wie man das auf das UXG-Lite adaptieren könnte?

    • RTNETLINK answers: Operation not supported


      Nachtigall ich hör dir Trapsen. Teilweise werden die Kernel nicht mehr mit

      der MACVLAN Funktion ausgeliefert (danke für nichts UI)


      mach mal bitte ein

      zcat /proc/config.gz | grep -i MACVLANwas kommt da ?


      erwartet wird ein

      CONFIG_MACVLAN=y


      kommt ein

      CONFIG_MACVLAN=m


      ist die Welt noch zu retten und du benötigst im script ggf nur ein lsmod macvlan


      Ohne oder mit „n“ ist doof...


      Hier is ne Lösugn, allerdings aktuell nicht für deine Version.

      Du müsstest dir also selber einen Kernel Backen, bzw. das Modul

      auf auf einen anderen PC


      https://github.com/whi-tw/macvlan-unifios/tree/main

    • Code
      root@UXG-Lite:/data/myScripts# zcat /proc/config.gz | grep -I MACVLAN
      # CONFIG_MACVLAN is not set

      ...irgendwie hatte ich gedacht nach dem Wechsel von der USG auf UXG-Lite ist alles besser als vorher. Aber irgendwie gehen echt viele Dinge nicht mehr die ich eigentlich brauche. Ziemlich blöd.


      Das UXG-Lite kommt übrigens mir der Version


      Code
      Model:       UniFi NeXt-Gen Gateway Lite
      Version:     3.1.15.12687
    • aber halt mit einem leicht andern Kernel bei dem MACVLAN nicht inkludiert ist.

      Die UDM-SE wird bisher noch mit ausgeliefert (bin auf Beta 3.2.x)


      So adhoc fällt mit auch nichts ein. Angefangen hatte ich einfach mit ner zweiten IP

      die wird aber auch das UNIFI System recht schnell wieder weg konfiguriert.

    • Also ich benutze das eigentlich nur, um per telnet die aktuellen Daten vom Modem abzuholen und diese in eine Influxdb zu schreiben.


      Ich habe jetzt Deine Lösung auf einen Raspberry Pi der eh läuft angewendet:


      Code
      /sbin/ip link add name eth0.modem link eth0 type macvlan
      /sbin/ip addr add 192.168.1.2/24 dev eth0.modem
      /sbin/ip link set eth0.modem up


      damit komme ich dann vom Pi per telnet aufs Modem drauf (bzw. mit dem Python Script das die Daten holt und in die Datenbank schreibt). Und wenn ich aufs Webinterface muss kann ich sogar einen ssh tunnel aufmachen (ssh -L 8080:192.168.1.1:80 pi@pi-ipaddrr) und dann per localhost drauf. Ich glaube das ist für mich die deutlich einfacherere Lösung als jetzt irgendwelche Kernel-Module zu besorgen.


      Danke Dir trotzdem für die Mühen (und im Endeffekt für die Lösung). Vielleicht hilft es ja auch mal wem anders. Eigentlich braucht man ja gar nicht ständig Zugriff auf das Webinterface von Modem. Ist bei mir ja auch eher ein Sonderfall weil ich den Line Status loggen möchte.


      Immerhin eins von 4 Problemen das ich mit der USG -> UXG-Lite-Migration habe gelöst...

  • V1.3 update.


    Logging war vom Pfad her Hardcodiert und ist in eine variable Gewandert.

    der Wheris Aufruf um iptables zu finde wurde mit einem „which“ vereinfacht.


    Danke an noexpand für die hinweise...

  • Moin...

    Ich habe alles wie oben beschrieben installiert.

    Wenn ich das Script MANUELL starte oder stoppe macht es das was es soll.

    So nun habe ich es auch als Dienst wie oben beschrieben gemacht, übersteht auch den Neustart aber es wird nicht ausgeführt. Siehe unten die Ausgabe von "systemctl status accessModem" nach Neustart.


    Es handelt sich um eine UDM Pro (keine SE) Firmware: 3.1.15, Network: 7.4.162 ergo die neuste Stable


    Was mache ich Falsch?????


    root@UDMPRO:~# systemctl status accessModem

    accessModem.service - Modem External Access

    Loaded: loaded (/data/myScripts/accessModem.service; enabled; vendor preset: enabled)

    Active: active (exited) since Thu 2023-08-24 20:06:25 CEST; 20h ago

    Main PID: 2763 (code=exited, status=0/SUCCESS)

    Tasks: 0 (limit: 4725)

    Memory: 0B

    CPU: 0

    CGroup: /system.slice/accessModem.service


    Aug 24 20:06:25 UDMPRO systemd[1]: Started Modem External Access.

    Aug 24 20:06:25 UDMPRO accessModem.sh[2783]: Another app is currently holding the xtables lock. Perhaps you want to use the -w option?

    • das "Another app is currently holding the xtables lock“

      klingt so als wenn da grade just zu dieser Zeit noch ein anderes Script an den Regeln rummacht.

      Halt das Unifi System selber.


      Ich würde mit einem "sleep 5" oder "sleep 10" anfangen ne Pause einzubauen.

      ALSO:


      "ExecStartPre=/bin/sleep 30“ vor der "ExecStart=/data/myScripts/accessModem.sh start„

      Zeile in der Start UInit einfügen. evt. noch ein "TimeoutStartSec=120“

      um das timeout hochzustehen (wobei das eigentlich mit 90 Sekunden lang genug sein sollte)

    • Joo ich bin HAPPY, alles so richtig wie du mir beschrieben hast... Herzliches Dankeschön für die Arbeit sowie erstklassischem Support.


      Anbei meine geänderte accessModem.service:


      ###

      ## accessModem.service

      ## a Start Unit to handel external Modem Access

      ## 2022, by Gierig, free to use


      [Unit]

      Description=Modem External Access

      TimeoutStartSec=120

      After=network.target


      [Service]

      Type=simple

      RemainAfterExit=yes

      ExecStartPre=/bin/sleep 30

      ExecStart=/data/myScripts/accessModem.sh start

      ExecStop=/data/myScripts/accessModem.sh stop


      [Install]

      WantedBy=multi-user.target

  • Für das GlasfaserModem2 der Telekom funktioniert das natürlich auch.

    Das modem hat nur feste einstellungen und damit andere IP:


    LOCALE_IP="192.168.100.2/24"

    REMOTE_IP=„192.168.100.1"


    Damit gehts dann direkt

  • Hi und danke für das Script.
    Ich bin mir sicher du hast es getestet und es funktioniert bei dir, aber ich hatte auf meiner UDMpro ein kleines Problem:
    die TCP Pakete aus meinem lokalen Netzwerk, die über das .modem subinterface raus zum DSL Modem gehen wurden nicht ge-nat-ed (also kein src rewrite).
    Deshalb funktionierte es auch nicht, da das DSL Modem ohne eingetragene route keine Antwort an eine IP aus meinem lokalen Netzwerk senden kann.
    Allerdings erstellt das script ja die MASQUERADE rule für das Hauptinterface und nicht für das subinterface. Das routing der pakete in der UDM erfolgt aber über das subinterface.
    Also habe ich dann die MASQUERADE rule auch auf das subinterface gelegt und schon hat's funktioniert :winking_face:

    $IPT -t nat -I POSTROUTING 1 -o ${INTERFACE}.modem -d ${REMOTE_IP} -j MASQUERADE

    Danke 1
    • 100% Korrekt. Ich habe es oben Korrigiert.


      Bei mit auf der UDM wars schon richtig...

      Habe ich wohl vergessen anzupassen im Wiki bei der Umstellung von

      zweite IP auf eignes Substanz interface.

      Danke für den Hinweis !!!

  • So, neues Script ist da.

    Statt ne IP einfach auf das WAN interface zu legen wird ein neues Interface mit eigner Mac

    angelegt und da die IP draufgelegt. Die wird bisher nicht von UNIFI system überschrieben..

  • Ahh das UNFI System scheint von WAN Interface die IP zu entfernen irgendwann nachts.

    Möglich das es mit der FW nun anders ist.


    Probieren wird es mit einem SUB Interface mit der Hoffnung das das nicht gelöscht wird,.

    /sbin/ip addr add ${LOCALE_IP} dev ${INTERFACE} label ${INTERFACE}:modem


    wenn das klappt werde ich das Script Oben anpassen...

  • Mit der neuen 3.x FW Version hat sich der ORT für IPTABLES geändert.


    Habe oben das script angepasst das nun den richtigen Pfad „sucht“ und dann verwendet.

    Damit sollte das dann auf 2.x und 3.x laufen.

  • Coole Sache, da wäre ich ja im Leben nicht drauf gekommen!

    Leider kommt es für mich zu spät, bin auf Glasfaser umgestiegen.


    Obwohl, da gibts ja auch diesen Medienkonverter. Ich werd mal bei Gelegenheit ausprobieren, ob das damit auch geht ...

    • sofern der ne IP hat um auf ihn zuzugreifen um irgendwas einzustellen.. JA


      Das Telekom GlasfaserModen hat z.B die 192.168.100.1 als feste IP

      das GLAS SFP glaube ich ne 10er...Benötigt man aber nur wenn noch die

      ONT Kennung bei alten Anschlüssen gesetzt werden muss.

      Wenn dein Glas GPON wird dein „MedienKonverter“ auch eher ein „Modem“ sein

      wegen der Verschlüsselung) und ne Einstellmöglichkeit haben.


      Wenn APON dann wahrscheinlich nicht unwirklich nur ein „dummer“ Konverter.

      Gefällt mir 1
    • Ganz genau!

      Als IPs musste ich nur 192.168.100.1 und 192.168.100.2 eintragen dann funktioniert das ganz ausgezeichnet :smiling_face: