Via propra dinamika DNS uzante CloudFlare

Antaŭparolo

Via propra dinamika DNS uzante CloudFlare Por personaj bezonoj hejme, mi instalis VSphere, sur kiu mi funkciigas virtualan enkursigilon kaj Ubuntu-servilon kiel amaskomunikilaron kaj amason da aliaj bonaĵoj, kaj ĉi tiu servilo estu alirebla de la Interreto. Sed la problemo estas, ke mia provizanto donas senmovajn datumojn por mono, kiuj ĉiam povas esti uzataj por pli utilaj celoj. Tial mi uzis la kombinaĵon ddclient + cloudflare.

Ĉio estis bona ĝis ddclient ĉesis funkcii. Piĉante iomete, mi konstatis, ke venis la tempo por lambastonoj kaj bicikloj, ĉar necesas tro da tempo por trovi la problemon. Fine ĉio fariĝis malgranda demono, kiu nur funkcias, kaj mi bezonas nenion alian.
Se iu interesiĝas, bonvenon al kato.

Iloj uzataj kaj kiel "ĝi" funkcias

Do la unua afero, kiun mi eksciis en la retejo de cloudflare, estas ĉio, kion vi bezonas scii API. Kaj mi jam sidiĝis por efektivigi ĉion en Python (post konatiĝo kun Python, mi pli kaj pli uzas ĝin por kelkaj simplaj taskoj aŭ kiam mi bezonas rapide fari prototipon), kiam mi subite renkontis preskaŭ pretan efektivigon.
Ĝenerale, la envolvaĵo estis prenita kiel bazo python-cloudflare.

Mi prenis unu el la ekzemploj por ĝisdatigi DNS kaj aldonis la uzon de agorda dosiero kaj la eblon ĝisdatigi plurajn A-rekordojn ene de zono kaj, kompreneble, senlima nombro da zonoj.

La logiko estas kiel sekvas:

  1. La skripto ricevas liston de zonoj de la agorda dosiero kaj trapasas ilin
  2. En ĉiu zono, la skripto cirkulas tra ĉiu DNS-rekordo de tipo A aŭ AAAA kaj kontrolas la Publikan IP kun la rekordo.
  3. Se la IP estas malsama, ĝi ŝanĝas ĝin; se ne, ĝi preterlasas la bukloripeton kaj pluiras al la sekva.
  4. Endormiĝas dum la tempo specifita en la agordo

Instalado kaj agordo

Verŝajne eblus fari .deb-pakaĵon, sed mi ne lertas pri tio, kaj ĝi ne estas tiom malfacila.
Mi priskribis la procezon tre detale en README.md ĉe deponejo paĝo.

Sed ĉiaokaze, mi priskribos ĝin en la rusa ĝenerale:

  1. Certigu, ke vi havas python3 kaj python3-pip instalitaj, se ne, instalu ĝin (en Vindozo, python3-pip estas instalita kune kun Python)
  2. Klonu aŭ elŝutu la deponejon
  3. Instalu la postulatajn dependecojn.
    python3 -m pip install -r requirements.txt

  4. Rulu la instalan skripton
    Por Linukso:

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

    Por Vindozo: windows_install.bat

  5. Redaktu la agordan dosieron
    Por Linukso:

    sudoedit /etc/zen-cf-ddns.conf

    Por Vindozo:

    Malfermu la zen-cf-ddns.conf dosieron en la dosierujo kie vi instalis la skripton.

    Ĉi tio estas regula JSON-dosiero, la agordoj estas nenio komplikaj - mi specife priskribis 2 malsamajn zonojn en ĝi kiel ekzemplon.

Kio estas malantaŭ la instaliloj?

install.sh por Linukso:

  1. Uzanto estas kreita por ruli la demonon, sen krei hejman dosierujon kaj sen la kapablo ensaluti.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Protokoldosiero estas kreita en /var/log/
  3. Faru la ĵus kreitan uzanton la posedanto de la protokolo-dosiero
  4. La dosieroj estas kopiitaj al siaj lokoj (agordo en /etc, rulebla dosiero en /usr/bin, servodosiero en /lib/systemd/system)
  5. La servo estas aktivigita

windows_install.bat por Vindozo:

  1. Kopias la plenumeblan kaj agordan dosieron al uzant-specifita dosierujo
  2. Kreas taskon en la planilo por ruli la skripton ĉe la starto de la sistemo
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Post ŝanĝado de la agordo, la skripto devas esti rekomencita; en Linukso ĉio estas simpla kaj konata:

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

por Vindozo vi devos mortigi la pythonw-procezon kaj refari la skripton (mi estas tro maldiligenta por skribi servon por Vindozo en C#):

taskkill /im pythonw.exe

Ĉi tio kompletigas la instaladon kaj agordon, ĝuu ĝin al via sano.

Por tiuj, kiuj volas vidi la ne tiom belan Python-kodon, jen ĝi deponejo sur GitHub.

MIT-licencita, do faru kun ĉi tiuj aferoj kion vi volas.

PS: Mi komprenas, ke ĝi montriĝis iom lambastono, sed ĝi faras sian laboron per bruego.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Mi trovis 1 plian problemon, kaj se iu diros al mi kiel solvi ĝin, mi estos tre dankema.
La problemo estas, ke se vi instalas dependecojn sen sudo python -m pip install -r ..., tiam la moduloj ne estos videblaj de la servuzanto, kaj mi ne ŝatus devigi uzantojn instali modulojn sub sudo, kaj ĉi tio estas ne ĝustas.
Kiel fari ĝin aspekti bela?
UPD: 11.10.2019/19/16 XNUMX:XNUMX La problemo estis solvita per venv.
Okazis pluraj ŝanĝoj. La sekva eldono estos en la venontaj kelkaj tagoj.

fonto: www.habr.com

Aldoni komenton