flamy81
Goto Top

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

: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."  

Content-ID: 668887

Url: https://administrator.de/contentid/668887

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

150704
Lösung 150704 20.10.2024 aktualisiert um 19:49:27 Uhr
Goto Top
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
/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.
flamy81
flamy81 20.10.2024 um 20:06:16 Uhr
Goto Top
Vielen Dank, ja war auch eine ki mit involviert 😁 wie gesagt. Danke Dir, werde es mal versuchen und mit den Adresslisten ist ein guter Hinweis😄
flamy81
flamy81 21.10.2024 um 18:42:06 Uhr
Goto Top
So, hab das Script noch mal abgeändert, für eine Adressliste, danke für den Tip😄
Danke noch mal für die Hilfe🙂

:local macAddress "00:11:32:C4:AB:61"    
:local AddressListname "synology"    
:local currentIPv6 ""    
:local addresslistIPv6 ""    

: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 address-list find list="$AddressListname"]]    
:if ([:len $fEntry] = 0) do={
    :error "keine ipv6 Adresse gefunden"    
}

:set currentIPv6 ([/ipv6 neighbor get $aEntry address] . "/128")    
:set addresslistIPv6 [/ipv6 firewall address-list get $fEntry address]

:if ($currentIPv6 != $addresslistIPv6) do={
    :put "Updating address to $currentIPv6"    
    /ipv6 firewall address-list set $fEntry address=$currentIPv6
} else={
    :put "Address not changed."    
}