El vostre propi DNS dinàmic utilitzant CloudFlare

Prefaci

El vostre propi DNS dinàmic utilitzant CloudFlare 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 API. I ja m'havia assegut a implementar-ho tot en Python (després de familiaritzar-me amb Python, l'utilitzo cada cop més per a algunes tasques senzilles o quan necessito fer un prototip ràpidament), quan de sobte em vaig trobar amb una implementació gairebé ja feta.
En general, es va prendre com a base l'embolcall python-cloudflare.

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:

  1. L'script rep una llista de zones del fitxer de configuració i les recorre en bucle
  2. A cada zona, l'script recorre cada registre DNS de tipus A o AAAA i comprova la IP pública amb el registre
  3. Si la IP és diferent, la canvia; si no, es salta la iteració del bucle i passa a la següent.
  4. 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 pàgina del repositori.

Però per si de cas, ho descriuré en rus en termes generals:

  1. 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)
  2. Clonar o descarregar el repositori
  3. Instal·leu les dependències necessàries.
    python3 -m pip install -r requirements.txt

  4. Executeu l'script d'instal·lació
    Per a Linux:

    chmod +x install.sh
    sudo ./install.sh

    Per a Windows: windows_install.bat

  5. 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:

  1. 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

  2. Es crea un fitxer de registre a /var/log/
  3. Feu que l'usuari acabat de crear sigui el propietari del fitxer de registre
  4. Els fitxers es copien als seus llocs (config a /etc, fitxer executable a /usr/bin, fitxer de servei a /lib/systemd/system)
  5. El servei està activat

windows_install.bat per a Windows:

  1. Copia l'executable i el fitxer de configuració a una carpeta especificada per l'usuari
  2. 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 repositori a GitHub.

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

Afegeix comentari