πρόλογος
Για προσωπικές ανάγκες στο σπίτι, εγκατέστησα το VSphere, στο οποίο τρέχω έναν εικονικό δρομολογητή και έναν διακομιστή Ubuntu ως διακομιστή πολυμέσων και ένα σωρό άλλα καλούδια, και αυτός ο διακομιστής θα πρέπει να είναι προσβάσιμος από το Διαδίκτυο. Αλλά το πρόβλημα είναι ότι ο πάροχος μου δίνει στατικά δεδομένα για χρήματα, τα οποία μπορούν πάντα να χρησιμοποιηθούν για πιο χρήσιμους σκοπούς. Επομένως, χρησιμοποίησα τον συνδυασμό ddclient + cloudflare.
Όλα ήταν καλά μέχρι που η ddclient σταμάτησε να λειτουργεί. Αφού έψαξα λίγο, κατάλαβα ότι είχε έρθει η ώρα για πατερίτσες και ποδήλατα, αφού χρειαζόταν πολύς χρόνος για να βρω το πρόβλημα. Στο τέλος, όλα μετατράπηκαν σε έναν μικρό δαίμονα που λειτουργεί και δεν χρειάζομαι τίποτα άλλο.
Αν κάποιος ενδιαφέρεται, καλώς ήλθε στο cat.
Εργαλεία που χρησιμοποιούνται και πώς λειτουργεί
Έτσι, το πρώτο πράγμα που ανακάλυψα στον ιστότοπο του 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