GoDNSで複数DNS事業者のDDNS更新を管理する
Go で書かれた AliDNS、Cloudflare、Google Domains、DNSPod、HE.net、DuckDNS、DreamHost などをサポートするダイナミック DNS クライアント ツール。
ひと目でわかる
- これは何?
- Cloudflare、DNSPod、AliDNSなどにIPv4・IPv6のレコード更新を行い、設定ファイルとWebパネルで運用するGo製DDNSクライアントを読み解きます。
- 誰に向いている?
- GoDNSで複数DNS事業者のDDNS更新を管理するは、READMEに示された構成を自分の環境で検証できる開発者やチームに向きます。文書だけで性能、互換性、運用上の安全性まで保証されたと考える利用者には向きません。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 3 日前です。
- 何の言語で書かれている?
- 主に Go です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
プロバイダー表から対応範囲を読む
GoDNSは、Goで書かれたセルフホスト型動的DNS(DDNS)クライアントです。著者の初期のオープンソースプロジェクトDynDNSの書き直しです。READMEは、複数のDNSプロバイダをサポートし、内蔵Webパネルを備えると説明しています。リポジトリはまた、セルフホストを望まないユーザー向けに、godns.appのホスト版を指しています。セルフホスト版は、バイナリ、Dockerイメージ、またはソースビルドとして利用できます。READMEは、ユーザー数や本番統計を指定していません。
GoDNSはセルフホスト型のDDNSクライアントで、複数DNSプロバイダーと組み込みWebパネルを備えるとREADMEにあります。Cloudflare、DigitalOcean、Google Domains、DNSPod、Dynv6、HE.net、AliDNS、DuckDNSなどが表に挙げられ、IPv4とIPv6の対応、ルートドメインとサブドメインの可否が分けて表示されます。
ドメインと資格情報を準備する
READMEの表には、Cloudflare、DigitalOcean、Google Domains、DNSPod、Dynv6、HE.net、AliDNS、DuckDNS、Dreamhost、No-IP、Scaleway、Linode、Strato、LoopiaSE、Infomaniak、Hetzner、OVH、Porkbun、Dynu、IONOS、TransIPを含む21のDNSプロバイダがリストされています。各プロバイダについて、表はIPv4およびIPv6の更新がサポートされているか、ルートドメインとサブドメインが更新できるかを示しています。例えば、Cloudflare、DigitalOcean、DNSPod、HE.net、AliDNS、Scaleway、Linode、Hetzner、Porkbunはルートドメインをサポートし、Google Domains、Dynv6、DuckDNS、Dreamhost、No-IP、Strato、LoopiaSE、Infomaniak、OVH、Dynu、IONOS、TransIPはサブドメインのみをサポートします。READMEはまた、GitHubのissueがルートドメインのDDNSの現在の状態を追跡していると述べています。
プロバイダー表では、Google DomainsやDuckDNSなどルートドメインを扱わないサービスがあります。対応済みという一語だけで判断せず、使うDNS事業者、更新対象がルートかサブドメインか、AとAAAAのどちらかを具体化します。READMEはルートドメインDDNSの状況をissue 76で追うよう案内しているため、表とissueの時点差も確認します。
設定ファイルと複数プロバイダー
GoDNSはJSONまたはYAMLファイルから設定を読み取ります。READMEは、ユーザーにconfig_sample.jsonまたはconfig_sample.yamlをconfig.jsonまたはconfig.yamlにコピーするよう指示しています。設定ファイルには、provider、email、password、login_token、domains、ip_urls、ipv6_urls、ip_type、interval、socks5_proxy、resolver、skip_ssl_verifyなどのプロパティが含まれます。注目すべき機能は動的ロードです。設定ファイルを変更すると、GoDNSは自動的に再ロードして変更を適用します。READMEはまた、GoDNSが単一の設定ファイルで複数のDNSプロバイダを同時にサポートし、異なるプロバイダのドメインを一緒に管理できることを強調しています。別のガイドMULTI_PROVIDER.mdが詳細な設定手順と例を提供しています。
セルフホストの前提には、自分のドメインを登録していること、選択したDNSサービスのアカウントを持つこと、API資格情報を用意することが含まれます。設定ファイルへ秘密を置く場合は権限とバックアップ範囲を決め、ログにトークンや完全なレコード値が出ないことを確認します。
Webパネルの役割
GoDNSは、IPアドレスが変更されたときに通知を送信できます。READMEは、SMTP経由のメール、Telegram、Slack、Discord、Pushover、Bark、ntfyを文書化しています。各通知チャネルには独自の設定スニペットがあります。たとえば、メールにはsmtp_server、smtp_username、smtp_password、smtp_port、send_from、send_toが必要です。message_templateプロパティは、TelegramとSlackでマークダウンをサポートしています。通知に加えて、GoDNSはHTTP GETまたはPOSTを介してWebhookを配信できます。Webhook設定にはurlとオプションのrequest_bodyがあり、request_bodyが空の場合はGETリクエストが送信されます。URLまたはボディで使用できる変数は、Domain、IP、IPTypeです。READMEはGETとPOSTの両方の例を提供しています。
READMEの設定とWeb Panelは、DNSプロバイダー、ドメイン、レコード、更新間隔などを操作する入口です。設定形式や既定値は版によって変わり得るため、サンプル設定を複製して値を埋めるだけでなく、実際にどのレコードへ更新要求が出たかをDNS事業者の監査ログで確認します。
通知と更新失敗を追跡する
バージョン3.1.0から、GoDNSには設定を管理し、ドメインのステータスを監視するためのWebパネルが含まれています。Web UIはデフォルトで無効になっています。有効にするには、設定ファイルのweb_panelセクションを設定します。これにはenabled、addr、username、passwordが含まれます。例ではaddrは0.0.0.0:9000です。有効にすると、http://localhost:9000にアクセスして管理および監視できます。READMEにはWebパネルのスクリーンショットが含まれていますが、設定管理とステータス監視以外の機能の詳細は説明されていません。
DDNSではIPの取得が正しくても、DNS APIの権限不足、TTL、IPv6の一時アドレス、名前解決キャッシュで結果が遅れます。GoDNSの通知やWebhookを使う場合は、成功通知をレコード確認の代用にせず、更新前後のアドレス、API応答、外部からのdig結果を一緒に保存します。
バイナリ、Docker、各OS
READMEには、GoDNSを実行するいくつかの方法が記載されています。1回限りの実行では、run_onceをtrueに設定すると、最初の更新後にプログラムは終了します。バックグラウンドプロセスには、nohup ./godns &を使用します。upstart、systemd、procd(OpenWRT)用の管理されたデーモンセットアップが提供されています。これらのinitシステムの設定ファイルは、リポジトリのconfig/upstart、config/systemd、config/procdディレクトリに含まれています。DockerイメージはDocker HubとGitHub Container Registryで利用でき、サンプルコマンドはローカル設定ファイルをマウントし、Webパネル用にポート9000を公開します。Windowsの場合、READMEはNSSMを使用してgodns.exeをサービスとしてインストールする方法を説明しています。READMEはまた、nohupで手動実行した場合、プログラムが停止しても自動的に再起動されないと述べています。
READMEはLinux、macOS、ARM Linux、Windows、MIPS32をサポート対象に挙げ、MIPSではGOOSとGOARCHを指定してビルドする例を示します。リリースバイナリ、Docker、ソースビルドの三経路があるため、ルーターではCPUアーキテクチャと権限、コンテナでは設定ファイルのマウントを確認します。
レコード更新を安全に試す
READMEはいくつかのオプション機能をカバーしています。IPv6サポートは、ip_typeをIPv6に設定し、ipv6_urlsを使用するか、ip_urlsとipv6_urlsを空のままにしてGoDNSにネットワークインターフェースのIPv6アドレスを検出させることで有効にできます。ネットワークインターフェースのIPはip_interfaceで指定でき、ip_urlsも設定されている場合は、最初にオンラインルックアップが試みられます。すべてのリモートコールは、socks5_proxyとuse_proxyを設定することでSOCKS5プロキシを経由できます。Mikrotik RouterOSデバイスからパブリックIPを取得するための設定ブロックもあります。debug_infoでデバッグ情報を有効にできます。READMEはいくつかのパブリックIPルックアップAPIを推奨しています。このプロジェクトはApache 2.0でライセンスされており、作品を使用、複製、変更、配布するための永続的、世界的、非独占的、ロイヤリティフリーのライセンスを付与します。ライセンステキストは保証やサポートについて言及しておらず、READMEもセキュリティ保証を提供していません。
最初はTTLの短いテスト用サブドメインを一つ選び、現在のIPv4だけを更新します。次にIPv6、複数プロバイダー、再起動、ネットワーク断を順に試し、GoDNSのログ、Webパネルの表示、DNSの権威サーバーへのdigを比較します。Apache-2.0のLICENSEと、managed版godns.appとの機能差は別の選択として記録してください。
編集部の結論
GoDNSで複数DNS事業者のDDNS更新を管理するは、READMEに示された構成を自分の環境で検証できる開発者やチームに向きます。文書だけで性能、互換性、運用上の安全性まで保証されたと考える利用者には向きません。導入前に、この記事で挙げた固有のコマンドと入力を小さな隔離環境で実行し、ログ、出力、失敗時の状態を記録してから対象範囲を広げてください。
コミュニティノート