概要
IPinfoのデータベースは、CSV、MMDB、JSON(NDJSON)、Parquetの4形式で提供されています。更新は日次のため、正確な情報を使い続けるにはデータを最新の状態に保つ必要があります。
ダウンロードの方法は2つあります。アカウントのダッシュボードにある「Data Downloads」から手動で取得する方法と、APIトークンを付けたURLへcurlでリクエストする方法です。MaxMindのGeoIP Updateにあたる専用の更新ツールはないため、自動化する場合は後者をスクリプト化し、cronやタスクスケジューラーで定期実行します。
本記事では、WindowsとLinux(Ubuntu)のそれぞれで自動更新を設定する手順を紹介します。メーカーが公開しているドキュメントはこちらをご参照ください。
設定前に確認すること
https://ipinfo.io/data/... へのリクエストは、まず302レスポンスで短命の署名付きURLへリダイレクトされ、実際のファイルはCDNから配信されます。curlに-Lオプションが必要なのはこのためです。
社内で宛先を制限している場合は、次のホストへのHTTPS(TCP/443)の通信を許可してください。
- ipinfo.io:リダイレクトを発行するエンドポイント
- api.ipinfo.io:APIのエンドポイント
- dl.assets.ipinfo.io:多くのアカウントでファイルを配信するCDN
- dl.ipinfo.io:Splunk連携で使われる経路、および代替経路
- storage.googleapis.com:dl.ipinfo.io の背後にあるストレージ。TLSインスペクションを行うプロキシ環境では、こちらの許可も必要になることがあります
最も多い失敗は、ipinfo.io は許可されているのにCDN側が遮断されているケースです。最初のリクエストは302で成功するのに、その後のダウンロードが「Connection reset by peer」やTLS証明書の検証エラー、あるいは無応答のまま止まります。
設定前の疎通確認には、次のコマンドが使えます。ipinfo.ioからの302に続いてCDNから200が返れば正常です。2つ目が失敗する場合、原因はリダイレクト先にあります。
$ curl -I -L "https://ipinfo.io/data/ipinfo_lite.mmdb?token=$TOKEN"
ダウンロード時の通信要件
https://ipinfo.io/data/... へのリクエストは、まず302レスポンスで短命の署名付きURLへリダイレクトされ、実際のファイルはCDNから配信されます。curlに-Lオプションが必要なのはこのためです。
社内で宛先を制限している場合は、次のホストへのHTTPS(TCP/443)の通信を許可してください。
- ipinfo.io:リダイレクトを発行するエンドポイント
- api.ipinfo.io:APIのエンドポイント
- dl.assets.ipinfo.io:多くのアカウントでファイルを配信するCDN
- dl.ipinfo.io:Splunk連携で使われる経路、および代替経路
- storage.googleapis.com:dl.ipinfo.io の背後にあるストレージ。TLSインスペクションを行うプロキシ環境では、こちらの許可も必要になることがあります
最も多い失敗は、ipinfo.io は許可されているのにCDN側が遮断されているケースです。最初のリクエストは302で成功するのに、その後のダウンロードが「Connection reset by peer」やTLS証明書の検証エラー、あるいは無応答のまま止まります。
設定前の疎通確認には、次のコマンドが使えます。ipinfo.ioからの302に続いてCDNから200が返れば正常です。2つ目が失敗する場合、原因はリダイレクト先にあります。
$ curl -I -L "https://ipinfo.io/data/ipinfo_lite.mmdb?token=$TOKEN"
ダウンロード回数の上限
同じデータベースのダウンロードは、1日あたり10回までに制限されています。制限はアカウント単位ではなく、送信元IPアドレス単位で数えられます。無償・有償のどちらの利用でも同じです。
上限に達すると、1日のダウンロード回数を超えた旨のメッセージが返り、ファイルは取得できません。多数のサーバーで同じデータベースを使う場合は、各サーバーから個別に取得するのではなく、社内の1台にダウンロードしてから配布する構成を検討してください。業務上どうしても回数が必要な場合は、上限の引き上げを相談できます。
ファイルの整合性を確認する
ダウンロードしたファイルが壊れていないかは、チェックサムで確認できます。データ配信と同じトークンで、md5・sha1・sha256の3種類を取得できます。
$ curl "https://ipinfo.io/data/ipinfo_lite.mmdb/checksums?token=$TOKEN"
チェックサムの取得は、前述の1日10回の上限にはカウントされません。自動更新のスクリプトに組み込んでおくと、転送が途中で切れたファイルをそのまま配置してしまう事故を防げます。ダッシュボードのData Downloadsページからも確認できます。
IPinfo データベースの自動更新設定手順
※本記事では、IPinfo LiteのMMDB形式データベースをダウンロードする手順を紹介します。
※本手順に含まれるフォルダ名やファイル名などは、任意のものを設定してください。
(Linux・Windows共通)事前準備:APIトークンの確認
- IPinfoにログインします。
- ログイン後に表示されるダッシュボードの「API Access」セクションから「API Token」を確認します。

- このAPIトークンは、後の手順でスクリプトに設定するため、メモしておいてください。
Linux(Ubuntu)環境での設定手順
手順1:作業フォルダの作成
ターミナルを開き、以下のコマンドを実行してデータベースを保存するフォルダを作成します。
$ mkdir -p ~/IPinfo
手順2:スクリプトの作成
-
- 以下のコマンドを実行してスクリプトファイルを作成します。
$ nano ~/IPinfo/update_mmdb.sh
- エディタが開いたら、以下のスクリプトをコピーして入力してください。「設定」の項目については、下部の説明を参考にご自身の環境に合わせて設定してください。
クリックしてスクリプトを表示する
#!/usr/bin/env bash set -euo pipefail # ========== 設定 ========== TOKEN="xxxxxx" FILE="ipinfo_lite.mmdb" BASE="https://ipinfo.io/data" SAVE_DIR="$HOME/IPinfo" # ========================== mkdir -p "$SAVE_DIR" DL_URL="${BASE}/${FILE}?token=${TOKEN}" CS_URL="${BASE}/${FILE}/checksums?token=${TOKEN}" LAST_SHA_FILE="${SAVE_DIR}/${FILE}.sha256" TMP_FILE="${SAVE_DIR}/${FILE}.tmp" FINAL_FILE="${SAVE_DIR}/${FILE}" # チェックサムエンドポイントでSHA256の値を取得 REMOTE_SHA=$(curl -fsSL "$CS_URL" | python3 -c \ 'import sys,json; print(json.load(sys.stdin)["checksums"]["sha256"])') # ローカルに保存済みのSHA256の値を読み込む(初回は空) LOCAL_SHA="" [[ -f "$LAST_SHA_FILE" ]] && LOCAL_SHA=$(cat "$LAST_SHA_FILE") # 一致していれば更新不要 → 終了 if [[ "$REMOTE_SHA" == "$LOCAL_SHA" && -f "$FINAL_FILE" ]]; then echo "No update. $(date '+%Y-%m-%d %H:%M:%S')" exit 0 fi # 更新あり → ダウンロード開始 echo "Update detected. Downloading..." START_EPOCH=$(date +%s) START_HUMAN=$(date '+%Y-%m-%d %H:%M:%S') echo "Download start: $START_HUMAN" curl -fL "$DL_URL" -o "$TMP_FILE" END_EPOCH=$(date +%s) END_HUMAN=$(date '+%Y-%m-%d %H:%M:%S') ELAPSED=$((END_EPOCH - START_EPOCH)) echo "Download end: $END_HUMAN (elapsed ${ELAPSED}s)" # ダウンロードしたファイルのSHA256の値を検証 DOWNLOADED_SHA=$(sha256sum "$TMP_FILE" | awk '{print $1}') if [[ "$DOWNLOADED_SHA" != "$REMOTE_SHA" ]]; then echo "Checksum mismatch! Aborting." rm -f "$TMP_FILE" exit 1 fi # 検証OKなら本番ファイルに置換し、SHA256の値をSAVE_DIRで指定したフォルダに保存 mv -f "$TMP_FILE" "$FINAL_FILE" echo "$REMOTE_SHA" > "$LAST_SHA_FILE" echo "Update complete. $(date '+%Y-%m-%d %H:%M:%S')"【参考】設定項目について
-
- TOKEN:事前準備で取得したAPIトークンを入力してください。
- FILE:ダウンロードするデータベースのファイル名を入力してください。ファイル名は、公式ドキュメントの「Database Download URI」列からご確認ください。
- SAVE_DIR:手順1で作成したフォルダのパスを入力してください。
-
- 入力後、保存(
Ctrl+O→Enter)して閉じます(Ctrl+X)。
- 以下のコマンドを実行してスクリプトファイルを作成します。
手順3:実行権限の付与
作成したスクリプトに実行権限を付与します。以下のコマンドを実行してください。
$ chmod +x ~/IPinfo/update_mmdb.sh
手順4:動作確認
以下のコマンドを実行して、スクリプトが正常に動作するかを確認します。
$ ~/IPinfo/update_mmdb.sh
正常に動作した場合、以下のように表示されます。
初回実行時(ダウンロードが発生する場合):
Update detected. Downloading... Download start: 2026-04-06 15:19:51 (ダウンロード進捗が表示されます) Download end: 2026-04-06 15:19:52 (elapsed 1s) Update complete. 2026-04-06 15:19:52
2回目以降(更新がない場合):
No update. 2026-04-06 15:20:00
手順5:定期実行の設定
- cronを使用して自動更新を設定します。
crontab -e
- ファイルの末尾に以下を追加します。ユーザー名、スクリプトのパス、ログファイルのパスはご自身の環境に合わせて変更してください。なお、
>>以降でログファイルへの出力先を指定しています。0 * * * * /home/ユーザー名/IPinfo/update_mmdb.sh >> /home/ユーザー名/IPinfo/update_mmdb.log 2>&1
※上記の設定では、1時間ごとに自動実行されます。実行頻度はご自身の環境に合わせて変更してください。
Windows環境での設定手順
手順1:作業フォルダの作成
エクスプローラーで任意の場所に作業フォルダを作成します。本手順では、C:\Users\ユーザー名\IPinfoを例として使用します。
手順2:スクリプトの作成
- PowerShellを開き、以下のコマンドを実行してスクリプトファイルを作成します。
notepad $HOME\IPinfo\Update-IPinfo-mmdb.ps1
※「ファイルが見つかりません。新しく作成しますか?」と表示されたら、「はい」をクリックしてください。
- エディタが開いたら、以下のスクリプトをコピーして入力してください。「設定」の項目については、下部の説明を参考にご自身の環境に合わせて設定してください。
クリックしてスクリプトを表示する
# ========== 設定 ========== $TOKEN = "xxxxxx" $FILE = "ipinfo_lite.mmdb" $BASE = "https://ipinfo.io/data" $SAVE_DIR = "$HOME\IPinfo" $LOG_FILE = "$HOME\IPinfo\Update-IPinfo-mmdb.log" # ========================== if (-not (Test-Path $SAVE_DIR)) { New-Item -ItemType Directory -Path $SAVE_DIR | Out-Null } $DL_URL = "${BASE}/${FILE}?token=${TOKEN}" $CS_URL = "${BASE}/${FILE}/checksums?token=${TOKEN}" $LAST_SHA_FILE = Join-Path $SAVE_DIR "${FILE}.sha256" $TMP_FILE = Join-Path $SAVE_DIR "${FILE}.tmp" $FINAL_FILE = Join-Path $SAVE_DIR $FILE # チェックサムエンドポイントでリモートのSHA256の値を取得 $csResponse = Invoke-RestMethod -Uri $CS_URL -UseBasicParsing $REMOTE_SHA = $csResponse.checksums.sha256 # ローカルに保存済みのSHA256の値を読み込む(初回は空) $LOCAL_SHA = "" if (Test-Path $LAST_SHA_FILE) { $LOCAL_SHA = (Get-Content $LAST_SHA_FILE -Raw).Trim() } # 一致していれば更新不要 → 終了 if ($REMOTE_SHA -eq $LOCAL_SHA -and (Test-Path $FINAL_FILE)) { "No update. $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Add-Content -Path $LOG_FILE exit 0 } # 更新あり → ダウンロード開始 "Update detected. Downloading..." | Add-Content -Path $LOG_FILE $startTime = Get-Date "Download start: $($startTime.ToString('yyyy-MM-dd HH:mm:ss'))" | Add-Content -Path $LOG_FILE Invoke-WebRequest -Uri $DL_URL -OutFile $TMP_FILE -UseBasicParsing $endTime = Get-Date $elapsed = [int]($endTime - $startTime).TotalSeconds "Download end: $($endTime.ToString('yyyy-MM-dd HH:mm:ss')) (elapsed ${elapsed}s)" | Add-Content -Path $LOG_FILE # ダウンロードしたファイルのSHA256の値を検証 $hashObj = Get-FileHash -Path $TMP_FILE -Algorithm SHA256 $DOWNLOADED_SHA = $hashObj.Hash.ToLower() if ($DOWNLOADED_SHA -ne $REMOTE_SHA) { "Checksum mismatch! Aborting." | Add-Content -Path $LOG_FILE Remove-Item $TMP_FILE -Force exit 1 } # 検証OKなら本番ファイルに置換し、SHA256の値をSAVE_DIRで指定したフォルダに保存 Move-Item -Path $TMP_FILE -Destination $FINAL_FILE -Force Set-Content -Path $LAST_SHA_FILE -Value $REMOTE_SHA -NoNewline "Update complete. $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')" | Add-Content -Path $LOG_FILE【参考】設定項目について
-
- TOKEN:事前準備で取得したAPIトークンを入力してください。
- FILE:ダウンロードするデータベースのファイル名を入力してください。ファイル名は、公式ドキュメントの「Database Download URI」列からご確認ください。
- SAVE_DIR:手順1で作成したフォルダのパスを入力してください。
- LOG_FILE:ログファイルの出力先パスを入力してください(※ログが不要な場合は、該当部分を削除してください)。
-
- 保存してメモ帳を閉じます。
手順3:動作確認
PowerShellを開き、以下のコマンドを実行してスクリプトが正常に動作するか確認します。
& "$HOME\IPinfo\Update-IPinfo-mmdb.ps1"
手順4:定期実行の設定
タスクスケジューラーを使用して自動更新を設定します。
お使いの環境に合わせてスクリプトを定期実行するタスクを作成してください。
【参考】操作タブの設定
※パスはご自身の環境に合わせて変更してください。
-
- プログラム/スクリプト:
powershell.exe - 引数の追加:
-ExecutionPolicy Bypass -File "C:\Users\ユーザー名\IPinfo\Update-IPinfo-mmdb.ps1"
- プログラム/スクリプト:

