Jo eigen dynamyske DNS mei CloudFlare

Foarwurd

Jo eigen dynamyske DNS mei CloudFlare Foar persoanlike behoeften thús haw ik VSphere ynstalleare, wêrop ik in firtuele router en in Ubuntu-tsjinner útfiere as mediaserver en in bosk oare guod, en dizze server moat tagonklik wêze fan it ynternet. Mar it probleem is dat myn provider jout statyske gegevens foar jild, dat kin altyd brûkt wurde foar mear brûkbere doelen. Dêrom brûkte ik de kombinaasje ddclient + cloudflare.

Alles wie goed oant ddclient stoppe mei wurkjen. Nei't ik in bytsje omsloech, realisearre ik dat it tiid wie foar krukken en fytsen, om't it te folle tiid koste om it probleem te finen. Op it lêst feroare alles yn in lytse daemon dy't gewoan wurket, en ik haw neat oars nedich.
As immen ynteressearre is, wolkom by kat.

Brûkte ark en hoe "it" wurket

Dat it earste ding dat ik fûn op 'e cloudflare-webside is alles wat jo witte moatte API. En ik hie al sitten om alles yn Python út te fieren (nei't ik mei Python yn 'e kunde kommen wie, brûk ik it hieltyd faker foar wat ienfâldige taken of as ik gau in prototype meitsje moat), doe't ik ynienen in hast klearebare ymplemintaasje tsjinkaam.
Yn 't algemien waard de wrapper as basis nommen python-wolkflare.

Ik naam ien fan 'e foarbylden foar it bywurkjen fan DNS en tafoege it gebrûk fan in konfiguraasjetriem en de mooglikheid om ferskate A-records te aktualisearjen binnen in sône en, fansels, in ûnbeheind oantal sônes.

De logika is as folget:

  1. It skript ûntfangt in list mei sônes út de konfiguraasje triem en loopt troch harren
  2. Yn elke sône loopt it skript troch elke DNS-record fan type A of AAAA en kontrolearret de Iepenbiere IP mei it rekord
  3. As it IP oars is, feroaret it it; as net, slacht it de loop-iteraasje oer en giet troch nei de folgjende.
  4. Falt yn sliep foar de tiid spesifisearre yn de konfiguraasje

Ynstallaasje en konfiguraasje

It soe nei alle gedachten wêze mooglik om in .deb pakket, mar ik bin net goed yn dit, en it is net alles sa dreech.
Ik beskreau it proses yn grutte detail yn README.md on repository side.

Mar foar it gefal, ik sil it yn it Russysk yn algemiene termen beskriuwe:

  1. Soargje derfoar dat jo python3 en python3-pip ynstalleare hawwe, as net, ynstallearje it (op Windows is python3-pip ynstalleare tegearre mei Python)
  2. Kloon of download it repository
  3. Ynstallearje de fereaske ôfhinklikens.
    python3 -m pip install -r requirements.txt

  4. Run it ynstallaasje skript
    Foar Linux:

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

    Foar Windows: windows_install.bat

  5. Bewurkje de konfiguraasjetriem
    Foar Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Foar Windows:

    Iepenje it zen-cf-ddns.conf-bestân yn 'e map wêr't jo it skript ynstalleare.

    Dit is in gewoane JSON-bestân, de ynstellingen binne neat yngewikkeld - ik beskreau spesifyk 2 ferskillende sônes dêryn as foarbyld.

Wat is efter de ynstallearders?

install.sh foar Linux:

  1. In brûker is makke om de daemon út te fieren, sûnder in thúsmap te meitsjen en sûnder de mooglikheid om oan te melden.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. In lochbestân wurdt makke yn /var/log/
  3. Meitsje de nij oanmakke brûker de eigner fan it logbestân
  4. De bestannen wurde kopiearre nei har plakken (konfiguraasje yn /etc, útfierbere triem yn /usr/bin, tsjinstbestân yn /lib/systemd/system)
  5. De tsjinst is aktivearre

windows_install.bat foar Windows:

  1. Kopieart it útfierbere en konfiguraasjebestân nei in troch de brûker oantsjutte map
  2. Meitsje in taak yn 'e planner om it skript út te fieren by it opstarten fan it systeem
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Nei it feroarjen fan de konfiguraasje moat it skript opnij starte; yn Linux is alles ienfâldich en fertroud:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

foar Windows moatte jo it pythonw-proses deadzje en it skript opnij útfiere (ik bin te lui om in tsjinst foar Windows yn C # te skriuwen):

taskkill /im pythonw.exe

Dit foltôget de ynstallaasje en konfiguraasje, genietsje derfan foar jo sûnens.

Foar dyjingen dy't de net-sa-moaie Python-koade wolle sjen, hjir is it repository op GitHub.

MIT lisinsje, dus doch mei dit spul wat jo wolle.

PS: Ik begryp dat it in bytsje in kruk waard, mar it docht syn wurk mei in knal.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Ik fûn 1 mear probleem, en as immen fertelt my hoe om te lossen it, Ik sil v're tige tankber.
It probleem is dat as jo ôfhinklikens ynstalleare sûnder sudo python -m pip install -r ..., dan sille de modules net sichtber wêze fan 'e tsjinstbrûker, en ik soe brûkers net wolle twinge om modules ûnder sudo te ynstallearjen, en dit is net korrekt.
Hoe kinne jo it moai meitsje?
UPD: 11.10.2019/19/16 XNUMX:XNUMX It probleem waard oplost mei venv.
Der hawwe ferskate feroarings west. De folgjende release sil yn 'e kommende dagen wêze.

Boarne: www.habr.com

Add a comment