Ang iyong sariling dynamic na DNS gamit ang CloudFlare

paunang salita

Ang iyong sariling dynamic na DNS gamit ang CloudFlare Para sa mga personal na pangangailangan sa bahay, nag-install ako ng VSphere, kung saan nagpapatakbo ako ng isang virtual na router at isang Ubuntu server bilang isang media server at isang grupo ng iba pang mga goodies, at ang server na ito ay dapat na ma-access mula sa Internet. Ngunit ang problema ay ang aking provider ay nagbibigay ng static na data para sa pera, na palaging magagamit para sa mas kapaki-pakinabang na mga layunin. Samakatuwid, ginamit ko ang kumbinasyon ng ddclient + cloudflare.

Maayos ang lahat hanggang sa tumigil sa paggana ang ddclient. Pagkatapos ng pag-ikot ng kaunti, napagtanto ko na dumating na ang oras para sa mga saklay at bisikleta, dahil napakatagal ng oras upang mahanap ang problema. Sa huli, ang lahat ay naging isang maliit na daemon na gumagana lang, at hindi ko na kailangan ng iba pa.
Kung sinuman ang interesado, maligayang pagdating sa pusa.

Mga tool na ginamit at kung paano "ito" gumagana

Kaya ang una kong nalaman sa cloudflare website ay ang lahat ng kailangan mong malaman API. At naupo na ako upang ipatupad ang lahat sa Python (pagkatapos makilala ang Python, lalo kong ginagamit ito para sa ilang simpleng gawain o kapag kailangan kong mabilis na gumawa ng isang prototype), nang bigla akong nakatagpo ng halos handa nang pagpapatupad.
Sa pangkalahatan, ang pambalot ay kinuha bilang batayan python-cloudflare.

Kinuha ko ang isa sa mga halimbawa para sa pag-update ng DNS at idinagdag ang paggamit ng isang configuration file at ang kakayahang mag-update ng ilang A record sa loob ng isang zone at, siyempre, isang walang limitasyong bilang ng mga zone.

Ang lohika ay ang mga sumusunod:

  1. Ang script ay tumatanggap ng isang listahan ng mga zone mula sa configuration file at mga loop sa pamamagitan ng mga ito
  2. Sa bawat zone, ang script ay umiikot sa bawat DNS record ng uri A o AAAA at sinusuri ang Pampublikong IP kasama ang record
  3. Kung iba ang IP, binabago nito; kung hindi, nilalaktawan nito ang pag-ulit ng loop at lumipat sa susunod.
  4. Nakatulog sa oras na tinukoy sa config

Pag-install at pagsasaayos

Malamang na posibleng gumawa ng .deb package, ngunit hindi ako magaling dito, at hindi ganoon kahirap.
Inilarawan ko ang proseso nang detalyado sa README.md sa pahina ng imbakan.

Ngunit kung sakali, ilalarawan ko ito sa Russian sa mga pangkalahatang termino:

  1. Tiyaking mayroon kang naka-install na python3 at python3-pip, kung hindi, i-install ito (sa Windows, naka-install ang python3-pip kasama ng Python)
  2. I-clone o i-download ang repositoryo
  3. I-install ang mga kinakailangang dependencies.
    python3 -m pip install -r requirements.txt

  4. Patakbuhin ang script ng pag-install
    Para sa Linux:

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

    Para sa Windows: windows_install.bat

  5. I-edit ang configuration file
    Para sa Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Para sa Windows:

    Buksan ang zen-cf-ddns.conf file sa folder kung saan mo na-install ang script.

    Ito ay isang regular na JSON file, ang mga setting ay walang kumplikado - partikular kong inilarawan ang 2 magkakaibang mga zone dito bilang isang halimbawa.

Ano ang nasa likod ng mga installer?

install.sh para sa Linux:

  1. Ang isang user ay nilikha upang patakbuhin ang daemon, nang hindi gumagawa ng isang home directory at walang kakayahang mag-login.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Ang isang log file ay nilikha sa /var/log/
  3. Gawing may-ari ng log file ang bagong likhang user
  4. Ang mga file ay kinopya sa kanilang mga lugar (config sa /etc, executable file sa /usr/bin, service file sa /lib/systemd/system)
  5. Ang serbisyo ay isinaaktibo

windows_install.bat para sa Windows:

  1. Kinokopya ang executable at configuration file sa isang folder na tinukoy ng user
  2. Gumagawa ng gawain sa scheduler para patakbuhin ang script sa pagsisimula ng system
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pagkatapos baguhin ang config, kailangang i-restart ang script; sa Linux lahat ay simple at pamilyar:

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

para sa Windows kailangan mong patayin ang proseso ng pythonw at muling patakbuhin ang script (tamad akong magsulat ng isang serbisyo para sa Windows sa C#):

taskkill /im pythonw.exe

Nakumpleto nito ang pag-install at pagsasaayos, tamasahin ito sa iyong kalusugan.

Para sa mga gustong makita ang hindi masyadong magandang Python code, narito ito imbakan sa GitHub.

Lisensyado ng MIT, kaya gawin mo sa bagay na ito kung ano ang gusto mo.

PS: Naiintindihan ko na ito ay naging isang bit ng saklay, ngunit ginagawa nito ang kanyang trabaho nang may putok.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Nakakita ako ng 1 pang problema, at kung may magsasabi sa akin kung paano ito lutasin, lubos akong magpapasalamat.
Ang problema ay kung nag-install ka ng mga dependencies nang walang sudo python -m pip install -r ..., kung gayon ang mga module ay hindi makikita mula sa gumagamit ng serbisyo, at hindi ko nais na pilitin ang mga gumagamit na mag-install ng mga module sa ilalim ng sudo, at ito ay hindi tama.
Paano ito gawing maganda?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Nalutas ang problema gamit ang venv.
Mayroong ilang mga pagbabago. Ang susunod na release ay sa susunod na mga araw.

Pinagmulan: www.habr.com

Magdagdag ng komento