Prefaci
Per a necessitats personals a casa, vaig instal·lar VSphere, en el qual executo un encaminador virtual i un servidor Ubuntu com a servidor multimèdia i un munt d'altres llaminadures, i aquest servidor hauria de ser accessible des d'Internet. Però el problema és que el meu proveïdor proporciona dades estàtiques per diners, que sempre es poden utilitzar per a propòsits més útils. Per tant, vaig utilitzar la combinació ddclient + cloudflare.
Tot va anar bé fins que ddclient va deixar de funcionar. Després de mirar una mica, em vaig adonar que havia arribat el moment de les crosses i les bicicletes, ja que es necessitava massa temps per trobar el problema. Al final, tot es va convertir en un petit dimoni que funciona, i no necessito res més.
Si algú està interessat, benvingut a cat.
Eines utilitzades i com funciona "això".
Així que el primer que vaig descobrir al lloc web de cloudflare és tot el que necessiteu saber
En general, es va prendre com a base l'embolcall
Vaig prendre un dels exemples per actualitzar DNS i vaig afegir l'ús d'un fitxer de configuració i la possibilitat d'actualitzar diversos registres A dins d'una zona i, per descomptat, un nombre il·limitat de zones.
La lògica és la següent:
- L'script rep una llista de zones del fitxer de configuració i les recorre en bucle
- A cada zona, l'script recorre cada registre DNS de tipus A o AAAA i comprova la IP pública amb el registre
- Si la IP és diferent, la canvia; si no, es salta la iteració del bucle i passa a la següent.
- S'adorm durant el temps especificat a la configuració
Instal·lació i configuració
Probablement seria possible fer un paquet .deb, però no sóc bo en això, i no és tan difícil.
Vaig descriure el procés amb gran detall a README.md
Però per si de cas, ho descriuré en rus en termes generals:
- Assegureu-vos que teniu instal·lats python3 i python3-pip, si no, instal·leu-lo (a Windows, python3-pip s'instal·la juntament amb Python)
- Clonar o descarregar el repositori
- Instal·leu les dependències necessàries.
python3 -m pip install -r requirements.txt
- Executeu l'script d'instal·lació
Per a Linux:chmod +x install.sh sudo ./install.sh
Per a Windows: windows_install.bat
- Editeu el fitxer de configuració
Per a Linux:sudoedit /etc/zen-cf-ddns.conf
Per a Windows:
Obriu el fitxer zen-cf-ddns.conf a la carpeta on heu instal·lat l'script.
Aquest és un fitxer JSON normal, la configuració no és gens complicada; he descrit específicament 2 zones diferents com a exemple.
Què hi ha darrere dels instal·ladors?
install.sh per a Linux:
- Es crea un usuari per executar el dimoni, sense crear un directori d'inici i sense la possibilitat d'iniciar sessió.
sudo useradd -r -s /bin/false zen-cf-ddns
- Es crea un fitxer de registre a /var/log/
- Feu que l'usuari acabat de crear sigui el propietari del fitxer de registre
- Els fitxers es copien als seus llocs (config a /etc, fitxer executable a /usr/bin, fitxer de servei a /lib/systemd/system)
- El servei està activat
windows_install.bat per a Windows:
- Copia l'executable i el fitxer de configuració a una carpeta especificada per l'usuari
- Crea una tasca al planificador per executar l'script a l'inici del sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Després de canviar la configuració, cal reiniciar l'script; a Linux tot és senzill i familiar:
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 a Windows, haureu de matar el procés pythonw i tornar a executar l'script (estic massa mandrós per escriure un servei per a Windows en C#):
taskkill /im pythonw.exe
Això completa la instal·lació i configuració, gaudeix-ne per a la teva salut.
Per a aquells que vulguin veure el codi de Python no tan bonic, aquí el teniu
Amb llicència MIT, així que feu amb aquestes coses el que vulgueu.
PD: Entenc que va resultar una mica de crossa, però fa la seva feina amb un cop.
Actualització: 11.10.2019/17/37 XNUMX:XNUMX
He trobat 1 problema més, i si algú em diu com resoldre'l, li estaré molt agraït.
El problema és que si instal·leu dependències sense sudo python -m pip install -r ..., aleshores els mòduls no seran visibles des de l'usuari del servei i no m'agradaria obligar els usuaris a instal·lar mòduls amb sudo, i això és incorrecte.
Com fer-lo veure bonic?
UPD: 11.10.2019/19/16 XNUMX:XNUMX El problema es va resoldre amb venv.
Hi ha hagut diversos canvis. El proper llançament serà en els propers dies.
Font: www.habr.com