自宅のIPが変わる頻度を記録する|PowerShellで変わった時だけCSVに残す

VPSのリモートデスクトップを自宅のIPアドレスだけに許可したい時、気になるのが「自宅のIPアドレスは、どれくらいの頻度で変わるのか」です。家庭の回線のIPアドレスは、多くの場合プロバイダーから割り当てられるもので、変わることがあります(VPSのRDPを固定IPだけに許可する方法)。変わる頻度は回線や契約で違うため、自分の回線で記録を取って確かめるのが確かです。この記事では、グローバルIPアドレスを調べて、変わった時だけCSVに記録するPowerShellのスクリプトと、筆者のPCで実行した結果を紹介します。

(確認:筆者のWindows 11のPC(Windows PowerShell 5.1)で、2026年10月21日に実行。IPアドレスは、画面とこの記事ではすべて伏せています。IPアドレスを調べる先は ipify(公式サイトでは、オープンソースで、制限なく使える、と説明されている公開のAPI)です)

コード(PowerShell)

# 自宅のグローバルIPアドレス(IPv4)を調べ、前回と変わっていたら CSV に1行追記する(実行するたびに1回だけ調べる)
#   調べる先:ipify(https://api.ipify.org は、アクセス元のIPv4アドレスを文字で返す公開のAPI)
param([string]$LogPath = (Join-Path $PSScriptRoot 'global_ip_log.csv'))
function Hide-Ip($ip) { if ($ip -match '^\d+\.\d+\.\d+\.\d+$') { 'x.x.x.x' } else { $ip } }   # 画面に出す時はすべて伏せる(CSVには伏せずに記録する)
$now = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
try {
    $ip = (Invoke-RestMethod -Uri 'https://api.ipify.org' -TimeoutSec 15).ToString().Trim()
} catch {
    "$now 取得に失敗: $($_.Exception.Message)"; exit 1
}
$last = if (Test-Path $LogPath) { (Import-Csv $LogPath | Select-Object -Last 1).ip } else { $null }
if ($ip -ne $last) {
    [pscustomobject]@{ time = $now; ip = $ip } | Export-Csv $LogPath -Append -NoTypeInformation -Encoding UTF8
    "$now 変化あり: $(Hide-Ip $last) → $(Hide-Ip $ip)(記録しました)"
} else {
    "$now 変化なし: $(Hide-Ip $ip)"
}
  • 1回の実行で、IPアドレスを1回だけ調べる
  • 前回の記録と同じなら「変化なし」と表示するだけ。変わっていれば、時刻とIPアドレスをCSVに1行足す
  • CSVには、伏せていないIPアドレスが残る。自分のPCの中だけで使い、人に渡す時は消す

日本語のコメントを含むので、Windows PowerShell 5.1では、文字コードをUTF-8(BOM付き)で保存します。実行ポリシーで止まる場合は、powershell -NoProfile -ExecutionPolicy Bypass -File .\Watch-GlobalIp.ps1 で、その場だけ実行できます。

筆者のPCの結果(2回続けて実行)

2026-10-21 20:36:33 変化あり:  → x.x.x.x(記録しました)
2026-10-21 20:36:34 変化なし: x.x.x.x

1回目は、まだ記録が無いので「変化あり」として記録し、2回目は同じIPアドレスなので「変化なし」でした。変わる頻度を知るには、これを何日・何週間と続けて、記録の行数(=変わった回数)を見ます。

続けて記録するには

  • PCを使う時に毎回実行する:サインインの時に実行するよう、スタートアップに登録する
  • 決まった時間ごとに実行する:Windowsのタスク スケジューラなどで、1時間ごとに実行する
  • ルーターを再起動した後に実行する:再起動でIPアドレスが変わるかを確かめる

記録が増えたら、PowerShellで Import-Csv .\global_ip_log.csv | Measure-Object を実行すると、記録の行数(最初の記録を含む)が分かります。

結果の使い方

記録の結果 考え方(筆者の考え)
何週間も変わらない 自宅のIPアドレスを許可する方法でも運用できる。ただし、変わった時に締め出されるので、VPS会社のコンソールなど、別の入り方を控えておく(リモートデスクトップで締め出された時の戻し方)
ルーターの再起動のたびに変わる 停電や機器の入れ替えで変わる前提で、固定IPを考える
数日おきに変わる 固定IPのVPNを経由する方法が向く(MillenVPNで固定IPを使う費用)

VPS側で接続元を絞る手順はWindowsファイアウォールでリモートデスクトップの接続元を絞る方法にまとめています。

この記事で確かめていないこと

  • 筆者の回線で、IPアドレスがどれくらいの頻度で変わるか(記録を始めたばかり)
  • IPv6のアドレスの変化(このスクリプトはIPv4だけを調べる)
  • ipifyが使えない時に、別の調べ先へ切り替える処理

まとめ

  • 自宅のグローバルIPアドレスが変わる頻度は、回線や契約で違う。自分の回線で記録して確かめる
  • PowerShellのスクリプトで、IPアドレスを調べ、変わった時だけCSVに記録できる。筆者のPCでは、1回目に記録し、2回目は「変化なし」だった
  • 変わる頻度に合わせて、自宅のIPを許可する方法か、固定IPのVPNかを選ぶ

本記事は、筆者のPCで確かめたスクリプトの紹介です。記録したIPアドレスは、個人の情報として扱ってください。