Ваш сопствен динамичен DNS користејќи CloudFlare

предговорот

Ваш сопствен динамичен DNS користејќи CloudFlare За лични потреби дома, инсталирав VSphere, на кој пуштам виртуелен рутер и Ubuntu сервер како медиумски сервер и еден куп други добрини, а овој сервер треба да биде достапен од Интернет. Но, проблемот е што мојот провајдер дава статични податоци за пари, кои секогаш може да се користат за покорисни цели. Затоа, ја користев комбинацијата ddclient + cloudflare.

Сè беше во ред додека ddclient не престана да работи. Откако малку проѕирнав, сфатив дека дојде време за патерици и велосипеди, бидејќи беше потребно премногу време за да се најде проблемот. На крајот, сè се претвори во мал демон кој само функционира и ништо друго не ми треба.
Ако некој е заинтересиран, добредојде во мачка.

Користени алатки и како функционира „тоа“.

Значи, првото нешто што го дознав на веб-страницата cloudflare е сè што треба да знаете API. И веќе седнав да имплементирам се во Python (откако се запознав со Python, сè почесто го користам за некои едноставни задачи или кога треба брзо да направам прототип), кога одеднаш наидов на речиси готова имплементација.
Во принцип, обвивката беше земена како основа python-cloudflare.

Зедов еден од примерите за ажурирање на DNS и додадов употреба на конфигурациска датотека и можност за ажурирање на неколку записи A во зона и, се разбира, неограничен број зони.

Логиката е следна:

  1. Скриптата добива список на зони од конфигурациската датотека и се врти низ нив
  2. Во секоја зона, скриптата се врти низ секој запис DNS од типот А или АААА и ја проверува јавната IP адреса со записот
  3. Ако IP-ата е различна, ја менува, ако не, ја прескокнува итерацијата на јамката и преминува на следната.
  4. Заспива за времето наведено во конфигурацијата

Инсталација и конфигурација

Веројатно би било можно да се направи пакет .deb, но јас не сум добар во ова и не е толку тешко.
Го опишав процесот во многу детали во README.md на страница за складиште.

Но, за секој случај, ќе го опишам на руски во општи термини:

  1. Проверете дали имате инсталирано python3 и python3-pip, ако не, инсталирајте ги (на Windows, python3-pip е инсталиран заедно со Python)
  2. Клонирајте го или преземете го складиштето
  3. Инсталирајте ги потребните зависности.
    python3 -m pip install -r requirements.txt

  4. Извршете ја скриптата за инсталација
    За Linux:

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

    За Windows: windows_install.bat

  5. Уредете ја конфигурациската датотека
    За Linux:

    sudoedit /etc/zen-cf-ddns.conf

    За Windows:

    Отворете ја датотеката zen-cf-ddns.conf во папката каде што сте ја инсталирале скриптата.

    Ова е обична JSON-датотека, поставките не се ништо комплицирано - конкретно опишав 2 различни зони во него како пример.

Што се крие зад монтери?

install.sh за Linux:

  1. Корисникот е создаден за да го стартува демонот, без создавање домашен директориум и без можност за најавување.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Датотека за евиденција е креирана во /var/log/
  3. Направете го новосоздадениот корисник сопственик на датотеката за евиденција
  4. Датотеките се копираат на нивните места (конфигурација во /etc, извршна датотека во /usr/bin, услужна датотека во /lib/systemd/system)
  5. Услугата е активирана

windows_install.bat за Windows:

  1. Ја копира извршната и конфигурациската датотека во папка одредена од корисникот
  2. Создава задача во распоредувачот за извршување на скриптата при стартување на системот
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

По промената на конфигурацијата, скриптата треба да се рестартира; во Linux сè е едноставно и познато:

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 ќе мора да го убиете процесот на pythonw и повторно да ја стартувате скриптата (премногу сум мрзлив да напишам услуга за Windows во C#):

taskkill /im pythonw.exe

Ова ја комплетира инсталацијата и конфигурацијата, уживајте во тоа за вашето здравје.

За оние кои сакаат да го видат не толку убавиот Python код, еве го складиште на GitHub.

МИТ лиценциран, па правете со овие работи што сакате.

P.S.: Разбирам дека испадна малку патерица, но си ја врши работата со тресок.

УПД: 11.10.2019 17:37
Најдов уште 1 проблем и ако некој ми каже како да го решам ќе бидам многу благодарен.
Проблемот е што ако инсталирате зависности без sudo python -m pip install -r ..., тогаш модулите нема да бидат видливи од корисникот на услугата и не би сакал да ги принудувам корисниците да инсталираат модули под sudo, а ова е неточно.
Како да го направите да изгледа убаво?
УПД: 11.10.2019 19:16 Проблемот е решен со помош на venv.
Имаше неколку промени. Следното издание ќе биде во следните неколку дена.

Извор: www.habr.com

Додадете коментар