Oma dynaaminen DNS CloudFlaren avulla

Esipuhe

Oma dynaaminen DNS CloudFlaren avulla Henkilökohtaisiin tarpeisiin kotona asensin VSpheren, jossa käytän virtuaalista reititintä ja Ubuntu-palvelinta mediapalvelimena ja joukon muita herkkuja, ja tämän palvelimen pitäisi olla saatavilla Internetistä. Mutta ongelmana on, että palveluntarjoajani antaa staattista tietoa rahasta, jota voidaan aina käyttää hyödyllisempiin tarkoituksiin. Siksi käytin ddclient + cloudflare -yhdistelmää.

Kaikki oli hyvin, kunnes ddclient lakkasi toimimasta. Pienen tuijottamisen jälkeen tajusin, että kainalosauvojen ja polkupyörien aika oli tullut, koska ongelman löytäminen vei liian kauan. Lopulta kaikki muuttui pieneksi demoniksi, joka vain toimii, enkä tarvitse mitään muuta.
Jos jotakuta kiinnostaa niin tervetuloa kissoille.

Käytetyt työkalut ja miten se toimii

Joten ensimmäinen asia, jonka löysin cloudflare-verkkosivustolta, on kaikki, mitä sinun tarvitsee tietää API. Ja olin jo istunut toteuttamaan kaikkea Pythonissa (Pythoniin tutustuttuani käytän sitä yhä useammin joihinkin yksinkertaisiin tehtäviin tai kun on pakko tehdä nopeasti prototyyppi), kun yhtäkkiä törmäsin melkein valmiiseen toteutukseen.
Yleensä kääre otettiin perustana python-cloudflare.

Otin yhden esimerkin DNS:n päivittämisestä ja lisäsin konfigurointitiedoston käytön ja mahdollisuuden päivittää useita A-tietueita vyöhykkeen sisällä ja tietysti rajoittamattoman määrän vyöhykkeitä.

Logiikka on seuraava:

  1. Komentosarja vastaanottaa luettelon vyöhykkeistä asetustiedostosta ja selaa niitä
  2. Jokaisella vyöhykkeellä komentosarja käy läpi jokaisen A- tai AAAA-tyypin DNS-tietueen ja tarkistaa julkisen IP-osoitteen tietueella.
  3. Jos IP on erilainen, se muuttaa sen; jos ei, se ohittaa silmukan iteraation ja siirtyy seuraavaan.
  4. Nukahtaa asetuksissa määritetyn ajan

Asennus ja konfigurointi

Luultavasti olisi mahdollista tehdä .deb-paketti, mutta en ole hyvä siinä, eikä se ole niin vaikeaa.
Kuvasin prosessia erittäin yksityiskohtaisesti README.md:ssä osoitteessa arkiston sivu.

Mutta varmuuden vuoksi kuvailen sitä venäjäksi yleisesti:

  1. Varmista, että python3 ja python3-pip on asennettu, jos ei, asenna ne (Windowsissa python3-pip asennetaan Pythonin kanssa)
  2. Kloonaa tai lataa arkisto
  3. Asenna tarvittavat riippuvuudet.
    python3 -m pip install -r requirements.txt

  4. Suorita asennusskripti
    Linuxille:

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

    Windows: windows_install.bat

  5. Muokkaa asetustiedostoa
    Linuxille:

    sudoedit /etc/zen-cf-ddns.conf

    Windows:

    Avaa zen-cf-ddns.conf-tiedosto kansiosta, johon asensit komentosarjan.

    Tämä on tavallinen JSON-tiedosto, asetuksissa ei ole mitään monimutkaista - kuvailin siinä erityisesti 2 eri vyöhykettä esimerkkinä.

Mitä asentajien takana on?

install.sh Linuxille:

  1. Käyttäjä luodaan ajamaan demonia luomatta kotihakemistoa ja ilman mahdollisuutta kirjautua sisään.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Lokitiedosto luodaan kansioon /var/log/
  3. Tee juuri luodusta käyttäjästä lokitiedoston omistaja
  4. Tiedostot kopioidaan paikoilleen (config /etc, suoritettava tiedosto /usr/bin, palvelutiedosto /lib/systemd/system)
  5. Palvelu on aktivoitu

windows_install.bat Windowsille:

  1. Kopioi suoritettavan ja määritystiedoston käyttäjän määrittämään kansioon
  2. Luo aikataulussa tehtävän komentosarjan suorittamiseksi järjestelmän käynnistyksen yhteydessä
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Asetuksen muuttamisen jälkeen komentosarja on käynnistettävä uudelleen, Linuxissa kaikki on yksinkertaista ja tuttua:

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

Windowsille sinun on lopetettava pythonw-prosessi ja suoritettava komentosarja uudelleen (olen liian laiska kirjoittamaan palvelua Windowsille C#:lla):

taskkill /im pythonw.exe

Tämä viimeistelee asennuksen ja konfiguroinnin, nauti siitä terveydellesi.

Niille, jotka haluavat nähdä ei niin kauniin Python-koodin, se on tässä arkisto GitHubissa.

MIT-lisensoitu, joten tee näillä aineilla mitä haluat.

PS: Ymmärrän, että se osoittautui hieman kainalosauvaksi, mutta se tekee tehtävänsä räjähdysmäisesti.

UPD: 11.10.2019 klo 17:37
Löysin vielä yhden ongelman, ja jos joku kertoo minulle, kuinka se ratkaistaan, olen erittäin kiitollinen.
Ongelmana on, että jos asennat riippuvuuksia ilman sudo python -m pip install -r ..., niin moduulit eivät näy palvelun käyttäjältä, enkä haluaisi pakottaa käyttäjiä asentamaan moduuleja sudon alle, ja tämä on ei oikein.
Kuinka saada se näyttämään kauniilta?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Ongelma ratkesi käyttämällä venv.
Muutoksia on tapahtunut useita. Seuraava julkaisu tulee lähipäivinä.

Lähde: will.com

Lisää kommentti