Saját dinamikus DNS a CloudFlare segítségével

Előszó

Saját dinamikus DNS a CloudFlare segítségével Otthoni személyes igényekre feltelepítettem a VSphere-t, amin egy virtuális routert és egy Ubuntu szervert futtatok médiaszerverként és egy rakás egyéb finomságot, és ez a szerver legyen elérhető az internetről. De az a baj, hogy a szolgáltatóm pénzért statikus adatokat ad, amiket mindig hasznosabb célokra lehet felhasználni. Ezért a ddclient + cloudflare kombinációt használtam.

Minden rendben volt, amíg a ddclient le nem állt. Kis turkálás után rájöttem, hogy eljött a mankók és a biciklik ideje, mert túl sok időbe telt megtalálni a problémát. Végül minden egy kis démonná változott, ami egyszerűen működik, és nincs szükségem másra.
Ha valakit érdekel, szívesen látunk a cicában.

A használt eszközök és „működése”.

Tehát az első dolog, amit megtudtam a cloudflare weboldalon, az minden, amit tudnia kell API. És már le is ültem mindent megvalósítani Pythonban (a Python megismerése után egyre gyakrabban használom néhány egyszerű feladathoz, vagy amikor gyorsan prototípust kell készíteni), amikor hirtelen egy szinte kész implementációra bukkantam.
Általában a csomagolást vették alapul python-cloudflare.

Vettem az egyik példát a DNS frissítésére, és hozzáadtam a konfigurációs fájl használatát, valamint a több A rekord frissítésének lehetőségét egy zónán belül, és természetesen korlátlan számú zónát.

A logika a következő:

  1. A szkript megkapja a zónák listáját a konfigurációs fájlból, és áthalad rajtuk
  2. Minden zónában a szkript végigfut minden A vagy AAAA típusú DNS rekordon, és ellenőrzi a nyilvános IP-címet a rekorddal.
  3. Ha az IP eltérő, akkor megváltoztatja, ha nem, akkor kihagyja a ciklus iterációját, és továbblép a következőre.
  4. A konfigurációban megadott ideig elalszik

Telepítés és konfigurálás

Valószínűleg lehetne .deb csomagot készíteni, de nem vagyok jó ebben, és nem is olyan nehéz.
A folyamatot részletesen leírtam a README.md címen adattár oldal.

De minden esetre általánosságban leírom oroszul:

  1. Győződjön meg arról, hogy a python3 és a python3-pip telepítve van, ha nem, telepítse (Windows rendszeren a python3-pip a Python mellett van telepítve)
  2. Klónozza vagy töltse le az adattárat
  3. Telepítse a szükséges függőségeket.
    python3 -m pip install -r requirements.txt

  4. Futtassa a telepítő szkriptet
    Linux esetén:

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

    Windows esetén: windows_install.bat

  5. Szerkessze a konfigurációs fájlt
    Linux esetén:

    sudoedit /etc/zen-cf-ddns.conf

    Windows esetén:

    Nyissa meg a zen-cf-ddns.conf fájlt abban a mappában, ahová a szkriptet telepítette.

    Ez egy normál JSON fájl, a beállítások nem bonyolultak - konkrétan leírtam benne 2 különböző zónát példaként.

Mi van a telepítők mögött?

install.sh Linuxhoz:

  1. A felhasználó a démon futtatására jön létre anélkül, hogy saját könyvtárat hozna létre, és nem tud bejelentkezni.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Egy naplófájl jön létre a /var/log/ mappában
  3. Legyen az újonnan létrehozott felhasználó a naplófájl tulajdonosa
  4. A fájlok a helyükre másolódnak (config az /etc-ben, végrehajtható fájl a /usr/bin-ben, szervizfájl a /lib/systemd/system-ben)
  5. A szolgáltatás aktiválva van

windows_install.bat Windowshoz:

  1. A végrehajtható és a konfigurációs fájlt egy felhasználó által megadott mappába másolja
  2. Feladatot hoz létre az ütemezőben a parancsfájl futtatásához a rendszer indításakor
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

A konfiguráció megváltoztatása után a szkriptet újra kell indítani, Linuxban minden egyszerű és ismerős:

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

Windows esetén meg kell ölni a pythonw folyamatot, és újra kell futtatnia a szkriptet (lusta vagyok, hogy C#-ban írjak szolgáltatást a Windows számára):

taskkill /im pythonw.exe

Ezzel befejeződik a telepítés és a konfiguráció, élvezze egészségére.

Azok számára, akik szeretnék látni a nem túl szép Python kódot, itt van adattár a GitHubon.

MIT engedéllyel rendelkezik, úgyhogy tegyél ezzel a cuccal, amit akarsz.

PS: Megértem, hogy egy kis mankónak bizonyult, de nagy lendülettel teszi a dolgát.

UPD: 11.10.2019. 17:37
Találtam még 1 problémát, és ha valaki megmondja, hogyan kell megoldani azt nagyon megköszönném.
A probléma az, hogy ha a függőségeket a sudo python -m pip install -r ... nélkül telepíted, akkor a modulok nem lesznek láthatóak a szolgáltatás felhasználója számára, és nem szeretném a felhasználókat arra kényszeríteni, hogy sudo alatt telepítsenek modulokat, és ez Nem megfelelő.
Hogyan lehet szépíteni?
UPD: 11.10.2019/19/16 XNUMX:XNUMX A probléma a venv segítségével megoldódott.
Több változás is történt. A következő kiadás a következő napokban jelenik meg.

Forrás: will.com

Hozzászólás