{"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\/da\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare","title":{"rendered":"Din egen dynamic DNS med CloudFlare","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h3>Forord<\/h3>\n<p>\n<img decoding=\"async\" alt=\"Din egen dynamic DNS med CloudFlare\" src=\"\/wp-content\/uploads\/2019\/10\/d1405e23e86048a05e6707bb5e9e215f.jpg\" style=\"display:block;margin: 0 auto;\" \/> Til personlige behov derhjemme har jeg sat VSphere op, hvor jeg k\u00f8rer en virtuel router og en Ubuntu-server som medieserver samt en masse l\u00e6kre ting, og denne server skal v\u00e6re tilg\u00e6ngelig fra internettet. Problemet er, at min udbyder tager penge for statisk IP, hvilket altid kan bruges mere fornuftigt. Derfor har jeg brugt en kombination af ddclient + cloudflare. <\/p>\n<p>Alt gik godt, indtil ddclient stoppede med at fungere. Efter at have rodet lidt med det, inds\u00e5 jeg, at det var tid til provisoriske l\u00f8sninger, da jeg brugte for meget tid p\u00e5 at finde problemet. I sidste ende resulterede det i en lille daemon, der bare fungerer, og det er alt, hvad jeg har brug for. <br \/>\nTil dem, der er interesserede \u2013 velkommen til at l\u00e6se videre.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>V\u00e6rkt\u00f8jer der blev brugt og hvordan 'dette' fungerer<\/h3>\n<p>\nS\u00e5 det f\u00f8rste jeg gjorde var at finde alt, hvad jeg skulle vide om cloudflare p\u00e5 deres hjemmeside. <noindex><a rel=\"nofollow\" href=\"https:\/\/api.cloudflare.com\/\">API<\/a><\/noindex>Og jeg var allerede ved at implementere det hele i Python (efter at have m\u00f8dt Python, bruger jeg det oftere til enkle opgaver eller n\u00e5r jeg hurtigt skal lave en prototype), da jeg pludselig st\u00f8dte p\u00e5 en n\u00e6sten f\u00e6rdig implementering.<br \/>\nGenerelt tog jeg udgangspunkt i en wrapper <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/cloudflare\/python-cloudflare\">python-cloudflare<\/a><\/noindex>.<\/p>\n<p>Jeg tog et af eksemplerne til opdatering af DNS og tilf\u00f8jede brugen af en konfigurationsfil og mulighed for at opdatere flere A-poster inden for zonen samt naturligvis et ubegribelig antal zoner.<\/p>\n<p>Logikken er f\u00f8lgende:<\/p>\n<ol>\n<li>Scriptet henter fra konfigurationsfilen en liste over zoner og gennemg\u00e5r dem i en l\u00f8kke.<\/li>\n<li>I hver zone gennemg\u00e5r scriptet l\u00f8bende hver DNS-post af typen A eller AAAA og sammenligner den offentlige IP med posten.<\/li>\n<li>Hvis IP'en er forskellig \u2014 \u00e6ndres den, hvis ikke springes iterationen over, og der g\u00e5s videre til den n\u00e6ste. <\/li>\n<li>Venter i den tid, der er angivet i konfigurationen.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Installation og konfiguration<\/h3>\n<p>\nM\u00e5ske kunne man ogs\u00e5 lave en .deb-pakke, men det er ikke mit st\u00e6rkeste omr\u00e5de, og det er heller ikke s\u00e5 sv\u00e6rt.<br \/>\nJeg har ret detaljeret beskrevet processen i README.md p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DzenDyn\/zen-cf-ddns\">repository-siden.<\/a><\/noindex>.<\/p>\n<p>Men for en sikkerheds skyld vil jeg kort beskrive det p\u00e5 russisk:<\/p>\n<ol>\n<li>S\u00f8rg for, at du har installeret python3 og python3-pip; hvis ikke, s\u00e5 installer det (i Windows installeres python3-pip sammen med Python).<\/li>\n<li>Klone eller download repository.<\/li>\n<li>Installer de n\u00f8dvendige afh\u00e6ngigheder.\n<pre><code class=\"plaintext\">python3 -m pip install -r requirements.txt<\/code><\/pre>\n<p>\n<\/li>\n<li>K\u00f8r installationsscriptet.<br \/>\nTil Linux:<\/p>\n<pre><code class=\"plaintext\">chmod +x install.sh\nsudo .\/install.sh<\/code><\/pre>\n<p>\nFor Windows: windows_install.bat\n<\/li>\n<li>Rediger konfigurationsfilen.<br \/>\nTil Linux:<\/p>\n<pre><code class=\"plaintext\">sudoedit \/etc\/zen-cf-ddns.conf<\/code><\/pre>\n<p>\nTil Windows:<\/p>\n<p>\u00c5bn filen zen-cf-ddns.conf i mappen, hvor du installerede scriptet.<\/p>\n<p>Dette er en almindelig JSON-fil, hvor indstillingerne ikke er komplicerede \u2013 jeg har specifikt beskrevet to forskellige zoner som eksempel.\n<\/li>\n<\/ol>\n<p><\/p>\n<h4>Hvad gemmer sig bag installerne?<\/h4>\n<p>\ninstall.sh til Linux:<\/p>\n<ol>\n<li>En bruger oprettes til at k\u00f8re d\u00e6monen, uden oprettelse af hjemmebibliotek og loginmulighed.\n<pre><code class=\"plaintext\">sudo useradd -r -s \/bin\/false zen-cf-ddns<\/code><\/pre>\n<p>\n<\/li>\n<li>Der oprettes en fil til logning i \/var\/log\/<\/li>\n<li>Vi g\u00f8r den nyligt oprettede bruger til ejer af logfilen<\/li>\n<li>Filerne kopieres til deres steder (konfiguration i \/etc, eksekverbar fil i \/usr\/bin, tjenestefil i \/lib\/systemd\/system)<\/li>\n<li>Tjenesten aktiveres<\/li>\n<\/ol>\n<p>\nwindows_install.bat til Windows:<\/p>\n<ol>\n<li>Kopierer den eksekverbare fil og konfigurationsfilen til den angivne mappe af brugeren<\/li>\n<li>Opretter en opgave i planl\u00e6ggeren til at k\u00f8re scriptet ved systemstart<br \/>\n<code>schtasks \/create \/tn \"CloudFlare Update IP\" \/tr \"%newLocation%\" \/sc onstart<\/code>\n<\/li>\n<\/ol>\n<p>\nEfter \u00e6ndring af konfigurationen skal scriptet genstartes, i Linux er det simpelt og velkendt:<\/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>\nFor Windows m\u00e5 du dr\u00e6be pythonw-processen og genstarte scriptet (jeg har ikke lyst til at skrive en tjeneste til Windows i C#):<\/p>\n<pre><code class=\"plaintext\">taskkill \/im pythonw.exe<\/code><\/pre>\n<p>\nInstallation og ops\u00e6tning er nu afsluttet, brug den i velg\u00e5ende.<\/p>\n<p>For dem der \u00f8nsker at se ikke den p\u00e6neste Python-kode, her er den <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DzenDyn\/zen-cf-ddns\">repository p\u00e5 GitHub<\/a><\/noindex>.<\/p>\n<p>MIT-licens, s\u00e5 g\u00f8r hvad du vil med dette gode.<\/p>\n<p>P.S.: Jeg forst\u00e5r, at det blev lidt klodset, men den klarer sin opgave str\u00e5lende.<\/p>\n<p>UPD: 11.10.2019 17:37<br \/>\nJeg fandt endnu et problem, og hvis nogen kan hj\u00e6lpe med at l\u00f8se det \u2013 ville jeg v\u00e6re meget taknemmelig.<br \/>\nProblemet er, at hvis man installerer afh\u00e6ngigheder uden sudo python -m pip install -r &#8230;, s\u00e5 vil modulerne ikke v\u00e6re synlige for tjenestebrugeren, og jeg \u00f8nsker ikke at tvinge brugerne til at installere moduler med sudo, det er heller ikke korrekt.<br \/>\nHvordan g\u00f8r man det korrekt, s\u00e5 det ser p\u00e6nt ud?<br \/>\nUPD: 11.10.2019 19:16 Problemet er l\u00f8st ved brug af venv.<br \/>\nDer er sket flere \u00e6ndringer. En ny release kommer snart.<br \/>\n<br \/>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Din egen dynamiske DNS med CloudFlare | ProHoster","description":"Forord: Jeg har sat det op til personligt brug derhjemme.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/svoj-dynamic-dns-s-pomoshhyu-cloudflare","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/38840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=38840"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/38840\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/29132"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=38840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=38840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=38840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}