Ich möchte hier mal nicht direkt eine Frage stellen, sondern meine Lösung für ein Problem vorstellen. Ich würde mich über Rückmeldungen bzw. Optimierungsvorschläge sehr freuen.
Problembeschreibung:
Eine Port-Weiterleitung ist für einen internen Server eingerichtet (z.B. Port 443). In der Firewall ist eine - deny-all-Regel – angelegt. Über eine zweite Regel werden einzelne Stationen über ihre IP freigegeben.
Soweit ist alles gut.
Nun hatte ich das Problem das es zwei Kunden gibt die keine feste öffentliche IP besitzen und das auch nicht ändern möchten. Eine Suche hier im Forum zeigte schon das Lancom keine DNS Einträge (z.B. srvKunde1.no-ip.org) zur Definition bei den Stations-Objekten zu lässt.
Der Support von Lancom hat dies ebenfalls bestätigt und auch betont das es hier keine Lösung in naher Zukunft geben wird!
Für mich stellt das ein riesen Problem dar, weil ich keine Lust habe alle 24h nach einer Providerzwangstrennung die neuen IP Adressen nachzutragen.
Da viele meiner anderen Firewalls die ich betreue das können, war das keine haltbare Situation
Hier mein Workaround!
Voraussetzung:
1. Die Firewall ist konfiguriert und die Regel funktioniert mit den statischen Stationsobjekten; Des Weiteren sind die dynamischen Clients mit ihrer aktuellen IP (oder einer Phantasie IP: 123.123.123.123) als Stations-Objekt eingerichtet. Für dieses Bsp.: Die Station „srvKunde1“
2. Ein Linux Client ist im internen Netz hinter dem Lancom und hat Internetzugang. Da ich eine Vielzahl von Server betreibe war das für mich kein Problem. Denkbar sind hier VMs/Raspberry Pi/Webserver. Diese Aufgabe schafft jedes Linuxsystem nebenbei, es ist also nicht nötig extra einen Server dafür zu bauen.
WICHTIG! Bitte keinen externen Server der im Internet steht (z.B. Webserver) dafür verwenden. Ich halte das dann für extrem unsicher. Für mich funktioniert das nur sicher wenn der Server im internen Netz aufgebaut worden ist.
3. Auf dem Linux System ist SED (https://de.wikipedia.org/wiki/Sed_(Unix)) installiert und ein kleiner tFtp Server (in diesem Beispiel mit der IP: 192.168.0.99) ist konfiguriert & einsatzbereit.
Umsetzung:
Auf dem Linuxserver:
Der Linux Client soll per CronJob regelmäßig den Kunden Server srvKunde1.no-ip.org auslesen und die aktuelle IP Adresse erfassen.
Im Anschluss soll die ausgelesene IP in eine Lancom-Skriptdatei „srvKunde1dynip.lcs“ geschrieben bzw. aktualisiert werden.
Per Lancom Cronjob soll dann das Skript geladen und die IP geändert werden.
Code für den Linuxserver:
Der tFtp Server verwendet das Verzeichnis /var/tftp, somit müssen alle Dateien hier abgelegt werden.
1. Anlegen einer Batchdatei: „nano srvKunde1.sh“
Code: Alles auswählen
#!/bin/bash
# Wechselt in das Arbeitsverzeichnis
cd /var/tftp
# Fragt die IP der Domain „srvKunde1.no-ip.org“ ab und kürzt die Ausgabe nur auf die IP zu. Schreibt die IP in die Datei „srvKunde1.ip“.
# Die Datei wird beim ersten Ausführen automatisch angelegt!
host srvKunde1.no-ip.org|grep address|sed 's/.*address //g' > srvKunde1.ip
# Zieht sich die IP aus der Datei „srvKunde1.ip“. Sucht in der Skriptdatei „srvKunde1dynip.lcs“ nach dem Muster 123.123.123.123 und ersetzt
# dieses mit dem Inhalt (z.B. 345.345.345.345) aus „srvKunde1.ip“.
sed -i "s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/$(<srvKunde1.ip)/g" srvKunde1dynip.lcs
2. Datei abspeichern und ausführbar machen: „chmod +x srvKunde1.sh“
3. Anlegen der Skriptdatei: „nano srvKunde1dynip.lcs“
Code: Alles auswählen
lang English
flash No
cd /
cd /Setup/IP-Router/Firewall/Objects
# Name Description $
# ==================================----------------------------------------$
add " srvKunde1" {Description} "%A123.123.123.123"
cd /
flash Yes
# done
exit
5. Ausführen der Batchdatei “./srvKunde1.sh“
6. Den Inhalt der Skriptdatei prüfen: „less srvKunde1dynip.lcs“. Nun müsste die aktuelle IP der Station in der Datei
eingetragen worden sein. BSP.: „%A456.456.456.456“
7. CronJob erstellen: „crontab –e“
Code: Alles auswählen
# Führt das Skript “srvKunde1.sh“ um 3:30 Uhr aus
30 3 * * * /var/tftp/ srvKunde1.sh #DynIP Update for srvKunde1
Nun ist alles auf der Linuxseite konfiguriert!
Auf dem Lancom
1. Lanconfig in die Cronjob-Tabelle wechseln. Dort einen neuen Cronjob erstellen:
Unter dem Punkt „Befehle“ folgendes eintragen: LoadScript -s 192.168.0.99 -f srvKunde1dynip.lcs 2. Anmerkung: Will man den Cronjob zum testen jede Minute ausführen (auf dem Lancom), muss man einfach alle Angaben freilassen. Trägt man 1 oder 01 bei „Minuten“ ein, läuft das Skript nur in der „ersten“ Minute jeder Stunde. Das hat mich etwas Zeit gekostet das heraus zu finden.
Fertig! Problem gelöst.

Ich würde mich freuen über Rückmeldungen. Da es SED auf dem Lancom nicht gibt und die Shell ja eigenen Regeln folgt konnte ich das nur außerhalb lösen. Evtl. hat ja auch jemand mehr Erfahrungen damit?
Ich lasse den Cronjob nur einmal pro Tag laufen, weil ich nur einmal am Tag die richtig IP brauche bevor ein Job auf dem Server läuft. Es wäre aber auch denkbar, dass man die andere Seite (Lancom beim Kunden) eine Email versenden lässt wenn sich die IP ändert und damit den Cronjob triggert. Das war mir aber zu aufwendig.