O teu propio DNS dinámico usando CloudFlare

Prefacio

O teu propio DNS dinámico usando CloudFlare Para necesidades persoais na casa, instalei VSphere, no que executo un enrutador virtual e un servidor Ubuntu como servidor multimedia e unha morea de outras golosinas, e este servidor debería ser accesible desde Internet. Pero o problema é que o meu provedor dá datos estáticos por diñeiro, que sempre se poden usar para fins máis útiles. Polo tanto, usei a combinación ddclient + cloudflare.

Todo estivo ben ata que ddclient deixou de funcionar. Despois de mirar un pouco, decateime de que chegou o momento das muletas e das bicicletas, xa que tardaba demasiado en atopar o problema. Ao final, todo se converteu nun pequeno daemon que só funciona, e non necesito nada máis.
Se alguén está interesado, benvido ao gato.

Ferramentas utilizadas e como funciona "iso".

Entón, o primeiro que descubrín no sitio web de cloudflare é todo o que necesitas saber API. E xa me sentara a implementar todo en Python (despois de familiarizarme con Python, úsoo cada vez máis para algunhas tarefas sinxelas ou cando necesito facer rapidamente un prototipo), cando de súpeto atopeime cunha implementación case preparada.
En xeral, tomouse o envoltorio como base python-cloudflare.

Tomei un dos exemplos para actualizar o DNS e engadín o uso dun ficheiro de configuración e a posibilidade de actualizar varios rexistros A dentro dunha zona e, por suposto, un número ilimitado de zonas.

A lóxica é a seguinte:

  1. O script recibe unha lista de zonas do ficheiro de configuración e pasa por elas
  2. En cada zona, o script recorre cada rexistro DNS de tipo A ou AAAA e verifica a IP pública co rexistro.
  3. Se a IP é diferente, cámbiaa; se non, omite a iteración do bucle e pasa á seguinte.
  4. Queda durmido durante o tempo especificado na configuración

Instalación e configuración

Probablemente sería posible facer un paquete .deb, pero non son bo niso e non é tan difícil.
Describín o proceso con gran detalle en README.md on páxina do repositorio.

Pero por se acaso, describilo en ruso en termos xerais:

  1. Asegúrate de ter instalados python3 e python3-pip, se non, instálao (en Windows, python3-pip está instalado xunto con Python)
  2. Clonar ou descargar o repositorio
  3. Instala as dependencias necesarias.
    python3 -m pip install -r requirements.txt

  4. Executar o script de instalación
    Para Linux:

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

    Para Windows: windows_install.bat

  5. Edite o ficheiro de configuración
    Para Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Para Windows:

    Abra o ficheiro zen-cf-ddns.conf no cartafol onde instalou o script.

    Este é un ficheiro JSON normal, a configuración non é nada complicada: describín especificamente 2 zonas diferentes nel como exemplo.

Que hai detrás dos instaladores?

install.sh para Linux:

  1. Créase un usuario para executar o daemon, sen crear un directorio de inicio e sen a posibilidade de iniciar sesión.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Créase un ficheiro de rexistro en /var/log/
  3. Fai que o usuario recén creado sexa o propietario do ficheiro de rexistro
  4. Os ficheiros son copiados nos seus lugares (config en /etc, ficheiro executable en /usr/bin, ficheiro de servizo en /lib/systemd/system)
  5. O servizo está activado

windows_install.bat para Windows:

  1. Copia o ficheiro executable e de configuración nun cartafol especificado polo usuario
  2. Crea unha tarefa no planificador para executar o script ao iniciar o sistema
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Despois de cambiar a configuración, o script debe reiniciarse; en Linux todo é sinxelo e 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

para Windows terás que matar o proceso pythonw e volver executar o script (son demasiado preguiceiro para escribir un servizo para Windows en C#):

taskkill /im pythonw.exe

Deste xeito completa a instalación e configuración, desfruta da túa saúde.

Para aqueles que queiran ver o código non tan bonito de Python, aquí está repositorio en GitHub.

Licenza MIT, así que fai con estas cousas o que queiras.

PD: Entendo que resultou ser un pouco unha muleta, pero fai o seu traballo a golpe.

Actualización: 11.10.2019/17/37 XNUMX:XNUMX
Atopei 1 problema máis, e se alguén me indica como solucionalo, estarei moi agradecido.
O problema é que se instala dependencias sen sudo python -m pip install -r ..., entón os módulos non serán visibles desde o usuario do servizo, e non me gustaría obrigar aos usuarios a instalar módulos baixo sudo, e isto é non correcto.
Como facelo ver bonito?
UPD: 11.10.2019/19/16 XNUMX:XNUMX O problema resolveuse usando venv.
Houbo varios cambios. O próximo lanzamento será nos próximos días.

Fonte: www.habr.com

Engadir un comentario