prefazione
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
In generale, l'involucro è stato preso come base
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:
- Lo script riceve un elenco di zone dal file di configurazione e le scorre in ciclo
- 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
- Se l'IP è diverso lo cambia, altrimenti salta l'iterazione del loop e passa a quella successiva.
- 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
Ma per ogni evenienza, lo descriverò in russo in termini generali:
- Assicurati di avere installato python3 e python3-pip, in caso contrario installali (su Windows, python3-pip è installato insieme a Python)
- Clona o scarica il repository
- Installa le dipendenze richieste.
python3 -m pip install -r requirements.txt
- Esegui lo script di installazione
Per Linux:chmod +x install.sh sudo ./install.sh
Per Windows: windows_install.bat
- 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:
- 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
- Viene creato un file di registro in /var/log/
- Rendi l'utente appena creato il proprietario del file di registro
- I file vengono copiati nelle loro posizioni (config in /etc, file eseguibile in /usr/bin, file di servizio in /lib/systemd/system)
- Il servizio è attivato
windows_install.bat per Windows:
- Copia il file eseguibile e di configurazione in una cartella specificata dall'utente
- 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
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