Il tuo DNS dinamico con CloudFlare

Introduzione

Il tuo DNS dinamico con CloudFlare Per uso personale a casa, ho installato VSphere, su cui gestisco un router virtuale e un server Ubuntu come media server e molte altre cose gustose, e questo server deve essere accessibile da Internet. Ma il problema è che il mio fornitore offre la connessione statica a pagamento, a cui posso sempre trovare un uso più utile. Quindi ho utilizzato un insieme di ddclient + cloudflare.

Tutto andava bene finché ddclient non ha smesso di funzionare. Dopo averlo esaminato un po', ho capito che era il momento di qualche soluzione d'emergenza e di creare dal nulla, poiché il tempo per trovare il problema era diventato troppo. Alla fine, tutto si è trasformato in un piccolo demone che semplicemente funziona, e io non ho bisogno di altro.
Chi è interessato è il benvenuto a proseguire.

Strumenti utilizzati e come funziona "questo"

Quindi, prima di tutto, ho scoperto sul sito di cloudflare tutto ciò che bisogna sapere su API. E stavo già per implementare tutto in Python (dopo aver familiarizzato con Python, lo utilizzo sempre più per compiti semplici o quando devo creare rapidamente un prototipo), quando mi sono imbattuto in un'implementazione praticamente pronta.
In sostanza, ho preso come base un 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 attraversa in cicli ogni record DNS di tipo A o AAAA e confronta l'IP pubblico con il record
  3. Se l'IP è diverso, lo cambia; altrimenti, salta l'iterazione del ciclo e passa al successivo
  4. Si addormenta per il tempo specificato nel file di configurazione

Installazione e configurazione

Probabilmente si potrebbe creare anche un pacchetto .deb, ma non sono esperto in questo, e non è nemmeno così complicato.
Ho descritto il processo abbastanza dettagliatamente nel README.md su pagina del repository.

Ma per sicurezza, lo descriverò in russo in termini 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 dove hai installato lo script.

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

Cosa si nasconde dietro gli installer?

install.sh per Linux:

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

  2. Viene creato un file per registrare i log in /var/log/
  3. Diventa proprietario del file di log l'utente appena creato
  4. I file vengono copiati nei loro luoghi (configurazione in /etc, file eseguibile in /usr/bin, file del 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 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 sarà necessario killare il processo pythonw e riavviare lo script (non mi va di scrivere un servizio per Windows in C#):

taskkill /im pythonw.exe

Con questo la installazione e configurazione sono terminate, usatelo in salute.

Per chi vuole vedere non il codice Python più bello, ecco il repository su GitHub.

Licenza MIT, quindi fate con questo bene ciò che volete.

P.S.: Capisco che è venuto un po' rozzo, ma con il suo compito se la cava egregiamente.

UPD: 11.10.2019 17:37
Ho trovato un altro problema, e se qualcuno potesse suggerire come risolverlo, sarei molto grato.
Il problema è che se si installano le dipendenze senza sudo python -m pip install -r …, i moduli non saranno visibili dall'utente del servizio, e non mi piacerebbe costringere gli utenti a installare moduli sotto sudo, né è giusto farlo.
Come si può fare correttamente, per renderlo bello?
UPD: 11.10.2019 19:16 Il problema è stato risolto utilizzando venv.
Sono state apportate diverse modifiche. Un altro rilascio sarà pubblicato 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