2026年5月24日
2026年5月24日
プライベートIPとグローバルIPの違いと使い分け(範囲の見分け方とサーバーでの設計)
プライベートIPは組織や家庭の中だけで使うアドレス、グローバルIPはインターネット上で一意に割り当てられたアドレスです。この記事では、両者を範囲で見分ける方法、自分の環境でそれぞれを確認する手順、そしてサーバーや WordPress の運用で「どの通信にどちらを使うか」を決める考え方を説明します。
違いをひとことで言うと
グローバルIPは、IANA から地域インターネットレジストリ(アジア太平洋なら APNIC)、国別のレジストリ(日本では JPNIC)、プロバイダーへと順に割り当てられ、インターネット全体で重複しないように管理されています。インターネット上のサーバーと直接やり取りできるのはこのアドレスです。
プライベートIPは、組織内で自由に使ってよいと決められた範囲(RFC 1918)のアドレスです。どの家庭でも 192.168.1.10 を使えるのは、インターネット上には流れない前提だからです。プライベートIPの機器がインターネットへ出るときは、ルーターが NAT(正確には複数の端末で1つのアドレスを共有する NAPT)で送信元をグローバルIPに書き換えます。
範囲で見分ける
アドレスを見てどちらかを判断するには、次の範囲を覚えておくと便利です。
| 範囲 | 用途 |
|---|---|
| 10.0.0.0/8 | プライベート(RFC 1918) |
| 172.16.0.0/12(172.16.0.0〜172.31.255.255) | プライベート(RFC 1918) |
| 192.168.0.0/16 | プライベート(RFC 1918) |
| 100.64.0.0/10 | 通信事業者の共有アドレス(CGNAT 用、RFC 6598) |
| 169.254.0.0/16 | リンクローカル(DHCP で取得できなかったときなど) |
| 127.0.0.0/8 | ループバック(自分自身) |
つまずきやすいのは 172.16.0.0/12 で、172.32.0.0 以降はプライベートではありません。また 100.64.0.0/10 は RFC 1918 には含まれませんが、インターネット上では使われない点でプライベートと同じ扱いになります。
IPv6 にもプライベートIPに相当する ULA(fc00::/7、実際には fd00::/8 を使う)がありますが、IPv6 では端末がグローバルアドレスを直接持つのが一般的です。その場合は NAT による「外から見えにくい」効果が無いので、ファイアウォールの設定が守りの中心になります。
Python の標準ライブラリでも判定できます。
import ipaddress
for a in ["192.168.1.10", "172.32.0.1", "100.64.1.1", "203.0.113.10"]:
ip = ipaddress.ip_address(a)
print(a, "private" if ip.is_private else "global" if ip.is_global else "other")
# 出力例
# 192.168.1.10 private
# 172.32.0.1 global
# 100.64.1.1 other
# 203.0.113.10 private
100.64.1.1 はプライベートでもグローバルでもない「other」になります。また 203.0.113.10 は説明用に予約されたドキュメント用アドレス(RFC 5737)なので、Python では private と判定されます。このように is_private は「RFC 1918 かどうか」ではなく「インターネットで使われない範囲かどうか」に近い判定で、対象範囲は Python のバージョンで細かく見直されています。境界を厳密に扱う用途では、上の表と公式ドキュメントで確認してください(2026年10月現在)。
自分の環境で確認する
端末やサーバーに付いているアドレスと、インターネットから見えているアドレスは別物です。両方を確認して比べます。
# 端末・サーバーに付いているアドレス
ip -br addr # Linux
ipconfig # Windows
# インターネットから見えている送信元アドレス(外部サービスを利用)
curl -4 https://ifconfig.me
外部の確認サービスは提供元の都合で変わることがあるので、使えない場合は別のサービスか、ルーターの管理画面の WAN 側アドレスを見ます。
ここで1つ大事な確認があります。**ルーターの WAN 側アドレスが 100.64.x.x やプライベート範囲になっている場合**、そのルーターの外側でもう一度 NAT されています(CGNAT など)。この状態ではルーターでポート開放をしても外から届かないため、自宅でサーバーを公開したいときは、プロバイダーの固定IPサービスや別の公開手段を検討することになります。
クラウドの仮想サーバーも同様で、AWS の EC2 などではインスタンスの OS にはプライベートIPしか見えず、パブリックIPはクラウド側で1対1に変換されています。OS 上の ip addr にグローバルIPが出なくても異常ではありません。
サーバー運用での使い分け
基本は「インターネットに公開する入口だけグローバル、それ以外の通信はプライベート」です。
- Web サーバーの公開: 利用者が接続する入口(Web サーバーやロードバランサー)にはグローバルIPが必要です。サイトの IP を変えたくない場合は、固定のグローバルIP(クラウドでは Elastic IP のような固定アドレスの仕組み)を使います。
- データベースや内部 API: Web サーバーと DB サーバーを分けるなら、両者の通信は VPS やクラウドのプライベートネットワーク経由にします。MySQL などはプライベートIPか
127.0.0.1でだけ待ち受けさせ、グローバル側に 3306 番を開けないのが基本です。WordPress のwp-config.phpのDB_HOSTには、そのプライベートIPを書きます。 - 管理画面へのアクセス制限:
wp-adminや SSH を自分のIPだけに許可する場合、登録するのは「インターネットから見えている自分のグローバルIP」です。社内のプライベートIPを書いても効きません。家庭用回線の多くはアドレスが変わるため、変わったときに締め出されないよう、FTP やホスティングの管理画面から設定ファイルを戻せる手段を確保してから設定してください。
使い分けで起こりやすい問題
- IP制限で他人まで巻き込む: NAT や CGNAT の内側では、多数の利用者が同じグローバルIPを共有しています。荒らし対策で1つのIPを遮断すると、同じ回線の無関係な利用者も入れなくなることがあります。IP単位の遮断は、レート制限など他の対策と組み合わせて慎重に使います。
- アクセス元IPがすべて同じになる: CDN やリバースプロキシの後ろにある WordPress では、記録されるIPが中継機器のものになります。Web サーバー側で信頼できる中継元からのヘッダーだけを採用する設定が必要です。
- 社内とVPN先でアドレス範囲が重なる: 自宅も接続先も
192.168.1.0/24だと、VPN接続時に経路がぶつかって通信できなくなります。新しくネットワークを作るときは、10.xの中から他と重なりにくい範囲を選ぶと後で困りにくくなります。
まとめ
- グローバルIPはインターネット上で一意、プライベートIPは組織内で自由に使えるアドレスで、NAT がその間をつなぐ
10/8・172.16/12・192.168/16がプライベート、100.64/10は事業者の共有アドレス- ルーターの WAN 側が
100.64.x.xやプライベート範囲なら二重 NAT で、ポート開放が効かない - 公開する入口だけグローバル、DB などの内部通信はプライベートにする
- IP制限に登録するのは外から見えるグローバルIP。変わったときの復旧手段を先に用意する