{"id":38840,"date":"2019-10-31T22:26:17","date_gmt":"2019-10-31T19:26:17","guid":{"rendered":"https:\/\/prohoster.info\/blog\/svoj-dynamic-dns-s-pomoshhyu-cloudflare\/"},"modified":"2019-10-31T22:26:17","modified_gmt":"2019-10-31T19:26:17","slug":"svoj-dynamic-dns-s-pomoshhyu-cloudflare","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare","title":{"rendered":"Tu DNS din\u00e1mico con CloudFlare","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Pr\u00f3logo<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Tu DNS din\u00e1mico con CloudFlare\" src=\"\/wp-content\/uploads\/2019\/10\/d1405e23e86048a05e6707bb5e9e215f.jpg\" style=\"display:block;margin: 0 auto;\" \/> Para necesidades personales en casa, levant\u00e9 VSphere, en el que corro un enrutador virtual y un servidor Ubuntu como servidor multimedia, adem\u00e1s de un mont\u00f3n de otras cosas interesantes, y este servidor debe ser accesible desde Internet. Pero el problema es que mi proveedor cobra por IP est\u00e1tica, que siempre podr\u00eda usarse para algo m\u00e1s \u00fatil. Por eso, estuve utilizando la combinaci\u00f3n de ddclient + cloudflare. <\/p>\n<p>Todo iba bien hasta que ddclient dej\u00f3 de funcionar. Despu\u00e9s de investigar un poco, me di cuenta de que hab\u00eda llegado el momento de soluciones improvisadas, ya que estaba dedicando demasiado tiempo a encontrar el problema. Al final, todo se convirti\u00f3 en un peque\u00f1o demonio que simplemente funciona, y eso es todo lo que necesito. <br \/>\nPara quienes est\u00e9n interesados, bienvenidos a seguir leyendo.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Herramientas utilizadas y c\u00f3mo funciona 'esto'<\/h3>\n<p>\nAs\u00ed que lo primero que hice fue consultar en el sitio de cloudflare, todo lo que necesitaba saber sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/api.cloudflare.com\/\">API<\/a><\/noindex>. Y ya estaba por implementar todo en Python (despu\u00e9s de familiarizarme con Python, lo utilizo cada vez m\u00e1s para tareas simples o cuando necesito hacer un prototipo r\u00e1pidamente), cuando de repente me encontr\u00e9 con una implementaci\u00f3n pr\u00e1cticamente lista.<br \/>\nAs\u00ed que tom\u00e9 como base un wrapper <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/python-cloudflare\">python-cloudflare<\/a><\/noindex>.<\/p>\n<p>Tom\u00e9 uno de los ejemplos para actualizar DNS y a\u00f1ad\u00ed el uso de un archivo de configuraci\u00f3n y la posibilidad de actualizar m\u00faltiples registros A dentro de la zona y, por supuesto, un n\u00famero ilimitado de zonas.<\/p>\n<p>La l\u00f3gica es la siguiente:<\/p>\n<ol>\n<li>El script obtiene de un archivo de configuraci\u00f3n una lista de zonas y las recorre en un ciclo.<\/li>\n<li>En cada zona, el script recorre en un ciclo cada registro DNS tipo A o AAAA y compara la IP p\u00fablica con el registro.<\/li>\n<li>Si la IP es diferente, la cambia; si no, salta a la siguiente iteraci\u00f3n del ciclo. <\/li>\n<li>Se duerme por el tiempo indicado en la configuraci\u00f3n.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Instalaci\u00f3n y configuraci\u00f3n<\/h3>\n<p>\nProbablemente podr\u00eda haber hecho un paquete .deb, pero no soy experto en eso, y tampoco es tan complicado.<br \/>\nHe descrito el proceso con bastante detalle en el README.md en <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DzenDyn\/zen-cf-ddns\">la p\u00e1gina del repositorio.<\/a><\/noindex>.<\/p>\n<p>Pero por si acaso, lo describir\u00e9 en ruso con palabras generales:<\/p>\n<ol>\n<li>Aseg\u00farate de que tengas instalado python3 y python3-pip; si no, inst\u00e1lalo (en Windows, python3-pip se instala junto con Python).<\/li>\n<li>Clona o descarga el repositorio.<\/li>\n<li>Instala las dependencias necesarias.\n<pre><code class=\"plaintext\">python3 -m pip install -r requirements.txt<\/code><\/pre>\n<p>\n<\/li>\n<li>Ejecuta el script de instalaci\u00f3n.<br \/>\nPara Linux:<\/p>\n<pre><code class=\"plaintext\">chmod +x install.sh\nsudo .\/install.sh<\/code><\/pre>\n<p>\nPara Windows: windows_install.bat\n<\/li>\n<li>Edita el archivo de configuraci\u00f3n.<br \/>\nPara Linux:<\/p>\n<pre><code class=\"plaintext\">sudoedit \/etc\/zen-cf-ddns.conf<\/code><\/pre>\n<p>\nPara Windows:<\/p>\n<p>Abre el archivo zen-cf-ddns.conf en la carpeta donde instalaste el script.<\/p>\n<p>Este es un archivo JSON com\u00fan; no hay nada complicado en la configuraci\u00f3n; lo describ\u00ed espec\u00edficamente como un ejemplo de 2 zonas diferentes.\n<\/li>\n<\/ol>\n<p><\/p>\n<h4>\u00bfQu\u00e9 se esconde detr\u00e1s de los instaladores?<\/h4>\n<p>\ninstall.sh para Linux:<\/p>\n<ol>\n<li>Se crea un usuario para ejecutar el demonio, sin crear un directorio home ni permitir el inicio de sesi\u00f3n.\n<pre><code class=\"plaintext\">sudo useradd -r -s \/bin\/false zen-cf-ddns<\/code><\/pre>\n<p>\n<\/li>\n<li>Se crea un archivo para registrar logs en \/var\/log\/<\/li>\n<li>Hacemos propietario del archivo de logs al usuario reci\u00e9n creado<\/li>\n<li>Se copian los archivos a sus lugares correspondientes (configuraci\u00f3n en \/etc, archivo ejecutable en \/usr\/bin, archivo de servicio en \/lib\/systemd\/system)<\/li>\n<li>Se activa el servicio<\/li>\n<\/ol>\n<p>\nwindows_install.bat para Windows:<\/p>\n<ol>\n<li>Copia el archivo ejecutable y el archivo de configuraci\u00f3n en la carpeta especificada por el usuario<\/li>\n<li>Crea una tarea en el programador para ejecutar el script al arrancar el sistema<br \/>\n<code>schtasks \/create \/tn \"CloudFlare Update IP\" \/tr \"%newLocation%\" \/sc onstart<\/code>\n<\/li>\n<\/ol>\n<p>\nDespu\u00e9s de cambiar la configuraci\u00f3n, el script debe reiniciarse; en Linux es simple y familiar:<\/p>\n<pre><code class=\"plaintext\">sudo service zen-cf-ddns start\nsudo service zen-cf-ddns stop\nsudo service zen-cf-ddns restart\nsudo service zen-cf-ddns status\n<\/code><\/pre>\n<p>\nen Windows tendr\u00e1s que matar el proceso pythonw y reiniciar el script (me da pereza escribir un servicio para Windows en C#):<\/p>\n<pre><code class=\"plaintext\">taskkill \/im pythonw.exe<\/code><\/pre>\n<p>\nCon esto, la instalaci\u00f3n y configuraci\u00f3n han terminado; disfruten.<\/p>\n<p>Para aquellos que quieren ver un c\u00f3digo Python no tan bonito, aqu\u00ed est\u00e1 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DzenDyn\/zen-cf-ddns\">el repositorio en GitHub<\/a><\/noindex>.<\/p>\n<p>Licencia MIT, as\u00ed que hagan lo que quieran con esto.<\/p>\n<p>P.D.: Entiendo que qued\u00f3 un poco provisional, pero cumple con su tarea de maravilla.<\/p>\n<p>UPD: 11.10.2019 17:37<br \/>\nEncontr\u00e9 otro problema, y si alguien puede darme una soluci\u00f3n, estar\u00e9 muy agradecido.<br \/>\nEl problema es que si se instalan las dependencias sin sudo python -m pip install -r ..., los m\u00f3dulos no estar\u00e1n visibles para el usuario del servicio, y no me gustar\u00eda obligar a los usuarios a instalar m\u00f3dulos con sudo, ya que eso no es correcto.<br \/>\n\u00bfC\u00f3mo hacerlo correctamente para que se vea bien?<br \/>\nUPD: 11.10.2019 19:16 Problema resuelto utilizando venv.<br \/>\nSe realizaron varios cambios. Habr\u00e1 un nuevo lanzamiento en los pr\u00f3ximos d\u00edas.<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/471102\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0414\u043b\u044f \u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0443\u0436\u0434 \u0434\u043e\u043c\u0430 \u043f\u043e\u0434\u043d\u044f\u043b VSphere, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043a\u0440\u0443\u0447\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 Ubuntu \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0434\u0438\u0430-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0435\u0449\u0435 \u043a\u0443\u0447\u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u0432\u043a\u0443\u0441\u043d\u044f\u0448\u0435\u043a, \u0438 \u044d\u0442\u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0438\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442. \u041d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u043a\u0443 \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u0432\u044f\u0437\u043a\u043e\u0439 ddclient + [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29132,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38840","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0414\u043b\u044f \u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0443\u0436\u0434 \u0434\u043e\u043c\u0430 \u043f\u043e\u0434\u043d\u044f\u043b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0432\u043e\u0439 dynamic DNS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CloudFlare | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0414\u043b\u044f \u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0443\u0436\u0434 \u0434\u043e\u043c\u0430 \u043f\u043e\u0434\u043d\u044f\u043b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:26:17+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:26:17+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Mi DNS din\u00e1mico con CloudFlare | ProHoster","description":"Pr\u00f3logo: Para necesidades personales, lo levant\u00e9 en casa.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0432\u043e\u0439 dynamic DNS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CloudFlare | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435 \u0414\u043b\u044f \u043b\u0438\u0447\u043d\u044b\u0445 \u043d\u0443\u0436\u0434 \u0434\u043e\u043c\u0430 \u043f\u043e\u0434\u043d\u044f\u043b.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:26:17+00:00","article:modified_time":"2019-10-31T19:26:17+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38840","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:37:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:01:36","updated":"2026-01-23 23:37:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/38840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=38840"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/38840\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/29132"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=38840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=38840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=38840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}