Me he tomado la libertad de modificar el script que mantiene actualizada la dirección IP de nuestros cacharros en DuckDNS de
@pokoyo para que también nos mantenga actualizada la dirección IPv6 en caso que dispongamos de la misma.
Lo he hecho por si a alguien le interesa y le sirve de ayuda.
Por supuesto, esto tan sólo es una modificación del script, el reconocimiento total del mismo es para
@pokoyo
Bueno, vamos a lo que es el código en si mismo, se han modificado algunos comentarios originales para aportar información que creo relevante para entender ciertas modificaciones.
Código:
###########################################
# Actualizar la dirección IPv6 en DuckDNS #
###########################################
# Modificad las siguientes tres asignaciones de variables, relativas a la interfaz wan, el dominio y el token, con vuestros datos. Se cambia lo que va entrecomillado.
# Nótese que se modifican ciertas variables para que no coincidan con las del script para la dirección IPv4. Sino se hace así daría error por ser variables globales.
# Poned aquí la interfaz por la que te conectas a internet.
# En mi caso difiere de la interfaz para IPv4, si ponía la misma no funcionaba el script y no se actualizaba en DuckDNS.
# Ejemplo:
:global wanInterface "vlan20-internet"
# Poned aquí el dominio duckdns que queramos mantener actualizado, ejemplo:
:global domain "pericoeldelospalotes.duckdns.org"
# Nota: Si queremos actualizar más de un dominio también lo declaramos, ejemplo:
# :global domain2 "parapericoeldelospalotes.duckdns.org"
# :global domain3 "depericoeldelospalotes.duckdns.org"
# etc.
# Poned aquí el token que nos da duckdns para nuestra cuenta, ejemplo:
:global token "fc8e6521-35b8-1234-b915-db6345a31c75"
# Inicio del Script
:global actualIPv6 value=[/ip address get [find where interface=$wanInterface] value-name=address];
:global actualIPv6 value=[:pick $actualIPv6 -1 [:find $actualIPv6 "/" -1] ];
:if ([:len [/file find where name=ipstorev6.txt]] < 1 ) do={
/file print file=ipstorev6.txt where name=ipstorev6.txt;
/delay delay-time=2;
/file set ipstorev6.txt contents="0.0.0.0";
};
:global previousIPv6 value=[/file get [find where name=ipstorev6.txt ] value-name=contents];
:if ($previousIPv6 != $actualIPv6) do={
:log info message=("Intentando actualizar DuckDNS con la IP actual ".$actualIPv6." - La IP previa era ".$previousIPv6);
/tool fetch mode=https keep-result=yes dst-path=duckdns-resultv6.txt address=[:resolve www.duckdns.org] port=443 host=www.duckdns.org src-path=("/update?domains=$domain&token=$token&ipv6=".$actualIPv6);
# Nota: Si queremos actualizar más de un dominio también lo enviamos para que se actualice, ejemplo:
# /tool fetch mode=https keep-result=yes dst-path=duckdns-resultv6.txt address=[:resolve www.duckdns.org] port=443 host=www.duckdns.org src-path=("/update?domains=$domain2&token=$token&ipv6=".$actualIPv6);
# /tool fetch mode=https keep-result=yes dst-path=duckdns-resultv6.txt address=[:resolve www.duckdns.org] port=443 host=www.duckdns.org src-path=("/update?domains=$domain3&token=$token&ipv6=".$actualIPv6);
# etc.
/delay delay-time=5;
:global lastChangev6 value=[/file get [find where name=duckdns-resultv6.txt ] value-name=contents];
:global previousIPv6 value=$actualIPv6;
/file set ipstorev6.txt contents=$actualIPv6;
:if ($lastChangev6 = "OK") do={:log warning message=("DuckDNS actualizado correctamente con la IP ".$actualIPv6);};
:if ($lastChangev6 = "KO") do={:log error message=("Fallo al actualizar DuckDNS con la nueva IP ".$actualIPv6);};
};
Lo programamos para que se mantenga actualizado:
Código:
# Programar la ejecución automática del script
/system scheduler
add interval=30m name=duckduns-updater-ipv6 on-event=duckdns-update-ipv6 policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/15/2023 \
start-time=00:00:00
Un saludo.