この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: 外部IPアドレスの確認方法(Linux)
SEOタイトル: Linux で外部 IP アドレス確認方法完全ガイド

この記事の要点
  • 外部 (グローバル) IP 確認の定番: curl ifconfig.me / curl ipinfo.io/ip
  • DNS 経由は最速・最堅牢: dig +short myip.opendns.com @resolver1.opendns.com
  • ip a / hostname -Iローカル IP。NAT 配下では外部 IP は別物
  • IPv6 を確認: curl -6 ifconfig.me。デュアルスタック環境では -4 / -6 で明示
  • 本番運用ではフェイルオーバー: 1 つのサービスが落ちても別の API を試す多段リトライ

外部 IP とは

外部 IP (グローバル IP) は、インターネットから見た自分の IP アドレス。NAT 配下のサーバでは、ip a で見えるローカル IP (例: 192.168.1.10) と、外部から見える IP (例: 203.0.113.42) が異なります。

コマンド何が見える?
ip a / ifconfigNIC に振られたローカル 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 より生存率が高いです。