DynDNS con un router MikroTik

Skip to main content
Du bist hier:
Drucken

DynDNS con un router MikroTik

DynDNS con un router MikroTik

Se la tua connessione internet non ha un indirizzo IP fisso, puoi far aggiornare automaticamente un record DNS presso FireStorm dal tuo router MikroTik. Il router controlla a brevi intervalli il proprio IP WAN e comunica ogni cambiamento tramite la nostra API DNS. Così un nome come vpn.tuodominio.ch resta sempre raggiungibile, senza ricorrere a un fornitore DynDNS esterno.

Lo script è volutamente parsimonioso. Per prima cosa risolve il record tramite un resolver pubblico. Se l’IP corrisponde già, l’esecuzione termina senza nemmeno una chiamata all’API. Solo in caso di differenza legge il valore attuale da noi e imposta di nuovo il record.

 

Requisiti

  • Il dominio deve puntare ai nostri server dei nomi, la zona DNS deve quindi essere ospitata presso FireStorm
  • Accesso API attivato nell’area clienti (admin.firestorm.ch => Account => Profilo cliente)
  • Un MikroTik con RouterOS 7
  • Il record DNS da aggiornare deve già esistere. Crealo una volta nell’area clienti con un IP qualsiasi e un TTL di 60

 

1. Creare una chiave API

Accedi all’area clienti e apri Account => Profilo cliente.

Menu Account con la voce Profilo cliente

Spunta Accesso API e clicca su GESTISCI CHIAVI API.

Attivare l'accesso API e aprire la gestione delle chiavi API

Crea una nuova chiave:

  • Denominazione: per esempio dyndns mikrotik
  • Domini: seleziona solo il dominio che il router può modificare
  • Consenti anche la gestione DNS completa: spunta la casella. Senza questa autorizzazione la chiave può solo impostare challenge per i certificati, ma non modificare un record A

Finestra di gestione delle chiavi API con denominazione, scelta dei domini e autorizzazione

Annota poi il nome utente e la chiave API. La chiave viene mostrata una sola volta.

 

2. Trovare l’ID della zona

Lo script lavora con l’ID numerico della zona, che ti viene fornito dall’API. La chiamata seguente funziona su qualsiasi computer con curl, per esempio su Mac, su Linux o in Windows PowerShell:

curl -H "X-Api-Key: LA-TUA-CHIAVE-API" https://api.firestorm.ch/dns/v1/zones

La risposta contiene tutte le zone a cui la chiave può accedere, ciascuna con id e name. L’id del tuo dominio andrà inserito più avanti nello script.

 

3. Importare il certificato radice nel router

RouterOS non contiene alcuna autorità di certificazione di serie. Affinché il router possa verificare davvero la connessione alla nostra API, importa una volta il certificato radice ISRG Root X1 di Let’s Encrypt. Senza questo passaggio dovresti disattivare la verifica del certificato, cosa che sconsigliamo.

Scarica il file isrgrootx1.pem da letsencrypt.org/certs/isrgrootx1.pem e trascinalo in Winbox nell’area Files. Poi, nel terminale:

/certificate import file-name=isrgrootx1.pem passphrase=""

In alternativa il router scarica il file da solo:

/tool fetch url="https://letsencrypt.org/certs/isrgrootx1.pem" check-certificate=no
/certificate import file-name=isrgrootx1.pem passphrase=""

Con la chiamata seguente verifichi che la connessione verificata funzioni. Se torna un elenco di zone, è tutto pronto:

/tool fetch url="https://api.firestorm.ch/dns/v1/zones" http-header-field="X-Api-Key: LA-TUA-CHIAVE-API" check-certificate=yes-without-crl as-value output=user

 

4. Creare lo script

Scarica lo script: firestorm_mikrotik_dyndns.rsc

In Winbox o WebFig vai su System => Scripts, clicca su [+], inserisci un nome, per esempio firestorm_dyndns_update, e imposta le autorizzazioni read, write, policy e test. Incolla il contenuto del file e adatta le impostazioni in alto:

Impostazione Significato
apiUser Nome utente del passo 1
apiKey Chiave API del passo 1
zoneId ID della zona del passo 2
recordName Nome completo del record, per esempio vpn.tuodominio.ch
recordType A per IPv4 o AAAA per IPv6
wanInterface Nome della tua interfaccia WAN. Con PPPoE non è ether1 ma per esempio pppoe-out1
ttl Durata di validità in secondi, consigliata 60

Clicca poi su Run Script e guarda nel Log. Lì vedi se il record era già aggiornato oppure è appena stato modificato.

 

5. Impostare la pianificazione

Sotto System => Scheduler clicca su [+]:

  • Name: per esempio FirestormDyndns
  • Interval: 00:05:00 per un controllo ogni cinque minuti
  • On Event: esattamente il nome del tuo script, per esempio firestorm_dyndns_update
  • Policies: imposta anche qui read, write, policy e test

Script e scheduler con le autorizzazioni read, write, policy e test

Il router ora controlla da solo e ci comunica una modifica soltanto quando l’indirizzo IP è davvero cambiato.

 

Risoluzione dei problemi

«Nessun indirizzo corrispondente trovato sull’interfaccia …»
Il nome dell’interfaccia non è corretto. Sotto IP => Addresses vedi su quale interfaccia si trova il tuo indirizzo pubblico. Con collegamenti PPPoE si tratta della connessione pppoe-out.

«Richiesta API fallita»
Di solito manca il certificato radice del passo 3 oppure la chiave è sbagliata. Prova a mano la chiamata del passo 3.

«Il record … non esiste nella zona …»
Lo script non crea nuovi record, aggiorna soltanto quelli esistenti. Crea il record una volta nell’area clienti.

Risposta «Record not found» durante l’aggiornamento
Nel frattempo il record è stato modificato a mano. Alla prossima esecuzione lo script rilegge il valore attuale e si corregge da solo.

Il router si trova dietro una connessione senza IP pubblico
Se il tuo provider assegna solo un indirizzo privato, per esempio dell’intervallo 100.64.x.x, lo script inserisce esattamente quello e il nome resta irraggiungibile dall’esterno. In questo caso ti serve un indirizzo IP pubblico dal tuo provider.

 

Altre istruzioni sulla nostra interfaccia si trovano nell’articolo API DNS. Lo script ci è stato gentilmente messo a disposizione da un nostro cliente.

Related Post