Il tuo DNS dinamico utilizzando CloudFlare

prefazione

Il tuo DNS dinamico utilizzando CloudFlare Per esigenze personali a casa, ho installato VSphere, sul quale eseguo un router virtuale e un server Ubuntu come server multimediale e una serie di altre chicche, e questo server dovrebbe essere accessibile da Internet. Ma il problema è che il mio provider fornisce dati statici in cambio di denaro, che possono sempre essere utilizzati per scopi più utili. Pertanto, ho utilizzato la combinazione ddclient + cloudflare.

Tutto andava bene finché ddclient non ha smesso di funzionare. Dopo aver curiosato un po', ho capito che era giunto il momento delle stampelle e delle biciclette, visto che ci voleva troppo tempo per trovare il problema. Alla fine, tutto si è trasformato in un piccolo demone che funziona e basta e non ho bisogno di nient'altro.
Se qualcuno è interessato, benvenuto su cat.

Strumenti utilizzati e come funziona

Quindi la prima cosa che ho scoperto sul sito web di cloudflare è tutto ciò che devi sapere API. E mi ero già seduto per implementare tutto in Python (dopo aver conosciuto Python, lo uso sempre più per alcuni compiti semplici o quando ho bisogno di realizzare rapidamente un prototipo), quando all'improvviso mi sono imbattuto in un'implementazione quasi già pronta.
In generale, l'involucro è stato preso come base python-cloudflare.

Ho preso uno degli esempi di aggiornamento DNS e ho aggiunto l'uso di un file di configurazione e la possibilità di aggiornare diversi record A all'interno di una zona e, ovviamente, un numero illimitato di zone.

La logica è la seguente:

  1. Lo script riceve un elenco di zone dal file di configurazione e le scorre in ciclo
  2. In ciascuna zona, lo script esegue il loop di ciascun record DNS di tipo A o AAAA e controlla l'IP pubblico con il record
  3. Se l'IP è diverso lo cambia, altrimenti salta l'iterazione del loop e passa a quella successiva.
  4. Si addormenta per il tempo specificato nella configurazione

Installazione e configurazione

Probabilmente sarebbe possibile creare un pacchetto .deb, ma non sono bravo in questo e non è poi così difficile.
Ho descritto il processo in grande dettaglio in README.md su pagina del deposito.

Ma per ogni evenienza, lo descriverò in russo in termini generali:

  1. Assicurati di avere installato python3 e python3-pip, in caso contrario installali (su Windows, python3-pip è installato insieme a Python)
  2. Clona o scarica il repository
  3. Installa le dipendenze richieste.
    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.

    Questo è un normale file JSON, le impostazioni non sono complicate: ho descritto specificamente 2 zone diverse come esempio.

Cosa c'è dietro gli installatori?

install.sh per Linux:

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

  2. Viene creato un file di registro in /var/log/
  3. Rendi l'utente appena creato il proprietario del file di registro
  4. I file vengono copiati nelle loro posizioni (config in /etc, file eseguibile in /usr/bin, file di servizio in /lib/systemd/system)
  5. Il servizio è attivato

windows_install.bat per Windows:

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

Dopo aver modificato la configurazione è necessario riavviare lo script; 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 ed eseguire nuovamente lo script (sono troppo pigro per scrivere un servizio per Windows in C#):

taskkill /im pythonw.exe

Questo completa l'installazione e la configurazione, goditela per la tua salute.

Per coloro che vogliono vedere il codice Python non proprio carino, eccolo qui archivio su GitHub.

Licenza del MIT, quindi fai con questa roba quello che vuoi.

PS: capisco che si sia rivelata un po' una stampella, ma fa egregiamente il suo lavoro.

AGGIORNAMENTO: 11.10.2019/17/37 XNUMX:XNUMX
Ho trovato un altro problema e se qualcuno mi dice come risolverlo gli sarò molto grato.
Il problema è che se installi le dipendenze senza sudo python -m pip install -r ..., i moduli non saranno visibili dall'utente del servizio e non vorrei forzare gli utenti a installare i moduli sotto sudo, e questo è Non corretto.
Come farlo sembrare bello?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Il problema è stato risolto utilizzando venv.
Ci sono stati diversi cambiamenti. La prossima uscita avverrà nei prossimi giorni.

Fonte: habr.com

Aggiungi un commento