DNS dinamis Anda sendiri menggunakan CloudFlare

kata pengantar

DNS dinamis Anda sendiri menggunakan CloudFlare Untuk kebutuhan pribadi di rumah, saya menginstal VSphere, di mana saya menjalankan router virtual dan server Ubuntu sebagai server media dan banyak barang lainnya, dan server ini harus dapat diakses dari Internet. Tapi masalahnya adalah penyedia saya memberikan data statis untuk uang, yang selalu dapat digunakan untuk tujuan yang lebih bermanfaat. Oleh karena itu, saya menggunakan kombinasi ddclient + cloudflare.

Semuanya baik-baik saja sampai ddclient berhenti bekerja. Setelah melihat-lihat sedikit, saya menyadari bahwa waktunya telah tiba untuk menggunakan kruk dan sepeda, karena memerlukan terlalu banyak waktu untuk menemukan masalahnya. Pada akhirnya, semuanya berubah menjadi daemon kecil yang berfungsi, dan saya tidak memerlukan apa pun lagi.
Jika ada yang tertarik, selamat datang di cat.

Alat yang digunakan dan cara kerjanya

Jadi hal pertama yang saya temukan di situs cloudflare adalah semua yang perlu Anda ketahui API. Dan saya sudah duduk untuk mengimplementasikan semuanya dengan Python (setelah mengenal Python, saya semakin sering menggunakannya untuk beberapa tugas sederhana atau ketika saya perlu membuat prototipe dengan cepat), ketika saya tiba-tiba menemukan implementasi yang hampir siap pakai.
Secara umum, bungkusnya diambil sebagai dasar python-cloudflare.

Saya mengambil salah satu contoh untuk memperbarui DNS dan menambahkan penggunaan file konfigurasi dan kemampuan untuk memperbarui beberapa catatan A dalam satu zona dan, tentu saja, jumlah zona yang tidak terbatas.

Logikanya adalah sebagai berikut:

  1. Skrip menerima daftar zona dari file konfigurasi dan mengulanginya
  2. Di setiap zona, skrip melakukan loop melalui setiap data DNS tipe A atau AAAA dan memeriksa IP Publik dengan catatan tersebut
  3. Jika IP berbeda, ia akan mengubahnya; jika tidak, ia akan melewatkan iterasi perulangan dan melanjutkan ke perulangan berikutnya.
  4. Tertidur selama waktu yang ditentukan dalam konfigurasi

Instalasi dan konfigurasi

Mungkin saja membuat paket .deb, tapi saya tidak pandai dalam hal ini, dan itu tidak terlalu sulit.
Saya menjelaskan prosesnya dengan sangat rinci di README.md di halaman repositori.

Namun untuk berjaga-jaga, saya akan menjelaskannya dalam bahasa Rusia secara umum:

  1. Pastikan Anda telah menginstal python3 dan python3-pip, jika belum, instal (di Windows, python3-pip diinstal bersama dengan Python)
  2. Kloning atau unduh repositori
  3. Instal dependensi yang diperlukan.
    python3 -m pip install -r requirements.txt

  4. Jalankan skrip instalasi
    Untuk Linux:

    chmod +x install.sh
    sudo ./install.sh

    Untuk Windows: windows_install.bat

  5. Edit file konfigurasi
    Untuk Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Untuk Windows:

    Buka file zen-cf-ddns.conf di folder tempat Anda menginstal skrip.

    Ini adalah file JSON biasa, pengaturannya tidak rumit - saya secara khusus menjelaskan 2 zona berbeda di dalamnya sebagai contoh.

Ada apa di balik installer?

install.sh untuk Linux:

  1. Pengguna diciptakan untuk menjalankan daemon, tanpa membuat direktori home dan tanpa kemampuan untuk login.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. File log dibuat di /var/log/
  3. Jadikan pengguna yang baru dibuat sebagai pemilik file log
  4. File-file tersebut disalin ke tempatnya (config di /etc, file yang dapat dieksekusi di /usr/bin, file layanan di /lib/systemd/system)
  5. Layanan ini diaktifkan

windows_install.bat untuk Windows:

  1. Menyalin file yang dapat dieksekusi dan konfigurasi ke folder yang ditentukan pengguna
  2. Membuat tugas di penjadwal untuk menjalankan skrip saat startup sistem
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Setelah mengubah konfigurasi, skrip perlu di-restart; di Linux semuanya sederhana dan familier:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

untuk Windows Anda harus mematikan proses pythonw dan menjalankan kembali skrip (saya terlalu malas untuk menulis layanan untuk Windows di C#):

taskkill /im pythonw.exe

Ini menyelesaikan instalasi dan konfigurasi, nikmatilah untuk kesehatan Anda.

Bagi yang ingin melihat kode Python yang tidak terlalu cantik, ini dia repositori di GitHub.

Berlisensi MIT, jadi lakukan hal ini sesuka Anda.

PS: Saya mengerti bahwa ini ternyata sedikit penopang, tetapi berhasil dengan baik.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Saya menemukan 1 masalah lagi, dan jika seseorang memberi tahu saya cara menyelesaikannya, saya akan sangat berterima kasih.
Masalahnya adalah jika Anda menginstal dependensi tanpa sudo python -m pip install -r ..., maka modul tidak akan terlihat dari pengguna layanan, dan saya tidak ingin memaksa pengguna untuk menginstal modul di bawah sudo, dan ini adalah tidak benar.
Bagaimana caranya agar terlihat cantik?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Masalah diselesaikan dengan menggunakan venv.
Ada beberapa perubahan. Rilis berikutnya akan dilakukan dalam beberapa hari ke depan.

Sumber: www.habr.com

Tambah komentar