Przedmowa
Na własne potrzeby w domu zainstalowałem VSphere, na którym uruchamiam router wirtualny oraz serwer Ubuntu jako serwer multimediów i masę innych bajerów, a serwer ten powinien być dostępny z Internetu. Problem jednak w tym, że mój dostawca za pieniądze udostępnia statyczne dane, które zawsze można wykorzystać do bardziej przydatnych celów. Dlatego użyłem kombinacji ddclient + cloudflare.
Wszystko było w porządku, dopóki ddclient nie przestał działać. Po krótkim poszperaniu zdałem sobie sprawę, że nadszedł czas na kule i rowery, ponieważ znalezienie problemu zajmowało zbyt dużo czasu. W końcu wszystko zamieniło się w małego demona, który po prostu działa i niczego więcej nie potrzebuję.
Jeśli ktoś jest zainteresowany to zapraszamy do cat.
Stosowane narzędzia i sposób, w jaki „to” działa
Pierwszą rzeczą, którą dowiedziałem się na stronie Cloudflare, jest wszystko, o czym musisz wiedzieć
Ogólnie rzecz biorąc, opakowanie zostało przyjęte jako podstawa
Wziąłem jeden z przykładów aktualizacji DNS i dodałem wykorzystanie pliku konfiguracyjnego oraz możliwość aktualizacji kilku rekordów A w obrębie strefy i oczywiście nieograniczonej liczby stref.
Logika jest następująca:
- Skrypt pobiera listę stref z pliku konfiguracyjnego i przegląda je w pętli
- W każdej strefie skrypt przegląda każdy rekord DNS typu A lub AAAA i sprawdza publiczny adres IP za pomocą rekordu
- Jeśli adres IP jest inny, zmienia go; jeśli nie, pomija iterację pętli i przechodzi do następnej.
- Zasypia na czas określony w konfiguracji
Instalacja i konfiguracja
Prawdopodobnie byłoby możliwe utworzenie pakietu .deb, ale nie jestem w tym dobry i nie jest to wcale takie trudne.
Opisałem ten proces bardzo szczegółowo w README.md na
Ale na wszelki wypadek opiszę to ogólnie po rosyjsku:
- Upewnij się, że masz zainstalowane python3 i python3-pip, jeśli nie, zainstaluj je (w systemie Windows python3-pip jest instalowany razem z Pythonem)
- Sklonuj lub pobierz repozytorium
- Zainstaluj wymagane zależności.
python3 -m pip install -r requirements.txt
- Uruchom skrypt instalacyjny
Dla Linuksa:chmod +x install.sh sudo ./install.sh
Dla systemu Windows: Windows_install.bat
- Edytuj plik konfiguracyjny
Dla Linuksa:sudoedit /etc/zen-cf-ddns.conf
W systemie Windows:
Otwórz plik zen-cf-ddns.conf w folderze, w którym zainstalowałeś skrypt.
Jest to zwykły plik JSON, ustawienia nie są skomplikowane - konkretnie opisałem w nim 2 różne strefy jako przykład.
Co kryje się za instalatorami?
install.sh dla Linuksa:
- Tworzony jest użytkownik w celu uruchomienia demona, bez tworzenia katalogu domowego i możliwości logowania.
sudo useradd -r -s /bin/false zen-cf-ddns
- Plik dziennika jest tworzony w /var/log/
- Uczyń nowo utworzonego użytkownika właścicielem pliku dziennika
- Pliki są kopiowane na swoje miejsca (config w /etc, plik wykonywalny w /usr/bin, plik usługi w /lib/systemd/system)
- Usługa jest aktywowana
Windows_install.bat dla Windows:
- Kopiuje plik wykonywalny i plik konfiguracyjny do folderu określonego przez użytkownika
- Tworzy zadanie w harmonogramie, aby uruchomić skrypt podczas uruchamiania systemu
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Po zmianie konfiguracji należy zrestartować skrypt, w Linuksie wszystko jest proste i znajome:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
w przypadku systemu Windows będziesz musiał zakończyć proces Pythona i ponownie uruchomić skrypt (jestem zbyt leniwy, aby napisać usługę dla systemu Windows w języku C#):
taskkill /im pythonw.exe
To kończy instalację i konfigurację, ciesz się zdrowiem.
Dla tych, którzy chcą zobaczyć niezbyt ładny kod Pythona, oto on
Licencja MIT, więc rób z tym, co chcesz.
PS: Rozumiem, że okazało się to trochę kulą, ale swoje zadanie robi z hukiem.
UPD: 11.10.2019 17:37
Znalazłem jeszcze 1 problem i jeśli ktoś powie mi jak go rozwiązać będę bardzo wdzięczny.
Problem w tym, że jeśli zainstalujesz zależności bez Sudo python -m pip install -r ..., to moduły nie będą widoczne dla użytkownika usługi, a nie chciałbym zmuszać użytkowników do instalowania modułów pod Sudo, a to jest niepoprawne.
Jak sprawić, by wyglądała pięknie?
UPD: 11.10.2019 19:16 Problem został rozwiązany za pomocą venv.
Nastąpiło kilka zmian. Kolejna edycja ukaże się w ciągu kilku najbliższych dni.
Źródło: www.habr.com