DynDNS con un router MikroTik
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.
Spunta Accesso API e clicca su GESTISCI 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
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:00per un controllo ogni cinque minuti - On Event: esattamente il nome del tuo script, per esempio
firestorm_dyndns_update - Policies: imposta anche qui
read,write,policyetest
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.



