使用 CloudFlare 您自己的動態 DNS

前言

使用 CloudFlare 您自己的動態 DNS 為了滿足家庭中的個人需求,我安裝了 VSphere,在其上運行虛擬路由器和 Ubuntu 伺服器作為媒體伺服器以及一堆其他好東西,並且該伺服器應該可以從 Internet 存取。 但問題是我的提供者提供靜態資料是為了錢,這些資料總是可以用於更有用的目的。 因此,我使用了ddclient + cloudflare組合。

一切都很好,直到 ddclient 停止工作。 經過一番探索後,我意識到是時候使用拐杖和自行車了,因為找到問題需要花費太多時間。 最後,一切都變成了一個可以正常工作的小守護進程,我不需要任何其他東西。
如果大家有興趣,歡迎關注貓。

使用的工具以及「它」的工作原理

所以我在 cloudflare 網站上發現的第一件事就是你需要了解的一切 API。 當我已經坐下來用Python實現所有內容時(在熟悉Python之後,我越來越多地使用它來完成一些簡單的任務或當我需要快速製作原型時),這時我突然遇到了一個幾乎現成的實現。
一般來說,以包裝器為基礎 python-cloudflare.

我採用了更新 DNS 的範例之一,並添加了設定檔的使用以及更新區域內多個 A 記錄的功能,當然,區域數量不受限制。

邏輯如下:

  1. 該腳本從配置文件接收區域列表並循環它們
  2. 在每個區域中,腳本循環遍歷 A 或 AAAA 類型的每個 DNS 記錄,並使用該記錄檢查公用 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 個不同區域作為範例。

安裝程式的背後是什麼?

Linux 下的 install.sh:

  1. 建立使用者來運行守護程序,無需建立主目錄,也無法登入。
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. 在 /var/log/ 中建立日誌文件
  3. 讓新建立的使用者成為日誌檔案的擁有者
  4. 檔案被複製到它們的位置(配置在 /etc 中,可執行檔在 /usr/bin 中,服務檔案在 /lib/systemd/system 中)
  5. 服務已激活

Windows 的 windows_install.bat:

  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 進程並重新運行腳本(我懶得用 C# 為 Windows 編寫服務):

taskkill /im pythonw.exe

這樣就完成了安裝和配置,祝您健康。

對於那些想查看不太漂亮的 Python 程式碼的人,這裡是 GitHub 上的儲存庫.

麻省理工學院授權,所以你可以隨心所欲地使用這些東西。

PS:我知道這有點像拐杖,但它的工作效果非常好。

更新: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

添加評論