CloudFlareを使用した独自のダイナミックDNS

序文

CloudFlareを使用した独自のダイナミックDNS 自宅での個人的なニーズのために、私は VSphere をインストールし、そこで仮想ルーターとメディア サーバーとしての Ubuntu サーバー、およびその他の優れた機能を実行します。このサーバーはインターネットからアクセスできる必要があります。 しかし、問題は、私のプロバイダーが、いつでもより有用な目的に使用できる静的データをお金で提供していることです。 したがって、ddclient + Cloudflareの組み合わせを使用しました。

ddclient が動作しなくなるまではすべて問題ありませんでした。 少し調べてみたところ、問題を見つけるのに時間がかかりすぎたため、松葉杖と自転車を使う時期が来たことに気づきました。 最終的には、すべてがただ動作する小さなデーモンになったので、他には何も必要ありません。
興味のある方は猫へようこそ。

使用されるツールと「それ」の仕組み

Cloudflare Web サイトで最初に知ったことは、知っておくべきことすべてです API。 そして、私はすでに Python ですべてを実装することに座っていました (Python に慣れてからは、いくつかの単純なタスクやプロトタイプを迅速に作成する必要がある場合に Python を使用することが増えました) が、突然、ほぼ既製の実装に遭遇しました。
一般に、ラッパーが基礎として採用されました Python-クラウドフレア.

DNS の更新の例の XNUMX つを取り上げ、構成ファイルの使用と、ゾーン内 (もちろん無制限の数のゾーン) 内の複数の 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 プロセスを強制終了してスクリプトを再実行する必要があります (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 を使用して解決されました。
いくつかの変更がありました。 次のリリースは数日以内に行われる予定です。

出所: habr.com

コメントを追加します