DNS động của riêng bạn bằng CloudFlare

lời tựa

DNS động của riêng bạn bằng CloudFlare Đối với nhu cầu cá nhân ở nhà, tôi đã cài đặt VSphere, trên đó tôi chạy bộ định tuyến ảo và máy chủ Ubuntu làm máy chủ phương tiện cùng một loạt tính năng khác và máy chủ này có thể truy cập được từ Internet. Nhưng vấn đề là nhà cung cấp của tôi cung cấp dữ liệu tĩnh để kiếm tiền, dữ liệu này luôn có thể được sử dụng cho các mục đích hữu ích hơn. Vì vậy, tôi đã sử dụng kết hợp ddclient + cloudflare.

Mọi thứ đều ổn cho đến khi ddclient ngừng hoạt động. Sau khi tìm hiểu một chút, tôi nhận ra rằng đã đến lúc dùng nạng và xe đạp, vì việc tìm ra vấn đề mất quá nhiều thời gian. Cuối cùng, mọi thứ biến thành một daemon nhỏ hoạt động bình thường và tôi không cần bất cứ thứ gì khác.
Nếu có ai quan tâm, chào mừng bạn đến với mèo.

Các công cụ được sử dụng và cách hoạt động của “nó”

Vì vậy, điều đầu tiên tôi tìm thấy trên trang web cloudflare là mọi thứ bạn cần biết về API. Và tôi đã ngồi xuống để triển khai mọi thứ bằng Python (sau khi làm quen với Python, tôi ngày càng sử dụng nó nhiều hơn cho một số tác vụ đơn giản hoặc khi tôi cần nhanh chóng tạo một nguyên mẫu), thì tôi bất ngờ bắt gặp một cách triển khai gần như đã làm sẵn.
Nói chung, giấy gói được lấy làm cơ sở python-cloudflare.

Tôi đã lấy một trong các ví dụ về cập nhật DNS và thêm việc sử dụng tệp cấu hình cũng như khả năng cập nhật một số bản ghi A trong một vùng và tất nhiên là không giới hạn số lượng vùng.

Logic như sau:

  1. Tập lệnh nhận danh sách các vùng từ tệp cấu hình và lặp qua chúng
  2. Trong mỗi vùng, tập lệnh lặp qua từng bản ghi DNS loại A hoặc AAAA và kiểm tra IP công cộng có bản ghi
  3. Nếu IP khác, nó sẽ thay đổi; nếu không, nó sẽ bỏ qua vòng lặp và chuyển sang vòng lặp tiếp theo.
  4. Ngủ trong thời gian được chỉ định trong cấu hình

Cài đặt và cấu hình

Có lẽ có thể tạo một gói .deb, nhưng tôi không giỏi việc này và nó cũng không quá khó.
Tôi đã mô tả quá trình này rất chi tiết trong README.md trên trang kho lưu trữ.

Nhưng để đề phòng, tôi sẽ mô tả nó bằng tiếng Nga một cách khái quát:

  1. Đảm bảo rằng bạn đã cài đặt python3 và python3-pip, nếu chưa thì hãy cài đặt nó (trên Windows, python3-pip được cài đặt cùng với Python)
  2. Sao chép hoặc tải xuống kho lưu trữ
  3. Cài đặt các phụ thuộc cần thiết.
    python3 -m pip install -r requirements.txt

  4. Chạy tập lệnh cài đặt
    Đối với Linux:

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

    Đối với Windows: windows_install.bat

  5. Chỉnh sửa tập tin cấu hình
    Đối với Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Đối với Windows:

    Mở tệp zen-cf-ddns.conf trong thư mục nơi bạn đã cài đặt tập lệnh.

    Đây là một tệp JSON thông thường, các cài đặt không có gì phức tạp - tôi đã mô tả cụ thể 2 vùng khác nhau trong đó làm ví dụ.

Đằng sau trình cài đặt là gì?

install.sh cho Linux:

  1. Người dùng được tạo để chạy daemon mà không cần tạo thư mục chính và không có khả năng đăng nhập.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Một tệp nhật ký được tạo trong /var/log/
  3. Đặt người dùng mới được tạo thành chủ sở hữu của tệp nhật ký
  4. Các tệp được sao chép vào vị trí của chúng (cấu hình trong /etc, tệp thực thi trong /usr/bin, tệp dịch vụ trong /lib/systemd/system)
  5. Dịch vụ được kích hoạt

windows_install.bat dành cho Windows:

  1. Sao chép tệp thực thi và tệp cấu hình vào thư mục do người dùng chỉ định
  2. Tạo một tác vụ trong bộ lập lịch để chạy tập lệnh khi khởi động hệ thống
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Sau khi thay đổi cấu hình, tập lệnh cần được khởi động lại; trong Linux mọi thứ đều đơn giản và quen thuộc:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

đối với Windows, bạn sẽ phải hủy tiến trình pythonw và chạy lại tập lệnh (Tôi quá lười để viết dịch vụ cho Windows bằng C#):

taskkill /im pythonw.exe

Điều này hoàn tất việc cài đặt và cấu hình, hãy tận hưởng nó nhé.

Dành cho những ai muốn xem mã Python không đẹp lắm, đây là kho lưu trữ trên GitHub.

MIT đã được cấp phép, vì vậy hãy làm những gì bạn muốn với những thứ này.

Tái bút: Tôi hiểu rằng hóa ra nó hơi giống một chiếc nạng, nhưng nó hoạt động rất hiệu quả.

CẬP NHẬT: 11.10.2019/17/37 XNUMX:XNUMX
Mình tìm ra thêm 1 vấn đề nữa, nếu ai đó chỉ cho mình cách giải quyết thì mình sẽ rất biết ơn.
Vấn đề là nếu bạn cài đặt các phần phụ thuộc mà không có sudo python -m pip install -r ..., thì người dùng dịch vụ sẽ không hiển thị các mô-đun và tôi không muốn buộc người dùng cài đặt các mô-đun trong sudo, và đây là không chính xác.
Làm thế nào để làm cho nó trông đẹp?
CẬP NHẬT: 11.10.2019/19/16 XNUMX:XNUMX Sự cố đã được giải quyết bằng venv.
Đã có một số thay đổi. Bản phát hành tiếp theo sẽ có trong vài ngày tới.

Nguồn: www.habr.com

Thêm một lời nhận xét