предговор
За лични нужди вкъщи си инсталирах VSphere, на който пускам виртуален рутер и сървър на Ubuntu като медиен сървър и куп други екстри, като този сървър трябва да е достъпен от интернет. Но проблемът е, че моят доставчик дава статични данни срещу пари, които винаги могат да се използват за по-полезни цели. Затова използвах комбинацията ddclient + cloudflare.
Всичко беше наред, докато ddclient не спря да работи. След като порових малко, разбрах, че е дошъл моментът за патерици и велосипеди, тъй като откриването на проблема отнема твърде много време. В крайна сметка всичко се превърна в малък демон, който просто работи и не ми трябва нищо друго.
Ако някой се интересува, добре дошъл в кат.
Използвани инструменти и как „това“ работи
Така че първото нещо, което разбрах на уебсайта на cloudflare, е всичко, за което трябва да знаете
Като цяло, обвивката беше взета като основа
Взех един от примерите за актуализиране на DNS и добавих използването на конфигурационен файл и възможността за актуализиране на няколко A записа в зона и, разбира се, неограничен брой зони.
Логиката е следната:
- Скриптът получава списък със зони от конфигурационния файл и преминава през тях
- Във всяка зона скриптът преминава през всеки DNS запис от тип A или AAAA и проверява публичния IP със записа
- Ако IP е различен, той го променя; ако не, той пропуска итерацията на цикъла и преминава към следващата.
- Заспива за времето, посочено в конфигурацията
Инсталиране и конфигуриране
Вероятно би било възможно да се направи .deb пакет, но не съм добър в това и не е толкова трудно.
Описах процеса много подробно в README.md на адрес
Но за всеки случай ще го опиша на руски в общи линии:
- Уверете се, че имате инсталирани python3 и python3-pip, ако не, инсталирайте ги (в Windows python3-pip е инсталиран заедно с Python)
- Клонирайте или изтеглете хранилището
- Инсталирайте необходимите зависимости.
python3 -m pip install -r requirements.txt
- Стартирайте инсталационния скрипт
За Linux:chmod +x install.sh sudo ./install.sh
За Windows: windows_install.bat
- Редактирайте конфигурационния файл
За Linux:sudoedit /etc/zen-cf-ddns.conf
За Windows:
Отворете файла zen-cf-ddns.conf в папката, в която сте инсталирали скрипта.
Това е обикновен JSON файл, настройките не са нищо сложно - конкретно описах 2 различни зони в него като пример.
Какво стои зад инсталаторите?
install.sh за Linux:
- Създава се потребител, който да стартира демона, без да създава домашна директория и без възможност за влизане.
sudo useradd -r -s /bin/false zen-cf-ddns
- Създава се регистрационен файл в /var/log/
- Направете новосъздадения потребител собственик на лог файла
- Файловете се копират на местата им (config в /etc, изпълним файл в /usr/bin, сервизен файл в /lib/systemd/system)
- Услугата е активирана
windows_install.bat за Windows:
- Копира изпълнимия и конфигурационния файл в зададена от потребителя папка
- Създава задача в планировчика за изпълнение на скрипта при стартиране на системата
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, ето го
Лицензирано от 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