ダイナミック DNS

提供: ArchWiki
ナビゲーションに移動 検索に移動

Dynamic DNS あるいは DDNS はインターネット上の絶えず変化する IP アドレスを指し示す DNS をリアルタイムに更新する手法です。ダイナミック DNS は固定 IP が存在しないリソースに恒久的なドメイン名を割り当てるのに使われます。DDNS を使用するには、DDNS プロバイダで登録を行なって、さらに、IP アドレスが変わったときにプロバイダに新しい IP を通知するように自動更新ツールを設定する必要があります。


ルーター

DDNS を必要とするデバイスがルーターを通している場合、まずルーターだけで DDNS サービスを更新することができないか確認してください。使用できるサービスは限られますが、ルーターを使うことにはメリットが複数存在します: セットアップが簡単であり、メンテナンスの必要がほとんどありません。そしてダウンタイムがなくなります (ルーターが落ちた場合、インターネットに接続自体ができなくなります)。

更新用クライアントツール

いくつかの DDNS プロバイダはクライアントツールを必須とはしておらず、cURL で更新することも可能であることは気に留めておいて下さい。

複数サービスに対応したクライアント

  • ddclient — 多くのDDNSサービスのアカウントのDDNSエントリを更新できます。
https://github.com/ddclient/ddclient || ddclient
  • ddnsc — Pythonで書かれたシンプルで軽量なクライアント。
https://github.com/shyaminayesh/ddnsc || ddnscAUR
  • inadyn — SSL/TLSをサポートしたDDNSクライアント。
https://troglobit.com/projects/inadyn/ || inadyn
  • inadyn-mt — inadyn が元となったシンプルなDDNSクライアント。
http://inadyn-mt.sourceforge.net/ || inadyn-mtAUR
  • ndyndns — DynDNS と Namecheapをサポートしています。
https://github.com/niklata/ndyndns || ndyndnsAUR

特定のサービスの為のクライアント

  • duckdns — systemd を用いて DuckDNS.org のエントリを更新するクライアント。
https://www.duckdns.org/ || duckdnsAUR, duckdns-ipv6AUR
  • hetzner_ddns — Hetzner DNS のためのDDNS デーモン。
https://github.com/filiparag/hetzner_ddns || hetzner_ddnsAUR
  • noip — no-ip.com サービスのためのDDNS クライアント。
https://www.no-ip.com/downloads.php?page=linux || noipAUR
  • petrified — freedns.afraid.org を更新するための bash クライアント。
https://gitlab.com/troyengel/petrified || petrifiedAUR


ddclient

ddclient は多数の DDNS サービスに対応しているため、ルーターが使えない場合は DDNS を更新するための推奨ツールとなります。ddclient は systemd にも対応しています。

インストールした後、デフォルトの設定ファイル /etc/ddclient/ddclient.conf を編集して使用する DDNS プロバイダをセットアップしてください (ファイルには多数の例が記載されています)。設定したら ddclient.service起動有効化してください。

-noquiet-debu オプションを付けて実行することで設定をテストできます:

# ddclient -daemon=0 -noquiet -debug

ddclient 対応のサービスの一部を以下に挙げます。examplesprotocols にはさらに多くのプロバイダが載っています。

ddclient に対応しているサービス
サービス名 費用 利用可能なレコード ホストネーム数 設定のノート 他のツール
Now-DNS 無料 A, AAAA 無制限 dyndns2 プロトコルを使用、サーバー: now-dns.com/update
ChangeIP 無料あるいは有料 A, AAAA, CNAME, MX, サブドメイン 7つまで無料
Duck DNS 無料 duckdnsAUR
Dynu 無料あるいは有料 4つまで無料、有料で500まで サンプル
FreeDNS 無料あるいは有料 CNAME, A, AAAA, MX, NS, TXT, LOC, RP, HINFO, SRV 5つまで無料 afraid-dyndns-uvAUR, petrifiedAUR
No-IP 無料あるいは有料 3つまで無料、有料で25以上 noip プロトコル、dynupdate.no-ip.com サーバーを使用 noipAUR
nsupdate.info 無料かつオープンソース A, AAAA dyndns2 プロトコルを使用 inadyn-forkAUR
ノート: no-ip の無料ユーザーは30日ごとにドメインを手動で確認する必要があります。有料ユーザーはドメイン確認が不要です。詳しくは Why is My Hostname Pending Deletion? を参照。

外部ウェブサイトから IP アドレスを確認

ddclient が IP アドレスを検出できない場合、checkip.dyndns.org などの外部ウェブサイトから IP アドレスを取得するように ddclient を設定できます。デフォルトでは {{ic|use=web]} を指定した場合にこのアドレスが利用されます。また、IPを確認するサービスへの頻繁なアクセスを避けるために、確認までの期間を延すことが推奨されています:

/etc/ddclient/ddclient.conf
daemon=900
# web status page から IP アドレスを取得
use=web

他の IP 確認サービスを web オプションで設定する事もできます:

/etc/ddclient/ddclient.conf
daemon=900
# web status page から IP アドレスを取得
use=web, web=myonlineportal.net/checkip

IPv6 アドレスを決めるためにスクリプトを使う

ddclient は時折、IPv6 アドレスの取得を間違えるか失敗します。しかし、外部のウェブサイトの代わりに ローカルに IPv6 を知ることができます。以下のスクリプトが使えます:

/usr/bin/get-ip
#!/bin/bash
/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

このスクリプトを使うように ddclient を設定するには:

/etc/ddclient/ddclient.conf
# obtain IP address from script
use=cmd,cmd='/usr/bin/get-ip'


ネットワークが立ち上がった後に ddclient を起動

ddclient で IP を更新できない場合、おそらくネットワークが立ち上がる前に ddclient のプロセスが起動しているのが原因です。修正するには、ユニットファイルを編集して network-online.target に依存するようにしてください:

# systemctl edit ddclient.service
[Unit]
After=network-online.target
Wants=network-online.target

他のプロバイダ

以下の DDNS プロバイダは ddclient に対応していないため、特殊なツールを使ったりカスタムスクリプトで IP を更新する必要があります。コマンドラインで IP を更新できる場合、cronsystemd/タイマーなどのツールを利用して更新を自動化することができます。

duiadns

Duiadns.org は無料のサービスです。duiadnsAUR[リンク切れ: アーカイブ: aur-mirror] で自動化が可能。

FreeDns.io

FreeDns.io は無料で A, AAAA, DNS レコードを提供します。CNAME, TXT, MX レコードはプレミアムメンバーになる必要があります。HTTP API を利用して IP を更新することができます (1時間あたり60回までの制限あり)。複数のサンプルスクリプト が用意されています。

Now-DNS

Now-DNS.com は簡単にセットアップができる無料サービスです。

System-NS

System-NS はコマンドラインによる更新ができる無料サービスです。公式のドキュメント を参照してください。

Loopia.se

ネームサーバーとして loopia.se を使う場合、公式ドキュメント に書かれているように curl で DNS レコードを更新することができます。