序文
自宅での個人的なニーズのために、私は VSphere をインストールし、そこで仮想ルーターとメディア サーバーとしての Ubuntu サーバー、およびその他の優れた機能を実行します。このサーバーはインターネットからアクセスできる必要があります。 しかし、問題は、私のプロバイダーが、いつでもより有用な目的に使用できる静的データをお金で提供していることです。 したがって、ddclient + Cloudflareの組み合わせを使用しました。
ddclient が動作しなくなるまではすべて問題ありませんでした。 少し調べてみたところ、問題を見つけるのに時間がかかりすぎたため、松葉杖と自転車を使う時期が来たことに気づきました。 最終的には、すべてがただ動作する小さなデーモンになったので、他には何も必要ありません。
興味のある方は猫へようこそ。
使用されるツールと「それ」の仕組み
Cloudflare Web サイトで最初に知ったことは、知っておくべきことすべてです
一般に、ラッパーが基礎として採用されました
DNS の更新の例の XNUMX つを取り上げ、構成ファイルの使用と、ゾーン内 (もちろん無制限の数のゾーン) 内の複数の A レコードを更新する機能を追加しました。
ロジックは次のとおりです。
- スクリプトは構成ファイルからゾーンのリストを受け取り、それらをループします。
- 各ゾーンで、スクリプトはタイプ A または AAAA の各 DNS レコードをループし、そのレコードでパブリック IP をチェックします。
- IP が異なる場合は変更し、異なる場合はループの繰り返しをスキップして次のループに進みます。
- 設定で指定された時間だけスリープします。
インストールと構成
.deb パッケージを作成することも可能でしょうが、私はこれが得意ではないので、それほど難しくありません。
このプロセスについては、次の README.md で詳しく説明しました。
しかし、念のため、一般的な用語でロシア語で説明します。
- python3 と python3-pip がインストールされていることを確認し、インストールされていない場合はインストールします (Windows では、python3-pip は Python とともにインストールされます)。
- リポジトリのクローンを作成またはダウンロードする
- 必要な依存関係をインストールします。
python3 -m pip install -r requirements.txt
- インストールスクリプトを実行する
Linuxの場合:chmod +x install.sh sudo ./install.sh
Windows の場合: windows_install.bat
- 設定ファイルを編集する
Linuxの場合:sudoedit /etc/zen-cf-ddns.conf
Windowsの場合:
スクリプトをインストールしたフォルダーにある zen-cf-ddns.conf ファイルを開きます。
これは通常の JSON ファイルであり、設定は複雑ではありません。例として 2 つの異なるゾーンについて具体的に説明しました。
インストーラーの背後にあるものは何ですか?
Linux の場合は install.sh:
- ホーム ディレクトリを作成せず、ログインする機能も持たずに、デーモンを実行するためのユーザーが作成されます。
sudo useradd -r -s /bin/false zen-cf-ddns
- ログファイルは/var/log/に作成されます
- 新しく作成したユーザーをログ ファイルの所有者にします。
- ファイルは所定の場所 (/etc に設定、/usr/bin に実行可能ファイル、/lib/systemd/system にサービス ファイル) にコピーされます。
- サービスが有効化されています
Windows の場合は windows_install.bat:
- 実行可能ファイルと構成ファイルをユーザー指定のフォルダーにコピーします
- システム起動時にスクリプトを実行するタスクをスケジューラに作成します。
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 コードを見たい人のために、ここにあります
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