自宅の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アドレスは、個人の情報として扱ってください。


