DNS dinamik anda sendiri menggunakan CloudFlare

Perutusan

DNS dinamik anda sendiri menggunakan CloudFlare Untuk keperluan peribadi di rumah, saya memasang VSphere, di mana saya menjalankan penghala maya dan pelayan Ubuntu sebagai pelayan media dan sekumpulan barangan lain, dan pelayan ini harus boleh diakses dari Internet. Tetapi masalahnya ialah pembekal saya memberikan data statik untuk wang, yang sentiasa boleh digunakan untuk tujuan yang lebih berguna. Oleh itu, saya menggunakan gabungan ddclient + cloudflare.

Semuanya baik-baik saja sehingga ddclient berhenti berfungsi. Selepas melihat-lihat sedikit, saya menyedari bahawa masanya telah tiba untuk tongkat dan basikal, kerana ia mengambil terlalu banyak masa untuk mencari masalah. Akhirnya, semuanya bertukar menjadi daemon kecil yang hanya berfungsi, dan saya tidak memerlukan apa-apa lagi.
Jika ada yang berminat, selamat datang ke kucing.

Alat yang digunakan dan cara "ia" berfungsi

Jadi perkara pertama yang saya temui di laman web cloudflare ialah segala-galanya yang perlu anda ketahui API. Dan saya baru sahaja hendak mula melaksanakan segala-galanya dalam Python (selepas berkenalan dengan Python, saya semakin menggunakannya untuk beberapa tugas mudah atau apabila saya perlu membuat prototaip dengan cepat), apabila tiba-tiba saya terjumpa pelaksanaan yang hampir siap.
Secara umum, pembalut itu diambil sebagai asas python-cloudflare.

Saya mengambil salah satu contoh untuk mengemas kini DNS dan menambah penggunaan fail konfigurasi dan keupayaan untuk mengemas kini beberapa rekod A dalam zon dan, sudah tentu, bilangan zon yang tidak terhad.

Logiknya adalah seperti berikut:

  1. Skrip menerima senarai zon daripada fail konfigurasi dan menggelungkannya
  2. Dalam setiap zon, skrip melingkari setiap rekod DNS jenis A atau AAAA dan menyemak IP Awam dengan rekod itu
  3. Jika IP berbeza, ia mengubahnya; jika tidak, ia melangkau lelaran gelung dan beralih ke yang seterusnya.
  4. Tertidur untuk masa yang dinyatakan dalam konfigurasi

Pemasangan dan konfigurasi

Ia mungkin mungkin untuk membuat pakej .deb, tetapi saya tidak mahir dalam hal ini, dan ia tidak begitu sukar.
Saya menerangkan proses dengan terperinci dalam README.md di halaman repositori.

Tetapi sekiranya berlaku, saya akan menerangkannya dalam bahasa Rusia secara umum:

  1. Pastikan anda memasang python3 dan python3-pip, jika tidak, pasangkannya (pada Windows, python3-pip dipasang bersama Python)
  2. Klon atau muat turun repositori
  3. Pasang kebergantungan yang diperlukan.
    python3 -m pip install -r requirements.txt

  4. Jalankan skrip pemasangan
    Untuk Linux:

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

    Untuk Windows: windows_install.bat

  5. Edit fail konfigurasi
    Untuk Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Untuk Windows:

    Buka fail zen-cf-ddns.conf dalam folder tempat anda memasang skrip.

    Ini adalah fail JSON biasa, tetapan tidak rumit - Saya secara khusus menerangkan 2 zon berbeza di dalamnya sebagai contoh.

Apa yang ada di sebalik pemasang?

install.sh untuk Linux:

  1. Pengguna dicipta untuk menjalankan daemon, tanpa membuat direktori rumah dan tanpa keupayaan untuk log masuk.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Fail log dibuat dalam /var/log/
  3. Jadikan pengguna yang baru dibuat sebagai pemilik fail log
  4. Fail disalin ke tempatnya (konfigurasi dalam /etc, fail boleh laku dalam /usr/bin, fail perkhidmatan dalam /lib/systemd/system)
  5. Perkhidmatan ini diaktifkan

windows_install.bat untuk Windows:

  1. Menyalin fail boleh laku dan konfigurasi ke folder yang ditentukan pengguna
  2. Mencipta tugas dalam penjadual untuk menjalankan skrip pada permulaan sistem
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Selepas menukar konfigurasi, skrip perlu dimulakan semula; di Linux semuanya mudah dan biasa:

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 perlu mematikan proses pythonw dan menjalankan semula skrip (saya terlalu malas untuk menulis perkhidmatan untuk Windows dalam C#):

taskkill /im pythonw.exe

Ini melengkapkan pemasangan dan konfigurasi, nikmati untuk kesihatan anda.

Bagi mereka yang ingin melihat kod Python yang tidak begitu cantik, ini dia repositori di GitHub.

MIT berlesen, jadi lakukan dengan perkara ini apa yang anda mahu.

PS: Saya faham bahawa ia ternyata menjadi sedikit tongkat, tetapi ia melakukan tugasnya dengan kuat.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Saya menemui 1 lagi masalah, dan jika seseorang memberitahu saya cara menyelesaikannya, saya akan sangat berterima kasih.
Masalahnya ialah jika anda memasang dependencies tanpa sudo python -m pip install -r ..., maka modul tidak akan kelihatan daripada pengguna perkhidmatan, dan saya tidak mahu memaksa pengguna memasang modul di bawah sudo, dan ini adalah tidak betul.
Bagaimana untuk menjadikannya kelihatan cantik?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Masalah telah diselesaikan menggunakan venv.
Terdapat beberapa perubahan. Keluaran seterusnya akan dibuat dalam beberapa hari akan datang.

Sumber: www.habr.com

Tambah komen