Uw eigen dynamische DNS met behulp van CloudFlare

Voorwoord

Uw eigen dynamische DNS met behulp van CloudFlare Voor persoonlijke behoeften thuis heb ik VSphere geïnstalleerd, waarop ik een virtuele router en een Ubuntu-server als mediaserver en een heleboel andere goodies draai, en deze server zou toegankelijk moeten zijn vanaf internet. Maar het probleem is dat mijn provider statische gegevens voor geld geeft, die altijd voor nuttiger doeleinden kunnen worden gebruikt. Daarom gebruikte ik de combinatie ddclient + cloudflare.

Alles ging goed totdat ddclient niet meer werkte. Nadat ik wat rondgeneusd had, besefte ik dat het tijd was voor krukken en fietsen, omdat het te veel tijd kostte om het probleem te vinden. Uiteindelijk is alles veranderd in een kleine daemon die gewoon werkt, en ik heb niets anders nodig.
Als iemand geïnteresseerd is, welkom bij cat.

Gebruikte tools en hoe “het” werkt

Dus het eerste wat ik ontdekte op de cloudflare-website is alles wat je moet weten API. En ik stond net op het punt om alles in Python te gaan implementeren (na kennis te hebben gemaakt met Python gebruik ik het steeds vaker voor eenvoudige taken of als ik snel een prototype moet maken), toen ik plotseling een vrijwel kant-en-klare implementatie tegenkwam.
Over het algemeen werd de verpakking als basis genomen python-wolkflare.

Ik nam een ​​van de voorbeelden voor het updaten van DNS en voegde het gebruik van een configuratiebestand toe en de mogelijkheid om meerdere A-records binnen een zone en uiteraard een onbeperkt aantal zones bij te werken.

De logica is als volgt:

  1. Het script ontvangt een lijst met zones uit het configuratiebestand en loopt er doorheen
  2. In elke zone doorloopt het script elk DNS-record van type A of AAAA en controleert het openbare IP-adres met het record
  3. Als het IP-adres anders is, verandert het dit; zo niet, dan slaat het de lus-iteratie over en gaat door naar de volgende.
  4. Valt in slaap gedurende de tijd die is opgegeven in de configuratie

Installatie en configuratie

Het zou waarschijnlijk mogelijk zijn om een ​​.deb-pakket te maken, maar ik ben hier niet goed in, en het is niet zo moeilijk.
Ik heb het proces gedetailleerd beschreven in README.md op repository pagina.

Maar voor het geval dat, zal ik het in algemene termen in het Russisch beschrijven:

  1. Zorg ervoor dat je python3 en python3-pip hebt geïnstalleerd, zo niet, installeer het dan (op Windows wordt python3-pip samen met Python geïnstalleerd)
  2. Kloon of download de repository
  3. Installeer de vereiste afhankelijkheden.
    python3 -m pip install -r requirements.txt

  4. Voer het installatiescript uit
    Voor Linux:

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

    Voor Windows: windows_install.bat

  5. Bewerk het configuratiebestand
    Voor Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Для Vensters:

    Open het bestand zen-cf-ddns.conf in de map waarin u het script hebt geïnstalleerd.

    Dit is een normaal JSON-bestand, de instellingen zijn niets ingewikkelds - ik heb er specifiek 2 verschillende zones in beschreven als voorbeeld.

Wat zit er achter de installatieprogramma's?

install.sh voor Linux:

  1. Er wordt een gebruiker aangemaakt om de daemon uit te voeren, zonder een homedirectory aan te maken en zonder de mogelijkheid om in te loggen.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Er wordt een logbestand aangemaakt in /var/log/
  3. Maak de nieuw aangemaakte gebruiker eigenaar van het logbestand
  4. De bestanden worden naar hun plaats gekopieerd (config in /etc, uitvoerbaar bestand in /usr/bin, servicebestand in /lib/systemd/system)
  5. De dienst is geactiveerd

windows_install.bat voor Windows:

  1. Kopieert het uitvoerbare bestand en het configuratiebestand naar een door de gebruiker opgegeven map
  2. Creëert een taak in de planner om het script uit te voeren bij het opstarten van het systeem
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Na het wijzigen van de configuratie moet het script opnieuw worden opgestart; in Linux is alles eenvoudig en vertrouwd:

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

voor Windows moet je het Pythonw-proces beëindigen en het script opnieuw uitvoeren (ik ben te lui om een ​​service voor Windows in C# te schrijven):

taskkill /im pythonw.exe

Hiermee is de installatie en configuratie voltooid. Geniet ervan voor uw gezondheid.

Voor degenen die de niet zo mooie Python-code willen zien, hier is hij opslagplaats op GitHub.

MIT-licentie, dus doe met dit spul wat je wilt.

PS: Ik begrijp dat het een beetje een kruk bleek te zijn, maar het doet zijn werk met een knal.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Ik heb nog 1 probleem gevonden en als iemand mij vertelt hoe ik dit moet oplossen, zal ik u zeer dankbaar zijn.
Het probleem is dat als je afhankelijkheden installeert zonder sudo python -m pip install -r ..., de modules niet zichtbaar zullen zijn voor de servicegebruiker, en ik zou gebruikers niet willen dwingen modules onder sudo te installeren, en dit is niet correct.
Hoe zorg je ervoor dat het er mooi uitziet?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Het probleem is opgelost met behulp van venv.
Er zijn verschillende veranderingen geweest. De volgende release zal binnen enkele dagen plaatsvinden.

Bron: www.habr.com

Voeg een reactie