DNS ديناميكي مخصص مع CloudFlare

مقدمة


صورة لجذب الانتباه لتلبية الاحتياجات الشخصية ، قام برفع VSphere ، حيث قمت بتدوير جهاز توجيه افتراضي وخادم Ubuntu كخادم وسائط ومجموعة من الأشياء الجيدة ، ويجب أن يكون هذا الخادم متاحًا من الإنترنت. لكن المشكلة تكمن في أن مزود الخدمة يقدم إحصائيات ثابتة مقابل المال ، والتي يمكنك دائمًا العثور على تطبيق أكثر فائدة. لذلك ، استخدمت مجموعة من ddclient + cloudflare.

كان كل شيء على ما يرام حتى توقف ddclient عن العمل. بعد حفرها قليلاً ، أدركت أن الوقت قد حان للعكازات والدراجات ، حيث بدأ يستغرق الكثير من الوقت للعثور على المشكلة. في النهاية ، تحول كل شيء إلى شيطان صغير يعمل فقط ، لكنني لست بحاجة إلى أي شيء آخر.
من يهتم - مرحبا بكم في القط.

الأدوات المستخدمة وكيف "يعمل"


لذا فإن أول ما تعلمته على موقع cloudflare هو كل ما تحتاج لمعرفته حول واجهة برمجة التطبيقات . وكنت جالسًا بالفعل لتنفيذ كل شيء في Python (بعد التعرف على Python ، أستخدمه كثيرًا في بعض المهام البسيطة أو عندما أحتاج إلى تقديم نموذج أولي بسرعة) عندما صادفت فجأة تنفيذًا جاهزًا تقريبًا.
بشكل عام ، تم اتخاذ المجمع بيثون - cloudflare كأساس.

أخذت مثالاً واحداً لتحديث نظام أسماء النطاقات وأضفت استخدام ملف التكوين والقدرة على تحديث العديد من سجلات 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. يتم نسخ الملفات في أماكنها (التكوين في / etc ، الملف القابل للتنفيذ في / usr / bin ، ملف الخدمة في / lib / systemd / system)
  5. تم تفعيل الخدمة

windows_install.bat لنظام التشغيل Windows:

  1. نسخ الملف القابل للتنفيذ وملف التكوين إلى المجلد المحدد من قبل المستخدم
  2. ينشئ مهمة في برنامج الجدولة لتشغيل برنامج نصي عند بدء تشغيل النظام
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

بعد تغيير التكوين ، يحتاج البرنامج النصي إلى إعادة التشغيل ، في لينكس كل شيء بسيط ومألوف:

 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 .

رخصة معهد ماساتشوستس للتكنولوجيا ، لذلك تفعل ما تريد مع هذا الخير.

ملاحظة: لقد فهمت أنه كان عكازًا قليلاً ، لكنه يتأقلم مع مهمته مع اثارة ضجة.

محدث: 10/10/2019 17:37
لقد وجدت مشكلة واحدة أخرى ، وإذا أخبرني أحدهم بكيفية حلها ، فسأكون في غاية الامتنان.
المشكلة هي أنه إذا قمت بتثبيت التبعيات بدون تثبيت sudo python -m pip - r ... ، فمن الوحدات التابعة للمستخدم لن تكون الوحدات مرئية ، لكنني لا أريد إجبار المستخدمين على تثبيت الوحدات النمطية تحت sudo ، وهذا غير صحيح.
كيف تجعلها جميلة؟
محدث: 10/11/2019 19:16 يتم حل المشكلة باستخدام venv.
اتضح بعض التغييرات. الإصدار التالي سيكون في اليوم الآخر.

Source: https://habr.com/ru/post/ar471102/


All Articles