Eessõna
Isiklikuks kasutamiseks kodus seadistasin VSphere'i, millel töötab virtuaalne ruuter ja Ubuntu server meediaserverina ning palju muid meeldivaid asju, ja see server peab olema Internetis ligipääsetav. Kuid probleem seisneb selles, et minu teenusepakkuja pakub staatilist IP-aadressi raha eest, millele võiks leida palju kasulikumaid rakendusi. Seetõttu kasutasin ddclient + Cloudflare'i kombinatsiooni.
Kõik oli hästi, kuni ddclient enam ei töötanud. Natuke seda nuputades sain aru, et on aeg mõtlema alternatiivsete lahenduste ja tööriistade peale, kuna probleemide leidmiseks kulus liiga palju aega. Lõppkokkuvõttes kujunes see välja väikeseks demoniks, mis lihtsalt töötab, ja rohkem ei olegi vaja.
Kellel huvi, on oodatud lugema edasi.
Kasutatud tööriistad ja kuidas "see" töötab
Esmalt uurisin Cloudflare'i saidilt kõike, mida on vaja teada . Ja olin juba asumas seda Pythonis rakendama (pärast Pythoniga tutvumist kasutan seda järjest sagedamini mõnede lihtsate ülesannete jaoks või kui on vaja kiiresti prototüüp luua), kui äkki sattusin praktiliselt valmisse lahendusse.
Kokkuvõttes võeti aluseks wrapper .
Võtsin ühe näitest DNS-i värskendamiseks ja lisasin konfiguratsiooni faili kasutamise ning mitme A-kirje värskendamise võimaluse tsoonis ja loomulikult piiramatu arvu tsoonide värskendamise.
Loogika on järgmine:
- Skripti kaudu saadakse konfiguratsioonifailist tsoonide nimekiri ja käiakse neist läbi tsüklis
- Igas tsoonis käib skript tsüklis läbi iga A- või AAAA tüüpi DNS-kirje ja võrdleb avalikku IP-aadressi kirjetega
- Kui IP-d on erinev, muudab selle, kui mitte, jätkab tsükli iteratsiooniga järgmisele
- Magab konfiguratsioonifailis määratud aja
Paigaldamine ja seadistamine
Tõenäoliselt oleksin saanud teha ka .deb paketi, aga ma ei ole selles tugev, ja tegelikult ei ole see kuigi keeruline.
Protsessi olen üsna põhjalikult kirjeldanud README.md-s .
Kuid igaks juhuks kirjeldan üldiselt vene keeles:
- Veenduge, et teil oleks paigaldatud python3 ja python3-pip, kui ei ole – installige need (Windowsis paigaldatakse python3-pip koos Pythoniga)
- Kloonige või laadige alla repositoorium
- Paigaldage vajalikud sõltuvused.
python3 -m pip install -r requirements.txt - Käivitage installatsiooniskript
Linuxi jaoks:chmod +x install.sh sudo ./install.shWindowsile: windows_install.bat
- Redigeerige konfiguratsioonifaili
Linuxi jaoks:sudoedit /etc/zen-cf-ddns.confWindowsi jaoks:
Avage fail zen-cf-ddns.conf kaustas, kuhu skript paigaldatud.
See on tavaline JSON-fail, konfiguratsioonide osas pole midagi keerulist – kirjutasin spetsiaalselt, et näidata kahte erinevat ala.
Mis peitub installijate taga?
install.sh Linuxile:
- Kasutaja luuakse deemonite käitamiseks, kodukausta loomata ja sisselogimist võimaldamata.
sudo useradd -r -s /bin/false zen-cf-ddns - Luuakse logifail /var/log/ jaoks.
- Muudame logifaili omanikuks hiljuti loodud kasutaja.
- Failid kopeeritakse oma kohtadesse (konfiguraatsioon /etc, käivitatav fail /usr/bin, teenuse fail /lib/systemd/system)
- Teenust aktiveeritakse.
windows_install.bat Windowsile:
- Kopeerib käivitatava faili ja konfigureerimisfaili kasutaja määratud kausta.
- Luuakse ülesanne ajakavades, et skripti käivitada süsteemi käivitamisel.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Pärast konfiguratsiooni muutmist tuleb skript uuesti käivitada, Linuxis on see lihtne ja harjumuspärane:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
Windowsis tuleb tappida pythonw protsess ja skript uuesti käivitada (mul pole eriti tahtmist kirjutada teenust Windowsile C#-ga):
taskkill /im pythonw.exeSellega on install ja seadistamine lõpetatud, nautige tervist.
Neile, kes soovivad vaadata mitte kõige ilusamat Pythonikoodi, siin see on. .
MIT litsents, seega tehke sellega, mida soovite.
P.S.: Mõistan, et see tuli veidi kätsepuhkusele, kuid oma ülesande täidab see suurepäraselt.
UPD: 11.10.2019 17:37
Leidsin veel 1 probleemi, ja kui keegi oskab öelda, kuidas seda lahendada – oleksin väga tänulik.
Probleem on selles, et kui installida sõltuvused ilma sudo-ita python -m pip install -r ..., siis teenuse kasutaja alt mooduleid ei nähta, aga ma ei tahaks, et kasutajad sunnitaksid mooduleid sudo alt paigaldama, see on vale.
Kuidas õigesti teha, et see oleks ilus?
UPD: 11.10.2019 19:16 Probleem lahendatud venv'i kasutamisega.
Tuli mitmeid muudatusi. Uus versioon tuleb varsti.
Allikas: habr.com
