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

مقدمة

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

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

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

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

أخذت أحد الأمثلة لتحديث DNS وأضفت استخدام ملف التكوين والقدرة على تحديث العديد من سجلات A داخل منطقة ، وبالطبع عدد غير محدود من المناطق.

المنطق كالتالي:

  1. يتلقى البرنامج النصي قائمة بالمناطق من ملف التكوين ويتكرر عبرها
  2. في كل منطقة ، يتكرر البرنامج النصي عبر كل سجل DNS من النوع A أو AAAA ويتحقق من IP العام مقابل السجل
  3. إذا كان IP مختلفًا ، فإنه يغيره ؛ وإذا لم يكن كذلك ، فإنه يتخطى تكرار الحلقة وينتقل إلى الحلقة التالية.
  4. ينام في الوقت المحدد في ملف config

التثبيت والإعداد

من المحتمل أن يكون من الممكن عمل حزمة .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

    للنوافذ:

    افتح الملف zen-cf-ddns.conf في المجلد حيث قمت بتثبيت البرنامج النصي.

    هذا ملف JSON عادي ، الإعدادات ليست معقدة - لقد وصفت على وجه التحديد منطقتين مختلفتين فيه كمثال.

ماذا وراء المثبتات؟

install.sh لنظام التشغيل Linux:

  1. يتم إنشاء مستخدم لتشغيل البرنامج الخفي ، دون إنشاء دليل رئيسي والقدرة على تسجيل الدخول.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. يتم إنشاء ملف لكتابة السجل إلى / var / log /
  3. قم بتعيين مالك ملف السجل على المستخدم الذي تم إنشاؤه حديثًا
  4. يتم نسخ الملفات إلى أماكنها (config in / 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 غير الجميل ، هنا هو المستودع على جيثب.

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

ملاحظة: أفهم أنه اتضح أنه عكاز صغير ، لكنه يتواءم مع مهمته بضجة كبيرة.

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

المصدر: www.habr.com

إضافة تعليق