Tu propio DNS dinámico usando CloudFlare

prefacio

Tu propio DNS dinámico usando CloudFlare Para necesidades personales en casa, instalé VSphere, en el que ejecuto un enrutador virtual y un servidor Ubuntu como servidor de medios y muchas otras cosas, y se debería poder acceder a este servidor desde Internet. Pero el problema es que mi proveedor proporciona datos estáticos a cambio de dinero, que siempre pueden utilizarse para fines más útiles. Por lo tanto, utilicé la combinación ddclient + cloudflare.

Todo estuvo bien hasta que ddclient dejó de funcionar. Tras husmear un poco me di cuenta de que había llegado el momento de las muletas y las bicicletas, ya que estaba tardando demasiado en encontrar el problema. Al final, todo se convirtió en un pequeño demonio que simplemente funciona y no necesito nada más.
Si alguien está interesado, bienvenido al gato.

Herramientas utilizadas y cómo funciona

Entonces, lo primero que descubrí en el sitio web de Cloudflare es todo lo que necesitas saber sobre API. Y ya me había sentado a implementar todo en Python (después de familiarizarme con Python, lo uso cada vez más para algunas tareas simples o cuando necesito hacer rápidamente un prototipo), cuando de repente me encontré con una implementación casi lista para usar.
En general, se tomó como base el envoltorio. python-cloudflare.

Tomé uno de los ejemplos para actualizar DNS y agregué el uso de un archivo de configuración y la capacidad de actualizar varios registros A dentro de una zona y, por supuesto, un número ilimitado de zonas.

La logica es como sigue:

  1. El script recibe una lista de zonas del archivo de configuración y las recorre en bucle.
  2. En cada zona, el script recorre cada registro DNS de tipo A o AAAA y verifica la IP pública con el registro.
  3. Si la IP es diferente, la cambia; si no, se salta la iteración del bucle y pasa a la siguiente.
  4. Se queda dormido durante el tiempo especificado en la configuración.

Instalacion y configuracion

Probablemente sería posible crear un paquete .deb, pero no soy bueno en esto y no es tan difícil.
Describí el proceso con gran detalle en README.md en página del repositorio.

Pero por si acaso, lo describiré en ruso en términos generales:

  1. Asegúrese de tener instalados python3 y python3-pip; si no, instálelos (en Windows, python3-pip se instala junto con Python)
  2. Clonar o descargar el repositorio
  3. Instale las dependencias necesarias.
    python3 -m pip install -r requirements.txt

  4. Ejecute el script de instalación
    Para Linux:

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

    Para Windows: windows_install.bat

  5. Editar el archivo de configuración
    Para Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Para ventanas:

    Abra el archivo zen-cf-ddns.conf en la carpeta donde instaló el script.

    Este es un archivo JSON normal, la configuración no es nada complicada; describí específicamente 2 zonas diferentes como ejemplo.

¿Qué hay detrás de los instaladores?

instalar.sh para Linux:

  1. Se crea un usuario para ejecutar el demonio, sin crear un directorio de inicio y sin la posibilidad de iniciar sesión.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Se crea un archivo de registro en /var/log/
  3. Hacer que el usuario recién creado sea el propietario del archivo de registro
  4. Los archivos se copian en sus lugares (config en /etc, archivo ejecutable en /usr/bin, archivo de servicio en /lib/systemd/system)
  5. El servicio está activado.

windows_install.bat para Windows:

  1. Copia el archivo ejecutable y de configuración a una carpeta especificada por el usuario.
  2. Crea una tarea en el programador para ejecutar el script al iniciar el sistema.
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Después de cambiar la configuración, es necesario reiniciar el script; en Linux todo es simple y 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 tendrás que finalizar el proceso de Pythonw y volver a ejecutar el script (soy demasiado vago para escribir un servicio para Windows en C#):

taskkill /im pythonw.exe

Esto completa la instalación y configuración, disfrútalo para tu salud.

Para aquellos que quieran ver el código Python no tan bonito, aquí está repositorio en GitHub.

Con licencia del MIT, así que haz con estas cosas lo que quieras.

PD: Entiendo que resultó ser un poco una muleta, pero hace su trabajo a las mil maravillas.

ACTUALIZADO: 11.10.2019/17/37 XNUMX:XNUMX
Encontré 1 problema más, y si alguien me dice como solucionarlo se lo agradeceré mucho.
El problema es que si instala dependencias sin sudo python -m pip install -r..., entonces los módulos no serán visibles para el usuario del servicio, y no me gustaría obligar a los usuarios a instalar módulos en sudo, y esto es incorrecto.
¿Cómo hacer que luzca hermosa?
UPD: 11.10.2019/19/16 XNUMX:XNUMX El problema se resolvió usando venv.
Ha habido varios cambios. El próximo lanzamiento será en los próximos días.

Fuente: habr.com

Añadir un comentario