Το δικό σας δυναμικό DNS χρησιμοποιώντας το CloudFlare

πρόλογος

Το δικό σας δυναμικό DNS χρησιμοποιώντας το CloudFlare Για προσωπικές ανάγκες στο σπίτι, εγκατέστησα το VSphere, στο οποίο τρέχω έναν εικονικό δρομολογητή και έναν διακομιστή Ubuntu ως διακομιστή πολυμέσων και ένα σωρό άλλα καλούδια, και αυτός ο διακομιστής θα πρέπει να είναι προσβάσιμος από το Διαδίκτυο. Αλλά το πρόβλημα είναι ότι ο πάροχος μου δίνει στατικά δεδομένα για χρήματα, τα οποία μπορούν πάντα να χρησιμοποιηθούν για πιο χρήσιμους σκοπούς. Επομένως, χρησιμοποίησα τον συνδυασμό ddclient + cloudflare.

Όλα ήταν καλά μέχρι που η ddclient σταμάτησε να λειτουργεί. Αφού έψαξα λίγο, κατάλαβα ότι είχε έρθει η ώρα για πατερίτσες και ποδήλατα, αφού χρειαζόταν πολύς χρόνος για να βρω το πρόβλημα. Στο τέλος, όλα μετατράπηκαν σε έναν μικρό δαίμονα που λειτουργεί και δεν χρειάζομαι τίποτα άλλο.
Αν κάποιος ενδιαφέρεται, καλώς ήλθε στο cat.

Εργαλεία που χρησιμοποιούνται και πώς λειτουργεί

Έτσι, το πρώτο πράγμα που ανακάλυψα στον ιστότοπο του 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

Προσθέστε ένα σχόλιο