DNS แบบไดนามิกของคุณเองโดยใช้ CloudFlare

คำปรารภ

DNS แบบไดนามิกของคุณเองโดยใช้ CloudFlare สำหรับความต้องการส่วนตัวที่บ้าน ฉันติดตั้ง VSphere ซึ่งฉันใช้เราเตอร์เสมือนและเซิร์ฟเวอร์ Ubuntu เป็นเซิร์ฟเวอร์สื่อและคุณสมบัติอื่นๆ อีกมากมาย และเซิร์ฟเวอร์นี้ควรสามารถเข้าถึงได้จากอินเทอร์เน็ต แต่ปัญหาคือผู้ให้บริการของฉันให้ข้อมูลคงที่เพื่อเงิน ซึ่งสามารถใช้เพื่อวัตถุประสงค์ที่เป็นประโยชน์มากขึ้นได้เสมอ ดังนั้นฉันจึงใช้ชุดค่าผสม ddclient + cloudflare

ทุกอย่างเรียบร้อยดีจนกระทั่ง ddclient หยุดทำงาน หลังจากสำรวจไปรอบๆ เล็กน้อย ฉันก็รู้ว่าถึงเวลาสำหรับไม้ค้ำยันและจักรยานแล้ว เนื่องจากใช้เวลานานเกินไปในการค้นหาปัญหา ในท้ายที่สุด ทุกอย่างก็กลายเป็นภูตเล็กๆ ที่ใช้งานได้ และฉันไม่ต้องการสิ่งอื่นใดอีกแล้ว
หากใครสนใจยินดีต้อนรับสู่แมวค่ะ

เครื่องมือที่ใช้และวิธีการทำงานของ "มัน"

ดังนั้นสิ่งแรกที่ฉันพบบนเว็บไซต์ cloudflare คือทุกสิ่งที่คุณจำเป็นต้องรู้ API. และฉันก็นั่งลงเพื่อปรับใช้ทุกอย่างใน Python แล้ว (หลังจากคุ้นเคยกับ Python แล้ว ฉันก็เริ่มใช้มันสำหรับงานง่ายๆ บางอย่างมากขึ้น หรือเมื่อฉันต้องการสร้างต้นแบบอย่างรวดเร็ว) เมื่อฉันบังเอิญเจอการใช้งานที่เกือบจะพร้อมทำแล้ว
โดยทั่วไปจะใช้กระดาษห่อหุ้มเป็นพื้นฐาน หลาม-cloudflare.

ฉันยกตัวอย่างหนึ่งในการอัปเดต DNS และเพิ่มการใช้ไฟล์การกำหนดค่าและความสามารถในการอัปเดตบันทึก A หลายรายการภายในโซนและแน่นอนว่าไม่จำกัดจำนวนโซน

ตรรกะมีดังนี้:

  1. สคริปต์ได้รับรายการโซนจากไฟล์คอนฟิกูเรชันและวนซ้ำโซนเหล่านั้น
  2. ในแต่ละโซน สคริปต์จะวนซ้ำบันทึก DNS แต่ละรายการประเภท A หรือ AAAA และตรวจสอบ IP สาธารณะด้วยบันทึก
  3. หาก IP แตกต่าง IP ก็จะเปลี่ยน หากไม่เป็นเช่นนั้น จะข้ามการวนซ้ำและย้ายไปยังครั้งถัดไป
  4. เข้าสู่โหมดสลีปตามเวลาที่ระบุในการกำหนดค่า

การติดตั้งและการกำหนดค่า

อาจเป็นไปได้ที่จะสร้างแพ็คเกจ .deb แต่ฉันไม่เก่งเรื่องนี้ และก็ไม่ได้ยากขนาดนั้น
ฉันอธิบายกระบวนการโดยละเอียดใน README.md เมื่อวันที่ หน้าพื้นที่เก็บข้อมูล.

แต่ในกรณีนี้ ฉันจะอธิบายเป็นภาษารัสเซียในแง่ทั่วไป:

  1. ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง python3 และ python3-pip แล้ว หากไม่ได้ติดตั้ง ให้ทำการติดตั้ง (บน Windows จะมีการติดตั้ง python3-pip พร้อมกับ Python)
  2. โคลนหรือดาวน์โหลดที่เก็บ
  3. ติดตั้งการพึ่งพาที่จำเป็น
    python3 -m pip install -r requirements.txt

  4. เรียกใช้สคริปต์การติดตั้ง
    สำหรับลินุกซ์:

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

    สำหรับ Windows: windows_install.bat

  5. แก้ไขไฟล์การกำหนดค่า
    สำหรับลินุกซ์:

    sudoedit /etc/zen-cf-ddns.conf

    สำหรับ Windows:

    เปิดไฟล์ zen-cf-ddns.conf ในโฟลเดอร์ที่คุณติดตั้งสคริปต์

    นี่เป็นไฟล์ JSON ปกติ การตั้งค่าไม่มีอะไรซับซ้อน - ฉันอธิบายเฉพาะ 2 โซนที่แตกต่างกันในนั้นเป็นตัวอย่าง

เบื้องหลังตัวติดตั้งคืออะไร?

install.sh สำหรับลินุกซ์:

  1. ผู้ใช้ถูกสร้างขึ้นเพื่อรัน daemon โดยไม่ต้องสร้างโฮมไดเร็กทอรีและไม่สามารถเข้าสู่ระบบได้
    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

หลังจากเปลี่ยนการกำหนดค่าแล้ว จะต้องรีสตาร์ทสคริปต์ ใน 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 ที่ไม่สวยก็นี่เลยครับ พื้นที่เก็บข้อมูลบน 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
มีการเปลี่ยนแปลงหลายประการ รุ่นถัดไปจะมีขึ้นในอีกไม่กี่วันข้างหน้า

ที่มา: will.com

เพิ่มความคิดเห็น