使い方ガイド

D-DNS.JP の使い方

D-DNS.JP は、自宅などの、ときどき変わる IP アドレスに、myhome.d-dns.jp のような決まった名前を付ける無料のダイナミック DNS サービスです。ホストごとの設定値は、マイページにも表示されます。

1. はじめに

  1. アカウントを作る無料登録でメールアドレスを入れ、届いたメールのリンクからパスワードを決めます。
  2. ホストを登録するマイページでホスト名を入力し、ドメインを選んで登録します。
  3. IP アドレスを知らせるDiCE・ルーター・スクリプトなどで、いまの IP アドレスを D-DNS.JP に知らせます(3 章)。
  4. ルーターを設定する外から使うポート(Web なら 443 など)を、家の中の機器へ通す設定(ポート開放)をします。
  5. 確かめる名前がいまの IP アドレスを指しているか、外から届くかを確かめます(7 章)。

2. 名前とドメイン

ドメインd-dns.jp・face-w.com・utatane.in・naptify.net
ホスト名英字で始まる 3〜63 文字の半角英小文字・数字・ハイフン(ハイフンの連続・末尾は不可)
登録数1 アカウントにつき 3 つまで(無料)
レコードA(IPv4)と AAAA(IPv6)。知らせた IP アドレスで自動で作られる。TTL は 120 秒
ユーザー名・パスワード登録したメールアドレスと、アカウントのパスワード(DiCE ではパスワードだけを使う)

3. IP アドレスの知らせ方

次の方法のうち、どれか 1 つを使います。

3.1 DiCE(Windows)

無料ソフト DiCE に専用プラグイン(FaceDNS.plg)を入れ、次の値を設定します。IP アドレスが変わると、DiCE が自動で知らせます(IPv4 のみ)。

サービスFACE Dynamic DNS Service.
ドメイン名登録したドメイン(例 d-dns.jp)
ホスト名ドメインの前の部分(例 myhome)
パスワードアカウントのパスワード

3.2 dyndns2 互換の更新 URL(/nic/update)

ルーター・NAS・ddclient・スクリプトなどから使う、DynDNS 互換(dyndns2)の更新用 URL です。

URLhttps://d-dns.jp/nic/update?hostname=<FQDN>[&myip=<IP>]
メソッドGET(POST も可)
認証HTTP Basic(メールアドレス・パスワード)
hostname更新する FQDN。カンマで区切って 20 件まで(同じアカウントのホストだけ)
myip省略すると接続元の IP アドレス。IPv4 と IPv6 をカンマで区切って並べると、A と AAAA を一度に更新
User-Agent空のときは badagent
回数アカウントごとに 10 分に 60 回まで(超えると abuse)。パスワードを続けて間違えると、その接続元からの更新を一定時間受け付けない

応答(本文はホストごとに 1 行):

good <IP>更新した
nochg <IP>IP アドレスが同じだった(何も変えない)
badauthメールアドレスかパスワードが違う、またはアカウントが停止中
notfqdnホスト名が空・FQDN でない・対象外のドメイン
nohostこのアカウントのホストでない、または停止中
numhosthostname が 21 件以上
abuse回数の上限を超えた(時間をおいて送り直す)
dnserrサーバー側の異常(時間をおいて送り直す)
911メンテナンス中(時間をおいて送り直す)

http:// でも受け付けますが、パスワードが暗号化されずに送られます。対応している機器では https:// を使ってください。

3.3 ルーター・NAS

機器の DDNS 設定で「カスタム」または「DynDNS 互換(dyndns2)」を選び、次の値を入れます。項目名は機器によって違います。

サーバーd-dns.jp
更新 URLhttps://d-dns.jp/nic/update?hostname=<FQDN>&myip=<ipaddr>
ホスト名登録した FQDN(例 myhome.d-dns.jp)
ユーザー名・パスワード登録したメールアドレスと、アカウントのパスワード

<ipaddr> は、機器の説明書にある、IP アドレスを表す変数に置き換えます。

3.4 ddclient(Linux など)

protocol=dyndns2
ssl=yes
server=d-dns.jp
login=<メールアドレス>
password='<パスワード>'
myhome.d-dns.jp

inadyn・pfSense・OpenWrt なども、dyndns2 を選べば同じ値で使えます。

3.5 スクリプトと cron(Linux など)

いまの IP アドレスを /api/ip で調べ、変わったときだけ知らせるスクリプトの例です。cron で 5〜10 分おきに動かします。

#!/bin/sh
# /usr/local/bin/d-dns-update.sh
HOST=myhome.d-dns.jp
STATE=/var/tmp/d-dns-ip
IP=$(curl -fsS https://d-dns.jp/api/ip | sed -n 's/.*"ip": *"\([^"]*\)".*/\1/p') || exit 1
[ -n "$IP" ] && [ "$IP" = "$(cat "$STATE" 2>/dev/null)" ] && exit 0
R=$(curl -fsS -A d-dns-update.sh/1.0 -u '<メールアドレス>:<パスワード>' \
  "https://d-dns.jp/nic/update?hostname=$HOST&myip=$IP") || exit 1
case "$R" in good*|nochg*) echo "$IP" > "$STATE" ;; *) echo "$R" >&2; exit 1 ;; esac
# crontab -e
*/10 * * * * /usr/local/bin/d-dns-update.sh

パスワードを書いたファイルは chmod 700 などで、ほかの人が読めないようにしてください。

4. IPv6

  • AAAA レコードも登録できます。myip=203.0.113.5,2001:db8::5 のように並べると、A と AAAA を一度に更新します。
  • myip を付けずに送る機器で IPv6 を更新するときは、更新 URL のサーバーを https://ipv6.d-dns.jp にします(IPv6 でしか接続できない名前です。d-dns.jp のままだと IPv4 で接続され、A が更新されます)。
  • いまの IPv6 アドレスは https://ipv6.d-dns.jp/api/ip で調べられます。
  • IPv6 を使わなくなったら、マイページの「IPv6 を削除」で AAAA を消します(次に IPv6 で更新すると、また登録されます)。

5. プログラム向けの API

GET /api/ip接続元の IP アドレスを返す({"ip": "203.0.113.5"})。認証は不要
POST /api/port-check接続元の IP アドレスの、指定したポートに外から届くかを調べる(本文は {"port": 443}。結果の result は open・closed・timeout のいずれか)。接続元ごとに 10 分に 10 回まで
curl -sS https://d-dns.jp/api/ip
curl -sS -X POST https://d-dns.jp/api/port-check -H 'Content-Type: application/json' -d '{"port": 443}'

6. SSL 証明書(HTTPS)

発行元Let's Encrypt
認証ACME DNS-01。D-DNS.JP が自身の権威 DNS に _acme-challenge.<FQDN> の TXT レコードを置いて通す
名前ホストの FQDN 1 つ(ワイルドカードは不可)
鍵ECDSA P-256(PKCS#8 PEM)。D-DNS.JP が作って保管する
期限・更新90 日。期限の 30 日前に自動で発行し直す(鍵も替わる)。マイページの SHA-256 フィンガープリントが変わっていれば更新済み
ファイル<FQDN>.fullchain.pem(サーバー証明書+中間証明書)、<FQDN>.privkey.pem
申し込みマイページの「SSL 証明書を発行する」。通常は数分で発行
上限アカウントあたり 30 日に 5 件(ホストを削除して登録し直しても、数えた件数は戻らない。自動更新は数えない)。Let's Encrypt 側の発行数の上限を超えたときは順番待ち
取りやめマイページの「SSL 証明書をやめる」、またはホストの削除で、証明書と鍵を消す(失効の手続きはしない)

設定例(ファイルを /etc/ssl/d-dns/ に置いた場合)。外から接続するには、ルーターで 443/tcp を開放する。

nginx
server {
    listen 443 ssl;
    server_name myhome.d-dns.jp;
    ssl_certificate     /etc/ssl/d-dns/myhome.d-dns.jp.fullchain.pem;
    ssl_certificate_key /etc/ssl/d-dns/myhome.d-dns.jp.privkey.pem;
}
Apache
<VirtualHost *:443>
    ServerName myhome.d-dns.jp
    SSLEngine on
    SSLCertificateFile    /etc/ssl/d-dns/myhome.d-dns.jp.fullchain.pem
    SSLCertificateKeyFile /etc/ssl/d-dns/myhome.d-dns.jp.privkey.pem
</VirtualHost>

privkey.pem は chmod 600 などで保護する。証明書が更新されたら、2 つのファイルとも置き換えて設定を読み込み直す(nginx -s reload / apachectl graceful)。中身は openssl x509 -in <fullchain.pem> -noout -subject -enddate で確かめられる。

7. 確かめ方・つながらないとき

名前がいまの IP アドレスを指しているかは、次のように調べます(更新から 120 秒ほどは、キャッシュに前の結果が残ることがあります)。

dig +short myhome.d-dns.jp A
nslookup myhome.d-dns.jp
名前が古い IP のまま更新の応答(good・nochg など)を確かめる。マイページの「いまの IP で更新する」でも更新できる
badauthユーザー名は登録したメールアドレス。パスワードを忘れたら再設定できる
nohostFQDN の綴りと、マイページに登録されているかを確かめる
外から届かないルーターのポート開放と、機器のファイアウォールを確かめる。トップページのツールで、外から届くかを調べられる
家の中から名前で届かないNAT ループバックに対応していないルーターでは、家の中から自分のグローバル IP へ接続できない。家の中では機器のローカル IP を使う