概要
FastDDNSクライアントAPIを使用すると、router、IPカメラ、スクリプト、専用のアップデーターソフトウェアなど、HTTPに対応したデバイスでDNSのhostnameを現在のIPアドレスに向け続けることができます。 APIはシンプルなGETリクエスト方式に従います。クライアントが認証情報とhostnameを送信すると、サーバーは結果を示す短いステータスコードを返します。
サーバーは、受信した接続からクライアントのパブリックIPアドレスを自動的に検出します。IPを指定するための追加パラメータは必要ありません。
認証
APIは2つの認証方法をサポートしています。どちらも同じように受け入れられます。デバイスやルーターで設定しやすい方を選んでください。
user_nameユーザー名とuser_passパスワードが発行されます。これらの認証情報はただ更新でき、FastDDNS管理ダッシュボードへのログインには使用できません。この設計により、デバイスの認証情報が侵害された場合の影響を抑えられます。
方法1 — HTTP基本認証(URL埋め込み)
認証情報は標準のuser:password@host形式でURLに埋め込まれます。これはrouter、カメラ、HTTPクライアントライブラリで広くサポートされています。ダッシュボードのUpdater Client Keyをパスワードとして使ってください。
| フィールド | 概要 | 場所 |
|---|---|---|
| {user_name} | ユーザー名は作成時にこの特定のホスト名に割り当てられました。 | FastDDNS ダッシュボード →ホスト名 →詳細 |
| {user_pass} | この特定のホスト名に作成時に割り当てられたパスワードです。 | FastDDNS ダッシュボード →ホスト名 →詳細 |
| {hostname} | 更新すべき完全限定ホスト名、例えばtesthost.fastddns.org。 |
FastDDNS ダッシュボード →ホスト名 →詳細 |
方法2 — クエリ文字列パラメータ
認証情報はhostname認証情報はプレーンなクエリパラメータとして渡されます。これは、HTTP Basic Authヘッダーを設定できないものの、完全にカスタムしたURL文字列を指定できるデバイスやfirmwareに便利です。
| パラメータ | 種類 | 概要 |
|---|---|---|
| {user_name} |
string | このホスト名は作成時に割り当てられたユーザー名です。 |
| {user_pass} | string | このホスト名が作成された際に割り当てられたパスワードです。 |
| {hostname} | string | 更新すべき完全限定ホスト名、例:testhost.fastddns.org。 |
クエリ文字列認証の使用例:
更新を実行
アカウントに登録されているhostnameのIPアドレスを更新するためのGETリクエストを1回送信します。各リクエストは一度に1つのホスト名を更新します。
エンドポイント
httpsをhttpをHTTPに置き換えてください。URL形式 — 方法1: HTTP基本認証
URL形式 — 方法2: クエリ文字列
クエリパラメータ
| パラメータ | 種類 | 概要 |
|---|---|---|
| hostname 必須 | string | 更新する完全限定ホスト名(FQDN)、例:myhome.fastddns.net または testhost.fastddns.org。リクエストごとにホスト名は1つのみ対応されています。 |
| user_name 方法2 | string | このhostnameのユーザー名です。クエリ文字列認証(方法2)を使用する場合に必要です。HTTP Basic Auth(方法1)を使用する場合は不要です。 |
| user_pass 方法2 | string | このhostnameのパスワードです。クエリ文字列認証(方法2)を使用する場合に必要です。HTTP Basic Auth(方法1)を使用する場合は不要です。 |
myipパラメータを指定する必要はありません。
リクエスト例
方法1 — HTTPS経由のHTTP Basic Auth:
方法2 — HTTPS経由のクエリ文字列:
プレーンHTTPを使用する場合(テストまたは信頼できるネットワークのみ):
戻りコード
すべての更新応答はHTTPステータス 200 OK を返し、本文はプレーンテキストです。 クライアントはこのテキスト本文を解析して、更新の実際の結果を判断する必要があります。
更新成功
hostnameレコードが検出されたIPアドレスに更新されました。実際のIPアドレスは応答に含まれます。例: good 203.0.113.45。これはIPアドレスが変更された場合に返される期待される応答です。
変更不要
hostnameはすでに検出されたIPアドレスを指しているため、更新は不要でした。現在のIPアドレスが含まれます。例: nochg 203.0.113.45。これは正常な、エラーではない応答です。
認証失敗
ユーザー名またはアップデートクライアントキーが正しくないか、取り消されています。FastDDNSダッシュボードで認証情報を確認してください。自動的に再試行せず、まず認証情報を修正してください。
ホスト名が見つかりません
指定されたhostnameはアカウントに存在しないか、動的更新の対象外です。hostnameのスペルを確認し、アカウントに登録されていることを確認してください。
サーバーエラー
FastDDNSサーバー側で内部エラーが発生しました。再試行する前に少なくとも5分待ってください。問題が続く場合は、FastDDNSのステータスページを確認するか、サポートに連絡してください。
応答概要
| 応答テキスト | HTTPステータス | 意味 | 必要な対応 |
|---|---|---|---|
| good {ip} | 200 | IPアドレスの更新に成功 | なし — 更新完了 |
| nochg {ip} | 200 | IPアドレスに変更なし、更新なし | なし — すでに最新の状態 |
| badauth | 200 | 無効な認証情報 | ユーザー名 / クライアントキーを確認してください |
| nohost | 200 | ホスト名は登録されていません | ダッシュボードでホスト名を検証してください |
| 911 | 200 | サーバー側のエラー | 5分以上待ってから再試行してください |
200を返します — テキスト本文で更新が実際に成功したかどうかを確認できます。
クライアントIPを取得
FastDDNSは、サーバーから見たパブリックIPアドレスを返すシンプルなユーティリティエンドポイントを提供します。 デバッグ、デバイスがどのIPから送信しているかの確認、または更新エンドポイントを呼び出す前にカスタムスクリプトで使用する場合に便利です。
エンドポイント
レスポンス
HTTP 200 OK とともに、検出されたパブリックIPアドレスをレスポンス本文にプレーンテキストで返します。
# Example response body
203.0.113.45RESPONSE
リクエスト例
curlを使用:
curl https://client.fastddns.net/dyndns/getipSHELL
コード例
シェル / cURL
# Recommended: let curl build the Authorization header (-u), so the
# credentials never appear in the URL.
HOSTNAME="myhome.fastddns.org"
USER_NAME="YOUR_UPDATE_USERNAME"
USER_PASS="YOUR_UPDATE_PASSWORD"
curl -s -u "${USER_NAME}:${USER_PASS}" "https://client.fastddns.net/?hostname=${HOSTNAME}"
# Legacy form, for devices that can only be given one URL field:
curl -s "https://client.fastddns.net/?hostname=${HOSTNAME}&user_name=${USER_NAME}&user_pass=${USER_PASS}"
# Check what IP the server sees from your device
curl -s "https://client.fastddns.net/dyndns/getip"SHELL
パイソン
import requests
HOSTNAME = "testhost.fastddns.org"
USER_NAME = "YOUR_UPDATE_USERNAME"
USER_PASS = "YOUR_UPDATE_PASSWORD"
# Method 1: HTTP Basic Auth
resp = requests.get(
"https://client.fastddns.net/",
auth=(USER_NAME, USER_PASS),
params={"hostname": HOSTNAME}
)
# Method 2: Query string
# resp = requests.get("https://client.fastddns.net/", params={
# "hostname": HOSTNAME, "user_name": USER_NAME, "user_pass": USER_PASS
# })
body = resp.text.strip()
if body.startswith("good"):
print(f"Updated successfully: {body}")
elif body.startswith("nochg"):
print(f"No change needed: {body}")
elif body == "badauth":
print("Authentication failed. Check credentials.")
elif body == "nohost":
print("Hostname not found.")
elif body == "911":
print("Server error. Try again later.")PYTHON
PHP
<?php
$hostname = 'testhost.fastddns.org';
$user_name = 'YOUR_UPDATE_USERNAME';
$user_pass = 'YOUR_UPDATE_PASSWORD';
// Recommended: Basic Auth in a request header, so the password is not
// part of the URL and cannot leak through logs or error messages.
$url = "https://client.fastddns.net/?hostname=" . urlencode($hostname);
$auth = 'Basic ' . base64_encode($user_name . ':' . $user_pass);
// Method 2: Query string credentials
// $url = "https://client.fastddns.net/?hostname=" . urlencode($hostname)
// . "&user_name=" . urlencode($user_name)
// . "&user_pass=" . urlencode($user_pass);
$ctx = stream_context_create(['http' => [
'timeout' => 10,
'header' => "Authorization: {$auth}\r\n",
]]);
$body = trim(file_get_contents($url, false, $ctx));
switch (true) {
case str_starts_with($body, 'good'):
echo "Updated: {$body}\n"; break;
case str_starts_with($body, 'nochg'):
echo "No change: {$body}\n"; break;
case $body === 'badauth':
echo "Auth failed. Check hostname credentials.\n"; break;
case $body === 'nohost':
echo "Hostname not found.\n"; break;
case $body === '911':
echo "Server error, retry later.\n"; break;
}PHP
Bash (Cron / routerスクリプト)
#!/bin/bash
HOSTNAME="testhost.fastddns.org"
USER_NAME="YOUR_UPDATE_USERNAME"
USER_PASS="YOUR_UPDATE_PASSWORD"
# Method 1: HTTP Basic Auth
RESULT=$(curl -s -u "${USER_NAME}:${USER_PASS}" "https://client.fastddns.net/?hostname=${HOSTNAME}")
# Method 2: Query string (uncomment to use instead)
# RESULT=$(curl -s "https://client.fastddns.net/?hostname=${HOSTNAME}&user_name=${USER_NAME}&user_pass=${USER_PASS}")
case "$RESULT" in
good*) echo "[OK] $RESULT" ;;
nochg*) echo "[OK] $RESULT" ;;
badauth) echo "[ERR] Bad credentials — check hostname user/pass"; exit 1 ;;
nohost) echo "[ERR] Hostname not found"; exit 1 ;;
911) echo "[ERR] Server error, retry later"; exit 1 ;;
*) echo "[WARN] Unknown response: $RESULT" ;;
esacBASH
トラブルシューティング
次のエラーを受け取ります:badauthを受け取っています。
提供されたuser_nameまたはuser_passは、そのhostnameに割り当てられた認証情報と一致しません。
各hostnameにはそれぞれ独立した認証情報があります。ダッシュボードのホスト名→詳細で確認してください。
これらの認証情報はそのhostname専用であり、FastDDNS管理ポータルへのログインには使用できません。
最近認証情報をリセットした場合は、そのhostnameを使用しているすべてのデバイスの設定を更新してください。
次のエラーを受け取ります:nohost
hostnameパラメータに指定したhostnameが存在しないか、提供された認証情報に対応するアカウントに属していません。
hostnameの入力ミスがないか、ダッシュボードにそのhostnameが登録されているか、user_nameとuser_passが一致しているか確認してくださいその特定のホスト名が正しいか確認してください。
サーバーが誤ったIPを検出しています
サーバーはTCP接続の送信元IPを使用します。デバイスがNAT routerの背後にある場合は、routerのパブリックIPが検出されます。これは通常、意図した動作です。VPNまたはプロキシを使用している場合、サーバーにはVPNまたはプロキシの出口IPが表示されます。 getip endpointを使って、サーバーがあなたのデバイスからどのIPを認識しているか確認してください。
次のエラーを受け取ります:911を受け取っています。
これは一時的なサーバー側の問題を示します。再試行する前に少なくとも5分待ってください。リクエストを短時間に繰り返し送信しないでください。rate limitingが発生する可能性があります。FastDDNSのステータスページで進行中のインシデントを確認してください。
アップデートエンドポイントはどのくらいの頻度でポーリングすべきでしょうか?
IPの変更は5分です。IPが変わっていない場合、サーバーはnochgを返しますが、これは軽量なノーオペレーションです。1分に1回以上の投票は推奨されず、速度制限につながる可能性があります。