Antro di Jacopo

Zeroshell: DuckDNS


Introduzione

Spesso si ha la necessità di associare ad un indirizzo IP dinamico un nome di dominio. La soluzione più famosa è senza dubbio DynDNS, ma dal 2013 i suoi serivizi sono a pagamento. Un'alternativa è rappresentata da No-IP, ma anche questo servizio ha dei difetti.

DuckDNS è un sistema gratuito che permette sino a 5 domini per account, aggiornabili in continuazione tramite una pratica API. Vediamo come configurarlo su Zeroshell.

Registriamo il sottodominio

Per prima cosa sarà necessario recarsi sul sito di DuckDNS e registrare un account ed un dominio. Una volta fatto ciò, andiamo in «Install», selezioniamo il sottodominio e clicchiamo su «Linux cron».

Copiamo la stringa di curl, che sarà simile a questa: echo url="https://www.duckdns.org/update?domains=exampledomain&token=a7c4d0ad-114e-40ef-ba1d-d217904a50f2&ip=" | curl -k -o ~/duckdns/duck.log -K -

Modifichiamo l'ultima parte (~/duckdns/duck.log) in modo che sia /Database/duck.log.

Configuriamo Zeroshell

Entriamo su Zeroshell e facciamo clic su «Scripts/Cron», poi su «Add Job» in basso. Diamo un nome al cronjob (esempio: DUCKDNS) e confermiamo. Incolliamo ora la stringa che abbiamo copiato da DuckDNS.org nella casella di testo centrale, selezioniamo «05» nel campo «Minute», attiviamo il cronjob e salviamo.

Verifichiamo il funzionamento

Facciamo clic su Test e controlliamo che compaia OK tra l'output. Controlliamo poi dall'interfaccia di DuckDNS.org che l'IP corrisponda al vero.

Appendice: configurazione con interfaccia specifica

Nel caso si abbiano due interfacce su Zeroshell può capitare che serva fare in modo che l'IP corrisponda solo ad una specifica interfaccia.

Zeroshell non supporta nativamente questa funzione, perciò dobbiamo arrangiarci.

In primo luogo, servirà disporre di un server Web con PHP o un altro linguaggio di scripting a scelta. Va bene anche un hosting gratuito come freehostingeu.com.

Carichiamo quindi un semplice script che ritorni l'indirizzo IP del visitatore in plain text. Ad esempio, in PHP:

<?php
header("Content-Type: text/plain");
echo $_SERVER['REMOTE_ADDR'];
?>

Per chi non avesse a disposizione un server Web o vuole controllare il risultato, può usare il mio script pubblico.

Il cronjob andrà adeguato, e dovrà essere simile a questo:

echo url="https://www.duckdns.org/update?domains=exampledomain&token=a7c4d0ad-114e-40ef-ba1d-d217904a50f2&ip=`curl
http://vostroserver.example/ip.php`&verbose=true" | curl --ipv4 -k -o /Database/duck.log -K -

In seguito, si può aggiungere una regola dal Net Balancer in modo che tutte le richieste verso quel server passino attraverso l'interfaccia che si desidera collegare con il DuckDNS.