Ievads
Personīgām vajadzībām mājās uzstādīju VSphere, kur griežu virtuālo maršrutētāju un Ubuntu serveri kā multivides serveri un vēl vairāk visādu gardumu, un šim serverim jābūt pieejamam no interneta. Bet problēma ir tā, ka mans providers par statiskām IP adresēm iekasē maksu, kuru vienmēr var izmantot kādā noderīgākā veidā. Tāpēc es izmantoju ddclient + cloudflare komplektu.
Viss gāja labi, kamēr ddclient pārstāja strādāt. Nedaudz pakasīju to, un sapratu, ka ir pienācis laiks izmantot pagaidu risinājumus, jo laiks, kas tika veltīts problēmas meklēšanai, kļuva pārāk liels. Galu galā viss pārvērtās mazā demonā, kas vienkārši darbojas, un man vairāk arī nevajag.
Kam interesē – laipni lūdzam zemāk.
Izmantotie rīki un kā „tas” darbojas
Pirmkārt, es uzzināju no cloudflare mājas lapas visu, kas jāsaka par . Un jau biju pievērsies realizēšanai Python (pēc iepazīšanās ar Python, es to arvien biežāk izmantoju vienkāršām uzdevumu risināšanai vai kad nepieciešams ātri izveidot prototipu), kad pēkšņi uzdūros gandrīz gatavai realizācijai.
Kopumā par pamatu tika ņemts apvalks .
Paņēmu vienu no piemēriem DNS atjaunināšanai un pievienoju konfigurācijas faila izmantošanu un iespēju atjaunināt vairākas A ierakstu zonas un, protams, neierobežotu skaitu zonu.
Loģika ir sekojoša:
- Skripts iegūst no konfigurācijas faila zonu sarakstu un cauri tām iet ciklā
- Katras zonas ietvaros skripts ciklā pārskata katru DNS A vai AAAA ierakstu un salīdzina Publisko IP ar ierakstu
- Ja IP atšķiras — maina to, ja nē, izlaiž cikla atkārtojumu un pāriet uz nākamo
- Aizmieg uz laiku, kas norādīts konfigurācijas failā
Uzstādīšana un konfigurācija
Varētu izveidot arī .deb pakotni, bet es nezinu, kā to izdarīt, un viss nav tik sarežģīti.
Procesu es diezgan detalizēti aprakstījis README.md .
Bet, uz visiem gadījumiem, aprakstīšu krieviski vispārīgi:
- Pārliecinieties, ka jums ir uzstādīta python3 un python3-pip, ja nav — uzstādiet (Windows python3-pip tiek uzstādīts kopā ar Python)
- Klonējiet vai lejupielādējiet repotitoriju
- Uzstādiet nepieciešamās atkarības.
python3 -m pip install -r requirements.txt - Palaižiet uzstādīšanas skriptu
Linux:chmod +x install.sh sudo ./install.shWindows: windows_install.bat
- Rediģējiet konfigurācijas failu
Linux:sudoedit /etc/zen-cf-ddns.confWindows:
Atveriet failu zen-cf-ddns.conf mapē, uz kuru uzstādījāt skriptu.
Šis ir parasts JSON fails, uzstādījumos nekas sarežģīts – speciāli aprakstīju, kā piemēru, 2 dažādas zonas tajā.
Kas slēpjas aiz instalētājiem?
install.sh Linux:
- Tiek izveidots lietotājs, lai palaistu šo demon, bez mājas direktorijas izveides un iespējas pieteikties.
sudo useradd -r -s /bin/false zen-cf-ddns - Izveido fails logu ierakstiem /var/log/
- Padarām jaunizveidotā lietotāja failu par īpašnieku.
- Kopē failus savās vietās (konfigurācija /etc, izpildāmais fails /usr/bin, pakalpojuma fails /lib/systemd/system)
- Aktivizē pakalpojumu
windows_install.bat Windows:
- Kopē izpildāmo failu un konfigurācijas failu norādītajā mapē, ko izvēlējies lietotājs.
- Izveido uzdevumu uzdevumu plānotājā, lai palaistu skriptu, kad sistēma sākas.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Pēc konfigurācijas izmaiņām skriptu jārestartē, Linux viss ir vienkārši un ierasti:
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 gadījumā nākas nogalināt procesu pythonw un atkārtoti palaist skriptu (ļoti slinkums man rakstīt pakalpojumu Windows uz C#):
taskkill /im pythonw.exeUzstādīšana un konfigurēšana beigusies, lietojiet veselībai.
tiem, kas vēlas paskatīties ne pašu skaistāko Python kodu, lūk, .
MIT licence, tāpēc dari ar šo labumu, ko gribi.
P.S.: Saprotu, ka sanācis nedaudz šausmīgi, bet ar savu uzdevumu tas tiek galā lieliski.
UPD: 11.10.2019 17:37
Atradu vēl 1 problēmu, un ja kāds varētu ieteikt, kā to atrisināt — būtu ļoti pateicīgs.
Problēma ir tāda, ka ja uzstāda atkarības bez sudo python -m pip install -r …, tad no pakalpojuma lietotāja moduļi nebūs redzami, bet es nevēlos piespiest lietotājus instalēt moduļus caur sudo, turklāt tas nav pareizi.
Kā to izdarīt pareizi, lai būtu skaisti?
UPD: 11.10.2019 19:16 Problēma atrisināta, izmantojot venv.
Ieguvu pāris izmaiņas. Nākamais relīzes būs drīz.
Avots: habr.com
