Script für IPV6 firewall Regel, bei dynamischem Präfix
Da ich leider einen wechselnden ipv6 Präfix habe, wollte ich ein Script, was in einem gewissen Abstand eine bestimmte Firewall Regel, mit der ipv6 Adresse eines Synology Nas abgleicht und sie bei Bedarf ändert.
Leider bekomme ich immer den gleichen Fehler und ich komme nicht weiter, bin auch absoluter Anfänger in dem Bereich Scripts und hoffe, das jemand vielleicht den Fehler findet.
Fehlermeldung: executing script synology from winbox failed, please check it manually
Danke schon mal für die Hilfe
Leider bekomme ich immer den gleichen Fehler und ich komme nicht weiter, bin auch absoluter Anfänger in dem Bereich Scripts und hoffe, das jemand vielleicht den Fehler findet.
Fehlermeldung: executing script synology from winbox failed, please check it manually
Danke schon mal für die Hilfe
:local macAddress "xx:xx:xx:xx:xx:xx"
:local firewallComment "synology"
:local currentIPv6 ""
:local firewallIPv6 ""
:local foundFirewallRule false
# Debugging: Starte das Skript
:put "Skript gestartet."
# Schritt 1: Suche nach der IPv6-Adresse über die MAC-Adresse
:put "Suche nach der IPv6-Adresse für MAC: $macAddress"
# Suche nach der IPv6-Adresse
:local ndpFound false
:foreach ndp in=[/ipv6 neighbor print as-value] do={
if ([:toupper ($ndp->"mac-address")] = [:toupper $macAddress]) do={
:set currentIPv6 ($ndp->"address")
:set ndpFound true
:put ("Gefundene IPv6-Adresse: " . $currentIPv6)
break: # Beende die Schleife, wenn die IPv6-Adresse gefunden wurde
}
}
# Wenn keine IPv6-Adresse gefunden wurde
:if (!$ndpFound) do={
:put "Fehler: Keine IPv6-Adresse fuer die MAC-Adresse $macAddress gefunden."
:error "Skript beendet."
}
# Schritt 2: Suche nach der Firewall-Regel
:put ("Suche nach einer Filter-Regel mit Kommentar: " . $firewallComment)
:foreach fw in=[/ipv6 firewall filter print as-value] do={
if ([:find ($fw->"comment") $firewallComment] != -1) do={
:set firewallIPv6 ($fw->"src-address")
:set foundFirewallRule true
:put ("Gefundene Firewall-Regel mit IPv6-Adresse: " . $firewallIPv6)
break: # Beende die Schleife, wenn die Regel gefunden wurde
}
}
# ueberpuefen, ob eine Firewall-Regel gefunden wurde
:if (!$foundFirewallRule) do={
:put "Fehler: Keine Firewall-Regel mit dem angegebenen Kommentar gefunden."
:error "Skript beendet."
}
# Schritt 3: Vergleich und Aktualisierung der Firewall-Regel
:if ($firewallIPv6 != $currentIPv6) do={
:put "IPv6-Adresse weicht ab. Aktualisiere Firewall-Regel."
/ipv6 firewall filter set [find comment="$firewallComment"] src-address=$currentIPv6
:put ("Firewall-Regel erfolgreich aktualisiert auf: " . $currentIPv6)
} else={
:put "IPv6-Adresse in der Firewall stimmt ueberein. Keine Aktualisierung notwendig."
}
:put "Skript abgeschlossen."
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668887
Url: https://administrator.de/contentid/668887
Ausgedruckt am: 21.11.2024 um 13:11 Uhr
3 Kommentare
Neuester Kommentar
Da sind ja auch diverse Fehler und Befehle drin die es gar nicht gibt, das hat bestimmt wieder ne KI verbrochen und sich die Befehle einfach hinzugedichtet 😂.
Tipp: Das Skript im Terminal auführen lassen dann siehst du auch die Fehler
An deiner Stelle würde ich aber lieber gleich mit Adresslisten-Einträgen arbeiten und die Adressliste in der Firewall Regel hinterlegen, dann musst du nicht dauernd Firewall Regeln ändern sondern nur noch die IP in der Adressliste, so macht man das normalerweise.
Tipp: Das Skript im Terminal auführen lassen dann siehst du auch die Fehler
/system script run "MeinScript"
:local macAddress "XX:XX:XX:XX:XX:XX"
:local firewallComment "synology"
:local currentIPv6 ""
:local firewallIPv6 ""
:local aEntry [:pick [/ipv6 neighbor find mac-address="$macAddress" && ! address ~ "^fe80"]]
:if ([:len $aEntry] = 0) do={
:error "MAC not found"
}
:local fEntry [:pick [/ipv6 firewall filter find comment="$firewallComment"]]
:if ([:len $fEntry] = 0) do={
:error "Firewall rule not found"
}
:set currentIPv6 ([/ipv6 neighbor get $aEntry address] . "/128")
:set firewallIPv6 [/ipv6 firewall filter get $fEntry dst-address]
:if ($currentIPv6 != $firewallIPv6) do={
:put "Updating firewall address to $currentIPv6"
/ipv6 firewall filter set $fEntry dst-address=$currentIPv6
} else={
:put "Address not changed."
}
An deiner Stelle würde ich aber lieber gleich mit Adresslisten-Einträgen arbeiten und die Adressliste in der Firewall Regel hinterlegen, dann musst du nicht dauernd Firewall Regeln ändern sondern nur noch die IP in der Adressliste, so macht man das normalerweise.