| この記事の要点 |
|
外部 IP とは
外部 IP (グローバル IP) は、インターネットから見た自分の IP アドレス。NAT 配下のサーバでは、ip a で見えるローカル IP (例: 192.168.1.10) と、外部から見える IP (例: 203.0.113.42) が異なります。
| コマンド | 何が見える? |
|---|---|
ip a / ifconfig | NIC に振られたローカル IP |
hostname -I | 同じくローカル IP のスペース区切り |
curl ifconfig.me | ★ 外部 (グローバル) IP |
HTTP ベースの確認サービス
# 定番 (どれも text/plain で IP だけ返す)
curl ifconfig.me
curl ipinfo.io/ip
curl ifconfig.co
curl https://api.ipify.org
curl https://ipecho.net/plain
curl https://icanhazip.com
curl https://checkip.amazonaws.com # AWS 公式
# IPv4 / IPv6 を明示
curl -4 ifconfig.me # IPv4 のみ
curl -6 ifconfig.me # IPv6 のみ
# JSON 形式で詳細情報
curl ipinfo.io
# {
# "ip": "203.0.113.42",
# "city": "Tokyo",
# "country": "JP",
# "org": "AS17676 SOFTBANK CORP."
# }
curl https://ipapi.co/json/
DNS ベースの確認 (推奨)
HTTP より高速・軽量で、Web サービスがブロックされる環境でも動きやすい:
# OpenDNS の resolver に "myip" を問い合わせる
dig +short myip.opendns.com @resolver1.opendns.com
# 203.0.113.42
# Google Public DNS の場合
dig +short TXT o-o.myaddr.l.google.com @ns1.google.com
# "203.0.113.42"
# Cloudflare DNS (1.1.1.1)
dig +short txt ch whoami.cloudflare @1.0.0.1
# IPv6 を確認
dig -6 +short AAAA myip.opendns.com @resolver1.ipv6-sandbox.opendns.com
# host コマンドでも可
host myip.opendns.com resolver1.opendns.com
wget での確認
curl が入っていない最小構成では wget で代替:
wget -qO- ifconfig.me
wget -qO- icanhazip.com
wget -qO- https://api.ipify.org
# -q : quiet
# -O- : 標準出力に書く
スクリプトに組み込む
本番運用では 1 つのサービスが落ちても OK な多段フォールバック:
#!/bin/bash
# get-external-ip.sh
get_ip() {
local services=(
"https://api.ipify.org"
"https://ifconfig.me"
"https://ipinfo.io/ip"
"https://icanhazip.com"
"https://checkip.amazonaws.com"
)
for url in "${services[@]}"; do
ip=$(curl -s --max-time 3 "$url")
# IPv4 形式バリデーション
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
echo "$ip"
return 0
fi
done
# DNS フォールバック
dig +short myip.opendns.com @resolver1.opendns.com
}
EXTERNAL_IP=$(get_ip)
echo "External IP: $EXTERNAL_IP"
各方法の比較
| 方法 | 速度 | 信頼性 | 備考 |
|---|---|---|---|
dig +short myip.opendns.com @resolver1.opendns.com | ★★★ | ★★★ | ★ 推奨 |
curl ifconfig.me | ★★ | ★★ | シンプル |
curl ipinfo.io/ip | ★★ | ★★★ | レート制限あり (無料 1k/日) |
curl checkip.amazonaws.com | ★★ | ★★★ | AWS 公式、安定 |
curl api.ipify.org | ★★ | ★★★ | 軽量、SSL 対応 |
NAT 越え検証
# ローカル IP (NIC に振られている)
ip -4 addr show eth0 | awk '/inet / {print $2}'
# 192.168.1.10/24
# 外部から見える IP
curl -s ifconfig.me
# 203.0.113.42
# 一致するなら NAT なし (直接インターネット接続 / クラウド EIP)
# 一致しないなら NAT 配下 (家庭 LAN, AWS NAT GW etc.)
IPv6 の確認
# IPv6 グローバルアドレス
ip -6 addr show scope global
# inet6 2001:db8::abcd:1234/64 scope global
# 外部 IPv6
curl -6 https://ifconfig.me
curl -6 https://api64.ipify.org
# IPv4 / IPv6 両方を一括取得
echo "IPv4: $(curl -4 -s ifconfig.me)"
echo "IPv6: $(curl -6 -s ifconfig.me 2>/dev/null || echo 'なし')"
cron で定期的に監視
# /etc/cron.d/external-ip-watch
# 10 分ごとに外部 IP を記録、変化したら通知
*/10 * * * * root /usr/local/bin/check-ip.sh
# check-ip.sh
#!/bin/bash
CURRENT=$(curl -s --max-time 5 ifconfig.me)
LAST=$(cat /var/lib/external-ip 2>/dev/null)
if [ "$CURRENT" != "$LAST" ] && [ -n "$CURRENT" ]; then
echo "$CURRENT" > /var/lib/external-ip
logger -t ip-watch "External IP changed: $LAST -> $CURRENT"
# Slack 通知など
fi
FAQ
Q: ip a で見えるのが外部 IP か確かめたい
A: curl ifconfig.me の結果と比較。一致すればクラウドや専用線で直接インターネット接続、不一致なら NAT 配下です。
Q: 社内プロキシ経由でも動く?
A: http_proxy / https_proxy 環境変数を設定すれば curl が利用します。返るのはプロキシの外向き IP。
Q: 全部のサービスが落ちている
A: DNS ベースの dig +short myip.opendns.com @resolver1.opendns.com を試してください。HTTP より生存率が高いです。
子ページ
子ページはありません
同階層のページ
- クラス
- グローバルIPアドレス
- プライベートIPアドレス
- 内部IPアドレスの確認方法(Linux)
- 外部IPアドレスの確認方法(Linux)
- IP制限をかける方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15