CloudFlare yordamida o'zingizning dinamik DNS

muqaddima

CloudFlare yordamida o'zingizning dinamik DNS Uydagi shaxsiy ehtiyojlar uchun men VSphere-ni o'rnatdim, unda men virtual router va Ubuntu serverini media-server va boshqa ko'plab foydali narsalar sifatida ishlataman va bu serverga Internetdan kirish mumkin bo'lishi kerak. Ammo muammo shundaki, mening provayderim har doim foydaliroq maqsadlarda ishlatilishi mumkin bo'lgan pul uchun statik ma'lumotlarni beradi. Shuning uchun men ddclient + cloudflare kombinatsiyasidan foydalandim.

Ddclient ishlashni to'xtatmaguncha hammasi yaxshi edi. Bir oz tevarak-atrofni o'ylagandan so'ng, tayoq va velosipedlarning vaqti kelganini tushundim, chunki muammoni topish juda ko'p vaqtni oladi. Oxir-oqibat, hamma narsa shunchaki ishlaydigan kichik demonga aylandi va menga boshqa hech narsa kerak emas.
Agar kimdir qiziqsa, mushukka xush kelibsiz.

Amaldagi asboblar va "u" qanday ishlaydi

Shunday qilib, cloudflare veb-saytida men bilgan birinchi narsa - bu siz bilishingiz kerak bo'lgan hamma narsa API. Va men allaqachon Python-da hamma narsani amalga oshirish uchun o'tirdim (Python bilan tanishganimdan so'ng, men undan oddiy vazifalar uchun yoki tezda prototip yaratish kerak bo'lganda foydalanaman), to'satdan deyarli tayyor dasturga duch keldim.
Umuman olganda, o'rash asos sifatida qabul qilindi python-cloudflare.

Men DNS-ni yangilash uchun misollardan birini oldim va konfiguratsiya faylidan foydalanishni va zona ichidagi bir nechta A yozuvlarini va, albatta, cheksiz miqdordagi zonalarni yangilash imkoniyatini qo'shdim.

Mantiq quyidagicha:

  1. Skript konfiguratsiya faylidan zonalar ro'yxatini oladi va ular orqali aylanadi
  2. Har bir zonada skript A yoki AAAA tipidagi har bir DNS yozuvi orqali o'tadi va umumiy IP-ni yozuv bilan tekshiradi.
  3. Agar IP boshqacha bo'lsa, u uni o'zgartiradi, agar bo'lmasa, tsiklning takrorlanishini o'tkazib yuboradi va keyingisiga o'tadi.
  4. Konfiguratsiyada ko'rsatilgan vaqt davomida uxlab qoladi

O'rnatish va sozlash

Ehtimol, .deb paketini yaratish mumkin edi, lekin men buni yaxshi bilmayman va bu unchalik qiyin emas.
Men jarayonni README.md da batafsil tasvirlab berdim ombor sahifasi.

Ammo har holda, men uni rus tilida umumiy ma'noda tasvirlab beraman:

  1. Sizda python3 va python3-pip o'rnatilganligiga ishonch hosil qiling, agar bo'lmasa, uni o'rnating (Windowsda python3-pip Python bilan birga o'rnatilgan)
  2. Klonlash yoki omborni yuklab oling
  3. Kerakli bog'liqliklarni o'rnating.
    python3 -m pip install -r requirements.txt

  4. O'rnatish skriptini ishga tushiring
    Linux uchun:

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

    Windows uchun: windows_install.bat

  5. Konfiguratsiya faylini tahrirlang
    Linux uchun:

    sudoedit /etc/zen-cf-ddns.conf

    Windows uchun:

    Skriptni o'rnatgan papkada zen-cf-ddns.conf faylini oching.

    Bu oddiy JSON fayli, sozlamalar hech qanday murakkab narsa emas - men misol sifatida undagi 2 xil zonani tasvirlab berdim.

O'rnatuvchilar ortida nima bor?

Linux uchun install.sh:

  1. Demonni ishga tushirish uchun foydalanuvchi uy katalogini yaratmasdan va tizimga kirish imkoniyatisiz yaratilgan.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Jurnal fayli /var/log/ da yaratilgan.
  3. Yangi yaratilgan foydalanuvchini jurnal faylining egasiga aylantiring
  4. Fayllar o'z joylariga ko'chiriladi (konfiguratsiya /etc, bajariladigan fayl /usr/bin, xizmat fayli /lib/systemd/system)
  5. Xizmat faollashtirilgan

Windows uchun windows_install.bat:

  1. Bajariladigan va konfiguratsiya faylini foydalanuvchi tomonidan belgilangan papkaga nusxalaydi
  2. Tizim ishga tushganda skriptni ishga tushirish uchun rejalashtiruvchida vazifa yaratadi
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Konfiguratsiyani o'zgartirgandan so'ng, skriptni qayta ishga tushirish kerak, Linuxda hamma narsa oddiy va tanish:

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 uchun siz pythonw jarayonini o'ldirishingiz va skriptni qayta ishga tushirishingiz kerak bo'ladi (men C# da Windows uchun xizmat yozishga dangasaman):

taskkill /im pythonw.exe

Bu o'rnatish va konfiguratsiyani tugatadi, sog'ligingiz uchun zavqlaning.

Juda chiroyli bo'lmagan Python kodini ko'rishni istaganlar uchun bu erda GitHub-dagi ombor.

MIT litsenziyasiga ega, shuning uchun bu narsalar bilan xohlaganingizni qiling.

PS: Tushundimki, bu biroz qo'ltiq bo'lib chiqdi, lekin u portlash bilan o'z ishini qiladi.

UPD: 11.10.2019 17:37
Men yana 1 ta muammo topdim va agar kimdir buni qanday hal qilishni aytsa, men juda minnatdorman.
Muammo shundaki, agar siz sudo python -m pip install -r ... holda bog'liqliklarni o'rnatsangiz, u holda modullar xizmat foydalanuvchisi tomonidan ko'rinmaydi va men foydalanuvchilarni sudo ostida modullarni o'rnatishga majburlashni xohlamayman va bu to'g'ri emas.
Uni qanday qilib chiroyli qilish kerak?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Muammo venv yordamida hal qilindi.
Bir nechta o'zgarishlar bo'ldi. Keyingi nashr yaqin kunlarda chiqadi.

Manba: www.habr.com

a Izoh qo'shish