Ваш собствен динамичен DNS с помощта на CloudFlare

предговор

Ваш собствен динамичен DNS с помощта на CloudFlare За лични нужди вкъщи си инсталирах VSphere, на който пускам виртуален рутер и сървър на Ubuntu като медиен сървър и куп други екстри, като този сървър трябва да е достъпен от интернет. Но проблемът е, че моят доставчик дава статични данни срещу пари, които винаги могат да се използват за по-полезни цели. Затова използвах комбинацията ddclient + cloudflare.

Всичко беше наред, докато ddclient не спря да работи. След като порових малко, разбрах, че е дошъл моментът за патерици и велосипеди, тъй като откриването на проблема отнема твърде много време. В крайна сметка всичко се превърна в малък демон, който просто работи и не ми трябва нищо друго.
Ако някой се интересува, добре дошъл в кат.

Използвани инструменти и как „това“ работи

Така че първото нещо, което разбрах на уебсайта на cloudflare, е всичко, за което трябва да знаете API. И вече бях седнал да внедря всичко в Python (след като се запознах с Python, все повече го използвам за някои прости задачи или когато трябва бързо да направя прототип), когато изведнъж попаднах на почти готова реализация.
Като цяло, обвивката беше взета като основа python-cloudflare.

Взех един от примерите за актуализиране на DNS и добавих използването на конфигурационен файл и възможността за актуализиране на няколко A записа в зона и, разбира се, неограничен брой зони.

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

  1. Скриптът получава списък със зони от конфигурационния файл и преминава през тях
  2. Във всяка зона скриптът преминава през всеки DNS запис от тип A или AAAA и проверява публичния 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. Файловете се копират на местата им (config в /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.

Лицензирано от MIT, така че правете с тези неща каквото искате.

ПС: Разбирам, че се оказа малко патерица, но си върши работата с гръм и трясък.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Намерих още 1 проблем и ако някой ми каже как да го реша ще съм много благодарен.
Проблемът е, че ако инсталирате зависимости без sudo python -m pip install -r ..., тогава модулите няма да се виждат от потребителя на услугата и не бих искал да принуждавам потребителите да инсталират модули под sudo и това е неправилно.
Как да изглежда красиво?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Проблемът беше решен с помощта на venv.
Има няколко промени. Следващото издание ще бъде през следващите няколко дни.

Източник: www.habr.com

Добавяне на нов коментар