mirror of
https://github.com/eworm-de/routeros-scripts
synced 2024-05-14 08:04:19 +00:00
16e93018ef
Looks like fetch command has a timing issue with the tunnelbroker endpoint... We have to try several times to work around this. Consider the update failed on third error.
62 lines
2.2 KiB
Plaintext
62 lines
2.2 KiB
Plaintext
#!rsc by RouterOS
|
|
# RouterOS script: update-tunnelbroker
|
|
# Copyright (c) 2013-2022 Christian Hesse <mail@eworm.de>
|
|
# Michael Gisbers <michael@gisbers.de>
|
|
# https://git.eworm.de/cgit/routeros-scripts/about/COPYING.md
|
|
#
|
|
# provides: ppp-on-up
|
|
#
|
|
# update local address of tunnelbroker interface
|
|
# https://git.eworm.de/cgit/routeros-scripts/about/doc/update-tunnelbroker.md
|
|
|
|
:local 0 "update-tunnelbroker";
|
|
:global GlobalFunctionsReady;
|
|
:while ($GlobalFunctionsReady != true) do={ :delay 500ms; }
|
|
|
|
:global CertificateAvailable;
|
|
:global LogPrintExit2;
|
|
:global ParseKeyValueStore;
|
|
|
|
:if ([ /ip/cloud/get ddns-enabled ] != true) do={
|
|
$LogPrintExit2 error $0 ("IP cloud DDNS is not enabled.") true;
|
|
}
|
|
|
|
# Get the current ip address from cloud
|
|
/ip/cloud/force-update;
|
|
:while ([ /ip/cloud/get status ] != "updated") do={
|
|
:delay 1s;
|
|
}
|
|
:local PublicAddress [ /ip/cloud/get public-address ];
|
|
|
|
:foreach Interface in=[ /interface/6to4/find where comment~"^tunnelbroker" !disabled ] do={
|
|
:local InterfaceVal [ /interface/6to4/get $Interface ];
|
|
|
|
:if ($PublicAddress != $InterfaceVal->"local-address") do={
|
|
:local I 0;
|
|
:local Success false;
|
|
:local Comment [ $ParseKeyValueStore ($InterfaceVal->"comment") ];
|
|
|
|
:if ([ $CertificateAvailable "Starfield Secure Certificate Authority - G2" ] = false) do={
|
|
$LogPrintExit2 error $0 ("Downloading required certificate failed.") true;
|
|
}
|
|
$LogPrintExit2 info $0 ("Local address changed, sending UPDATE to tunnelbroker! New address: " . $PublicAddress) false;
|
|
:while ($I < 3 && $Success = false) do={
|
|
:do {
|
|
/tool/fetch check-certificate=yes-without-crl \
|
|
("https://ipv4.tunnelbroker.net/nic/update\?hostname=" . $Comment->"id") \
|
|
user=($Comment->"user") password=($Comment->"pass") output=none as-value;
|
|
:set Success true;
|
|
} on-error={
|
|
:delay 10s;
|
|
:set I ($I + 1);
|
|
}
|
|
}
|
|
:if ($Success = false) do={
|
|
$LogPrintExit2 error $0 ("Failed sending the local address to tunnelbroker! Wrong credentials?") true;
|
|
}
|
|
/interface/6to4/set $Interface local-address=$PublicAddress;
|
|
} else={
|
|
$LogPrintExit2 debug $0 ("All tunnelbroker configuration is up to date for interface " . $InterfaceVal->"name" . ".") false;
|
|
}
|
|
}
|