DNS پویا خودتان با استفاده از CloudFlare

پیش گفتار

DNS پویا خودتان با استفاده از CloudFlare برای نیازهای شخصی در خانه، VSphere را نصب کردم که روی آن یک روتر مجازی و یک سرور اوبونتو به عنوان سرور رسانه و یکسری چیزهای خوب دیگر اجرا می کنم و این سرور باید از طریق اینترنت قابل دسترسی باشد. اما مشکل این است که ارائه دهنده من داده های ثابت را برای پول می دهد، که همیشه می تواند برای اهداف مفیدتر استفاده شود. بنابراین، من از ترکیب ddclient + cloudflare استفاده کردم.

همه چیز خوب بود تا اینکه ddclient از کار افتاد. بعد از کمی گشتن، متوجه شدم که زمان عصا و دوچرخه فرا رسیده است، زیرا یافتن مشکل زمان زیادی می برد. در پایان، همه چیز به یک دیمون کوچک تبدیل شد که فقط کار می کند و من به هیچ چیز دیگری نیاز ندارم.
اگر کسی علاقه مند است، به گربه خوش آمدید.

ابزارهای مورد استفاده و نحوه عملکرد "آن".

بنابراین اولین چیزی که در وب سایت cloudflare متوجه شدم همه چیزهایی است که باید در مورد آن بدانید API. و من تازه می خواستم پیاده سازی همه چیز را در پایتون شروع کنم (پس از آشنایی با پایتون، به طور فزاینده ای از آن برای کارهای ساده یا زمانی که نیاز به ساختن سریع نمونه اولیه دارم) استفاده می کنم، که ناگهان با یک پیاده سازی تقریباً آماده مواجه شدم.
به طور کلی، لفاف به عنوان پایه در نظر گرفته شد python-cloudflare.

من یکی از مثال‌ها را برای به‌روزرسانی DNS انتخاب کردم و استفاده از یک فایل پیکربندی و قابلیت به‌روزرسانی چندین رکورد A در یک منطقه و البته تعداد نامحدود منطقه را اضافه کردم.

منطق به شرح زیر است:

  1. اسکریپت لیستی از مناطق را از فایل پیکربندی دریافت می کند و از طریق آنها حلقه می زند
  2. در هر منطقه، اسکریپت از طریق هر رکورد DNS از نوع A یا AAAA حلقه می زند و IP عمومی را با رکورد بررسی می کند.
  3. اگر IP متفاوت باشد، آن را تغییر می دهد، در غیر این صورت، از تکرار حلقه می گذرد و به مورد بعدی می رود.
  4. برای مدت زمان مشخص شده در تنظیمات به خواب می رود

نصب و پیکربندی

احتمالاً امکان ساخت یک بسته .deb وجود دارد، اما من در این کار خوب نیستم و آنقدرها هم سخت نیست.
من این فرآیند را با جزئیات زیادی در README.md در توضیح دادم صفحه مخزن.

اما در هر صورت، من آن را به طور کلی به زبان روسی توصیف می کنم:

  1. مطمئن شوید که python3 و python3-pip را نصب کرده اید، اگر نه، آن را نصب کنید (در ویندوز، python3-pip به همراه پایتون نصب شده است)
  2. مخزن را شبیه سازی یا دانلود کنید
  3. وابستگی های مورد نیاز را نصب کنید.
    python3 -m pip install -r requirements.txt

  4. اسکریپت نصب را اجرا کنید
    برای لینوکس:

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

    برای ویندوز: windows_install.bat

  5. فایل پیکربندی را ویرایش کنید
    برای لینوکس:

    sudoedit /etc/zen-cf-ddns.conf

    برای ویندوز:

    فایل zen-cf-ddns.conf را در پوشه ای که اسکریپت را نصب کرده اید باز کنید.

    این یک فایل JSON معمولی است، تنظیمات هیچ چیز پیچیده ای نیست - من به طور خاص 2 منطقه مختلف را به عنوان مثال در آن توضیح دادم.

پشت نصاب ها چیه؟

install.sh برای لینوکس:

  1. یک کاربر برای اجرای دیمون، بدون ایجاد دایرکتوری خانگی و بدون امکان ورود ایجاد می شود.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. یک فایل log در /var/log/ ایجاد می شود
  3. کاربر تازه ایجاد شده را مالک فایل لاگ کنید
  4. فایل ها در مکان های خود کپی می شوند (پیکربندی در /etc، فایل اجرایی در /usr/bin، فایل سرویس در /lib/systemd/system)
  5. سرویس فعال می شود

windows_install.bat برای ویندوز:

  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

برای ویندوز باید فرآیند pythonw را بکشید و اسکریپت را دوباره اجرا کنید (من برای نوشتن یک سرویس برای ویندوز در سی شارپ خیلی تنبل هستم):

taskkill /im pythonw.exe

این کار نصب و پیکربندی را تکمیل می کند، از آن برای سلامتی خود لذت ببرید.

برای کسانی که می خواهند کد نه چندان زیبا پایتون را ببینند، اینجاست مخزن در GitHub.

دارای مجوز MIT، بنابراین هر کاری که می خواهید با این موارد انجام دهید.

پ.ن: میفهمم که یه ذره عصای زیر بغل بود، ولی کار خودش رو انجام میده.

به روز رسانی: 11.10.2019/17/37 XNUMX:XNUMX
من 1 مشکل دیگر پیدا کردم و اگر کسی به من بگوید چگونه آن را حل کنم بسیار سپاسگزار خواهم بود.
مشکل این است که اگر وابستگی ها را بدون sudo python -m pip install -r ... نصب کنید، ماژول ها از کاربر سرویس قابل مشاهده نخواهند بود و من نمی خواهم کاربران را مجبور کنم که ماژول ها را تحت sudo نصب کنند، و این غلط.
چگونه آن را زیبا جلوه دهیم؟
UPD: 11.10.2019/19/16 XNUMX:XNUMX مشکل با استفاده از venv حل شد.
تغییرات متعددی صورت گرفته است. نسخه بعدی در چند روز آینده خواهد بود.

منبع: www.habr.com

اضافه کردن نظر