Прадмова
Для асабістых патрэб хаты падняў VSphere, на якім кручу віртуальны маршрутызатар і Ubuntu сервер у якасці медыя-сервера і яшчэ кучы ўсякіх смачнашак, і гэты сервер павінен быць даступны з Інтэрнэт. Але праблема ў тым, што мой правайдэр дае статыку за грошы, якім заўсёды можна знайсці больш карыснае ўжыванне. Таму я карыстаўся звязкам ddclient + cloudflare.
Усё было добра, пакуль ddclient не перастаў працаваць. Трохі пакалупаючы яго, я зразумеў што прыйшоў час мыліц і ровараў, бо часу на пошук праблемы стала сыходзіць занадта шмат. У выніку ўсё вылілася ў невялікі дэман, які проста працуе, а мне больш і не трэба.
Каму цікава - сардэчна запрашаем пад кат.
Выкарыстоўваныя прылады і як «гэта» працуе
Такім чынам перш за ўсё я даведаўся на сайце cloudflare, усё што трэба ведаць пра
Увогуле за аснову быў узяты ўперпер
Узяў адзін з прыкладаў для абнаўлення DNS і дадаў выкарыстанне файла канфігурацыі і магчымасць абнаўляць некалькі A запісаў у межах зоны і натуральна неабмежаваную колькасць зон.
Логіка наступная:
- Скрыпт атрымлівае з файла канфігурацыі спіс зон і праходзіць па іх у цыкле
- У кожнай зоне скрыпт праходзіць у цыкле па кожным DNS запісы тыпу А ці АААА і звярае Public 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/
- Які робіцца ўладальнікам файла лога нядаўна створанага карыстальніка
- Капіююцца файлы па сваіх месцах (канфіг у /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, так што рабіце з гэтым дабром, што хочаце.
PS: Разумею, што атрымалася крыху кастыльна, але са сваёй задачай спраўляецца на ўра.
UPD: 11.10.2019 17:37
Знайшоў яшчэ 1 праблему, і калі хтосьці падкажа як яе вырашыць - буду вельмі ўдзячны.
Праблема ў тым, што калі ўсталяваць залежнасці без sudo python -m pip install -r …, то з-пад карыстача сэрвісу модулі не будуць бачныя, а мне бы не жадалася прымушаць ставіць карыстачоў модулі пад sudo, ды і не правільна гэта.
Як правільна зрабіць, каб было прыгожа?
UPD: 11.10.2019 19:16 Праблема вырашана выкарыстаннем venv.
Атрымалася некалькі змен. Чарговы рэліз гэтымі днямі будзе.
Крыніца: habr.com