2026年5月24日
2026年5月24日
VPNでIPアドレスを「偽装」する仕組みと注意点(漏れの確認とサイト運営側の対策)
VPNを使うと接続先から見えるIPアドレスはVPNサーバーの出口IPに変わりますが、これはパケットの送信元を書き換える本来の意味の「IP偽装」とは別物で、隠せるものと隠せないものがはっきり分かれています。この記事では、VPNでIPが変わる仕組み、DNS・IPv6・WebRTC経由の「漏れ」の確かめ方、使うときの注意点、そしてWordPressサイトを運営する側が偽のIPにだまされないための設定までを順に説明します。
VPNでIPアドレスが変わる仕組み
VPNクライアントは、端末とVPNサーバーの間に暗号化されたトンネルを作り、通信をすべて(または指定した宛先だけ)そのトンネルに流します。VPNサーバーは受け取った通信を自分のグローバルIPから目的のサイトへ送り直し、返ってきた応答をトンネル経由で端末に戻します。
そのため、Webサイトのアクセスログに残るのは端末のIPではなくVPNサーバーの出口IPです。ここで大事なのは、通信は実際にVPNサーバーを経由していて、応答も正しく戻ってくるという点です。何かを偽っているわけではなく、「中継役が代わりに接続している」と考えるのが正確です。プロキシサーバーも同じ発想ですが、VPNは端末のOSレベルで経路を切り替えるため、ブラウザ以外のアプリの通信もまとめて中継できます。
本来の「IPスプーフィング」との違い
ネットワークの世界で「IP偽装(IPスプーフィング)」と呼ぶのは、パケットの送信元アドレス欄に自分のものではないアドレスを書き込む行為です。この場合、相手の応答は書き込まれた偽のアドレスに届くので、送った側には戻ってきません。TCPは3ウェイハンドシェイクで応答を受け取らないと接続が成立しないため、偽装した送信元でWordPressにログインするといったことは現実的にできません。
送信元の偽装が悪用されるのは、応答を受け取る必要がない攻撃、たとえばUDPの応答を第三者に集中させる反射型のDDoSです。これを防ぐために、プロバイダー側で「自分の網から出ていくパケットの送信元が正しいか」を確認するイングレスフィルタリング(BCP 38)が推奨されています。VPNの話とは仕組みも目的も違うので、言葉の混同に注意してください。
VPNで隠せるもの・隠せないもの
VPNで変わるのは、主に「接続先から見える送信元IP」と「途中の回線(公衆Wi-Fiやプロバイダー)から見える通信内容」です。一方で、次のものはVPNを使っても残ります。
- ログインしているアカウント情報や、ブラウザに保存されたCookie
- 画面サイズやフォント、拡張機能などから推定されるブラウザの特徴(フィンガープリント)
- VPN事業者自身から見える通信の記録(どこまで記録するかは事業者の方針次第)
- 設定の不備で、トンネルの外を通ってしまった通信
最後の項目が、いわゆる「漏れ」です。IPを見せたくない目的でVPNを使うなら、ここを確認しないと意味が薄れます。
漏れていないかを確認する手順
出口IPの確認(IPv4とIPv6)
まずVPN接続前と接続後で、外から見えるIPを比べます。IPv4とIPv6は別の経路を通ることがあるので、両方を見るのがポイントです。
# 外から見えるIPv4アドレス
curl -4 https://api64.ipify.org
# 外から見えるIPv6アドレス(IPv6が無い環境ではエラーになる)
curl -6 https://api64.ipify.org
IPv4はVPNの出口IPに変わったのに、IPv6が自宅回線のアドレスのまま、という結果はよくある漏れのパターンです。VPN側がIPv6を扱えない場合は、クライアントの設定でIPv6も遮断するか、端末側でIPv6を一時的に無効にして対処します。
DNSの漏れ
名前解決の問い合わせが、VPNのDNSではなくプロバイダーのDNSサーバーに直接飛んでいる状態をDNSリークと呼びます。Linux(systemd-resolved)なら、どのインターフェースでどのDNSサーバーを使っているかを次のように確認できます。
resolvectl status
VPNのインターフェースにDNSサーバーが割り当てられ、物理インターフェース側の問い合わせがVPN経由になっているかを見ます。ブラウザで使えるDNSリーク診断サービスもありますが、結果の読み方はサービスごとに違うので、複数の方法で見比べると判断しやすくなります。
WebRTCとスプリットトンネル
ブラウザのWebRTC(ビデオ通話などの仕組み)は、相手と直接つながるためにSTUNサーバーへ問い合わせて自分のグローバルIPを調べます。この通信がVPNを通らない設定になっていると、実際の回線のIPが相手側に伝わる可能性があります。最近のブラウザはローカルIPを隠す仕組みを備えていますが、グローバルIPの扱いはVPNの経路設定次第です。
特に「一部の宛先だけVPNに流す」スプリットトンネル構成では、何がトンネルの外を通るかを把握しておく必要があります。WireGuardの場合、クライアント設定の AllowedIPs がトンネルに流す宛先を決めます。
[Peer]
# すべての通信をVPNに流す(フルトンネル)
AllowedIPs = 0.0.0.0/0, ::/0
::/0 を書き忘れるとIPv6だけがトンネルの外を通ります。また、VPNが切れたときに通常回線へ自動で戻らないようにする「キルスイッチ」機能の有無も、市販のVPNクライアントを選ぶときの確認点です(機能名や設定場所は製品によって異なります)。
VPNを使うときの注意点
VPNの利用自体は日本では一般的に合法で、公衆Wi-Fiでの盗聴対策や社内ネットワークへの接続など正当な用途がたくさんあります。ただし、次の点は押さえておいてください。
- 利用規約との関係:動画配信などのサービスには、地域制限の回避を規約で禁じているものが多くあります。規約違反はアカウント停止の理由になりえます。
- 他人のシステムの制限回避:IPアドレスでアクセスを制限しているシステムを、VPNで別のIPを使ってすり抜けようとすることは、規約違反や法令上の問題につながるおそれがあります。検証は自分が管理するシステムだけで行います。
- VPN事業者の信頼性:VPN事業者は、あなたの通信の出入口をすべて見られる立場にあります。運営元、ログの扱い、所在国の法制度を確認してから選びます。無料サービスは収益源が不明瞭なことがあるので慎重に。
- 出口IPの共有:商用VPNの出口IPは多数の利用者で共有されているため、過去に悪用された履歴があると、サイト側でブロックされたりCAPTCHAが増えたりします。
WordPress運営者側の対策:偽のIPにだまされない
サイトを運営する立場で問題になる「IP偽装」は、VPNよりもむしろHTTPヘッダーの偽装です。X-Forwarded-For ヘッダーは、本来はリバースプロキシやCDNが「元のクライアントのIP」を伝えるためのものですが、クライアントが自由に書き込めます。プラグインやテーマがこのヘッダーを無条件に信用していると、攻撃者は好きなIPを名乗ってログイン試行回数の制限やIPブロックをすり抜けられます。
基本の考え方は、「REMOTE_ADDR(実際に接続してきた相手のIP)を正とし、ヘッダーは信頼できるプロキシ経由のときだけ使う」です。プロキシを置いていないサイトなら、X-Forwarded-For は一切使わないのが安全です。自社のロードバランサーを1段だけ挟んでいる場合は、たとえば wp-config.php で次のように扱えます(変更前に wp-config.php のバックアップを取り、ステージング環境で試してください)。
// wp-config.php の「編集が必要なのはここまで」の行より上に置く
// 自分で管理しているリバースプロキシのIPだけを列挙する(例の値は置き換える)
$trusted_proxies = array( '10.0.0.10', '10.0.0.11' );
if ( isset( $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_X_FORWARDED_FOR'] )
&& in_array( $_SERVER['REMOTE_ADDR'], $trusted_proxies, true ) ) {
// プロキシが1段の場合、そのプロキシが追記した末尾の値が接続元IP。
// 先頭側の値はクライアントが自由に書けるので使わない
$forwarded = array_map( 'trim', explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] ) );
$client_ip = end( $forwarded );
if ( false !== filter_var( $client_ip, FILTER_VALIDATE_IP ) ) {
$_SERVER['REMOTE_ADDR'] = $client_ip;
}
}
unset( $trusted_proxies, $forwarded, $client_ip );
CDNを使っている場合は、そのCDNが公開しているIPレンジと専用ヘッダーの仕様に従います。セキュリティプラグインの多くは「訪問者のIPをどこから取得するか」を選ぶ設定を持っています。Wordfenceにもこの種の設定がありますが、項目名や選択肢はバージョンで変わるので、管理画面とプラグインのドキュメントで確認してください(2026年10月現在)。設定を変えたら、自分のアクセスがログに正しいIPで記録されるかを確かめます。
VPN経由のアクセスをどう扱うか
VPNの出口IPを一律にブロックするのはおすすめしません。正当な理由でVPNを使う利用者を締め出すうえ、出口IPは入れ替わるのでリストの維持も大変です。IPでの制限は「管理画面へのアクセスを社内VPNの出口IPだけに絞る」のように、自分で管理している固定のIPに対して使うと効果的です。不正ログイン対策は、IPに頼りきらず、二段階認証やログイン試行の回数制限と組み合わせるのが現実的です。
まとめ
- VPNは通信を中継してもらう仕組みで、接続先に見えるIPが出口IPに変わるだけです。送信元を書き換える本来のIPスプーフィングとは別物です。
- アカウント情報やCookie、ブラウザの特徴はVPNでは隠れません。IPv6・DNS・WebRTCの漏れは、接続前後の比較で確かめます。
- VPNの利用規約違反や、他人のシステムの制限回避には使わないこと。事業者選びではログの扱いと運営元を確認します。
- WordPress側では
X-Forwarded-Forを無条件に信用しないこと。信頼できるプロキシ経由のときだけ採用し、IP制限は二段階認証などと組み合わせます。