Il tuo dynamic DNS con CloudFlare

Prefazione

Il tuo dynamic DNS con CloudFlare Per esigenze personali a casa ho attivato VSphere, su cui gestisco un router virtuale e un server Ubuntu come media server, insieme a diverse altre cosine interessanti, e questo server deve essere accessibile da Internet. Ma il problema è che il mio fornitore offre un indirizzo statico a pagamento, che potrei usare per scopi più utili. Perciò ho utilizzato una combinazione di ddclient + cloudflare.

Tutto andava bene, finché ddclient non ha smesso di funzionare. Dopo averci smanettato un po', ho capito che era il momento di ricorrere a soluzioni improvvisate, poiché cercare il problema richiedeva troppo tempo. Alla fine, tutto si è tradotto in un piccolo demone che funziona semplicemente, e per me non serve altro.
Chi è interessato è il benvenuto sotto il tag.

Strumenti utilizzati e come «questo» funziona

Quindi, per prima cosa, ho appreso dal sito di cloudflare tutto ciò che c'è da sapere su API. E stavo per realizzarlo tutto in Python (dopo aver conosciuto Python, lo uso sempre più per compiti semplici o quando devo fare rapidamente un prototipo), quando mi sono imbattuto in una realizzazione praticamente pronta.
In generale, è stato preso come base il wrapper python-cloudflare.

Ho preso uno degli esempi per l'aggiornamento del DNS e ho aggiunto l'uso di un file di configurazione e la possibilità di aggiornare più record A all'interno della zona, e naturalmente un numero illimitato di zone.

La logica è la seguente:

  1. Lo script ottiene dal file di configurazione un elenco di zone e le attraversa in un ciclo.
  2. In ogni zona, lo script percorre in ciclo ogni record DNS di tipo A o AAAA e confronta l'indirizzo IP pubblico con il record.
  3. Se l'IP è diverso, lo cambia; se è lo stesso, salta l'iterazione del ciclo e passa al successivo.
  4. Va in pausa per il tempo specificato nella configurazione.

Installazione e configurazione

Probabilmente si potrebbe fare anche un pacchetto .deb, ma non sono molto esperto in questo, e non è poi così complicato.
Ho descritto il processo in modo abbastanza dettagliato nel README.md sulla pagina del repository..

Ma per sicurezza lo descriverò in russo con parole generali:

  1. Assicurati di avere installato python3 e python3-pip; se non ce l'hai, installali (su Windows, python3-pip si installa insieme a Python).
  2. Clona o scarica il repository.
  3. Installa le dipendenze necessarie.
    python3 -m pip install -r requirements.txt

  4. Esegui lo script di installazione.
    Per Linux:
    chmod +x install.sh
    sudo ./install.sh

    Per Windows: windows_install.bat

  5. Modifica il file di configurazione.
    Per Linux:
    sudoedit /etc/zen-cf-ddns.conf

    Per Windows:

    Apri il file zen-cf-ddns.conf nella cartella in cui hai installato lo script.

    È un file JSON standard; per le impostazioni non c'è nulla di complicato – ho descritto come esempio 2 zone diverse in esso.

Cosa si nasconde dietro gli installer?

install.sh per Linux:

  1. Viene creato un utente per eseguire il demone, senza la creazione di una home directory e senza possibilità di login.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Viene creato un file per la registrazione dei log in /var/log/
  3. Impostiamo il proprietario del file di log sull'utente appena creato.
  4. I file vengono copiati nelle loro posizioni (il config in /etc, il file eseguibile in /usr/bin, il file di servizio in /lib/systemd/system)
  5. Il servizio viene attivato.

windows_install.bat per Windows:

  1. Copia il file eseguibile e il file di configurazione nella cartella specificata dall'utente.
  2. Crea un'attività nel pianificatore per eseguire lo script all'avvio del sistema.
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Dopo aver modificato il config, lo script deve essere riavviato, in Linux è tutto semplice e familiare:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

per Windows dovrai terminare il processo pythonw e rilanciare lo script (è troppo complicato per me scrivere un servizio in Windows in C#):

taskkill /im pythonw.exe

L'installazione e la configurazione sono terminate, ora puoi utilizzarlo liberamente.

Per chi desidera vedere un codice Python non proprio elegante, ecco repository su GitHub.

Licenza MIT, quindi sentitevi liberi di fare ciò che volete con questo.

P.S.: Capisco che risulta un po' un lavoro artigianale, ma sta svolgendo il suo compito egregiamente.

UPD: 11.10.2019 17:37
Ho trovato un altro problema e sarei molto grato se qualcuno potesse darmi una mano a risolverlo.
Il problema è che se installo le dipendenze senza sudo python -m pip install -r …, i moduli non saranno visibili per l'utente del servizio, e non vorrei costringere gli utenti a installare i moduli con sudo, neanche è giusto farlo.
Come si dovrebbe fare per rendere il tutto più presentabile?
UPD: 11.10.2019 19:16 Il problema è stato risolto utilizzando venv.
Ci sono stati alcuni cambiamenti. Un nuovo rilascio arriverà nei prossimi giorni.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster