【完全版】UbuntuでIPアドレスを確認する全方法|ip a・nmcli・グローバルIPまで徹底解説

  • 作成日 2026.06.12
  • 更新日 2026.06.17
  • ubuntu
【完全版】UbuntuでIPアドレスを確認する全方法|ip a・nmcli・グローバルIPまで徹底解説

「UbuntuでIPアドレスを確認したい」――サーバー構築、SSH接続、ネットワークトラブルシューティング、開発環境セットアップなど、あらゆる場面で必要になる作業です。

しかし、「どのタイプのIPアドレスを確認したいか」によって最適な方法は大きく変わります

  • マシン本体に割り当てられたローカルIPアドレスを知りたい
  • 外部から自分の回線がどう見えているか(グローバルIP)を確認したい
  • 複数のネットワークインターフェースのIPをすべて見たい
  • IPv6アドレスを確認したい
  • Ubuntu Serverで CLI のみで確認したい
  • WSL2、Docker、クラウド(EC2等)の特殊環境で確認したい

本記事では、UbuntuでIPアドレスを確認するすべての方法を、実務でそのまま使えるコマンド集として整理します。基本のCLIコマンドからGUI操作、グローバルIP取得、Server/Desktop/WSL2/Docker/クラウド環境ごとの確認手順、トラブルシューティング、FAQまで完全網羅。この1本でIPアドレス確認のすべてが解決します。


目次

結論:とにかく今すぐ知りたい人向けの3パターン

時間がない方向けに、最頻出の3パターンを先に示します。

①ローカルIPを最速で確認

ip addr show
# または短縮形
ip 

②IPアドレスだけシンプルに確認

hostname -I

③グローバルIP(外部から見える自分のIP)

curl ifconfig.me

詳細・使い分け・GUI操作・トラブル対応は以下で順に解説します。


まず押さえる:ローカルIPとグローバルIPの違い

UbuntuでIPアドレスを確認するときは、最初に「どのIPアドレスが必要か」を明確にしましょう。

種類意味確認方法用途
ローカルIP(プライベートIP)LAN内でマシンを識別するIPip a / hostname -ISSH接続、ファイル共有、開発サーバーアクセス
グローバルIP(パブリックIP)インターネットから見える自分の回線のIPcurl ifconfig.me自宅サーバー公開、ポート開放、リモートアクセス

家庭や企業の多くはNAT(Network Address Translation)でルーターが複数端末をまとめているため、UbuntuのローカルIP(例: 192.168.1.100)と外部から見えるグローバルIP(例: 203.0.113.45)は通常一致しません。

プライベートIPの範囲(覚えておくと便利)

クラス範囲よく使われる場所
クラスA10.0.0.010.255.255.255大規模企業ネットワーク
クラスB172.16.0.0172.31.255.255中規模・Docker内部
クラスC192.168.0.0192.168.255.255家庭用ルーター・小規模ネット

192.168.x.x10.x.x.xが表示されたら、それはローカルIPです。


IPv4とIPv6の違い

種類ビット数
IPv4192.168.1.10032ビット
IPv62001:0db8:85a3::8a2e:0370:7334128ビット

最近のUbuntuはデフォルトで両方が有効になっており、ip aで両方表示されます。IPv6を抑制したい場合は後述のオプションを使います。


【方法①】ip addr show(推奨・最も標準)

現代のUbuntuにおける最も標準的なコマンドです。iproute2パッケージに含まれており、ifconfigの後継として位置づけられています。詳細はip(8) manページを参照してください。

基本構文

ip addr show
# または短縮形
ip a
ip addr

実行結果の見方

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ab:cd:ef brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic enp0s3
       valid_lft 86372sec preferred_lft 86372sec
    inet6 fe80::a00:27ff:feab:cdef/64 scope link
       valid_lft forever preferred_lft forever

主要部分の読み方:

表示意味
1: lo:インターフェース番号と名前(loはループバック)
2: enp0s3:物理ネットワークインターフェース
state UPリンクが有効
link/ether 08:00:...MACアドレス
inet 192.168.1.100/24IPv4アドレス(CIDR表記)
inet6 fe80::...IPv6アドレス
dynamicDHCP取得

よく使うバリエーション

# IPv4アドレスのみ表示
ip -4 addr show

# IPv6アドレスのみ表示
ip -6 addr show

# 1行表示(簡潔)
ip -br addr show

# 特定インターフェースのみ
ip addr show enp0s3

# IPv4のみ + 簡潔表示
ip -4 -br a

ip -br aの出力例:

lo               UNKNOWN        127.0.0.1/8 ::1/128
enp0s3           UP             192.168.1.100/24 fe80::a00:27ff:feab:cdef/64

スクリプト処理や複数サーバーの一括確認に便利です。


【方法②】hostname -I(最短コマンド)

シンプルにIPアドレスだけを取得したい場合の最短コマンドです。

hostname -I

実行結果:

192.168.1.100

複数のインターフェースがある場合はスペース区切りで全IPが出力されます:

192.168.1.100 10.0.0.5 172.17.0.1

-i オプション(非推奨だが古い環境で見かける)

hostname -i

hostname -i/etc/hostsを参照するため、127.0.1.1のようなループバックを返すことがあり信頼性が低いです。常に-I(大文字)を使ってください。

スクリプトでの活用

# 最初のIPだけ取得
IP=$(hostname -I | awk '{print $1}')
echo "My IP: $IP"

【方法③】nmcli(NetworkManager CLI)

Ubuntu Desktop環境で標準のネットワーク管理ツール「NetworkManager」のCLIです。詳細はNetworkManager公式ドキュメントを参照してください。

デバイスとIPの一覧

nmcli device show

特定デバイスの詳細

nmcli device show enp0s3

接続中の接続情報のみ

nmcli connection show --active

IPアドレスだけ抽出

nmcli -g IP4.ADDRESS device show enp0s3

Wi-Fi接続状態の確認

nmcli device wifi list

NetworkManagerはUbuntu Desktop ではデフォルトですが、Server では使われないことが多い点に注意してください。


【方法④】ifconfig(非推奨だが今も使われる)

長年使われてきたコマンドですが、Ubuntu 18.04以降はデフォルトで非インストールです。

インストール

sudo apt install net-tools

使い方

ifconfig
ifconfig enp0s3

⚠️ 新規スクリプトには使わないことが推奨されます。iproute2系のipコマンドが後継となっており、出力フォーマットも安定しています。


【方法⑤】netplan get(Ubuntu 17.10以降)

Ubuntuの新しいネットワーク設定システムnetplanから、現在の設定値を取得できます。

現在の設定確認

sudo netplan get

特定インターフェース

sudo netplan get ethernets.enp0s3

YAML設定ファイルから確認

cat /etc/netplan/*.yaml

設定ファイルは/etc/netplan/配下にあります(例: 00-installer-config.yaml50-cloud-init.yaml)。詳細はNetplan公式ドキュメントを参照してください。


【方法⑥】resolvectl(DNS関連の情報も含めて確認)

systemd-resolvedのCLIで、IP+DNS設定+検索ドメインなどを一括確認できます。

resolvectl status

特定インターフェースのみ:

resolvectl status enp0s3

DNSサーバー設定の確認にも有用です。


【方法⑦】ルーティング情報からIP・ゲートウェイを確認

ip route
# または
ip r

実行結果:

default via 192.168.1.1 dev enp0s3 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.100 metric 100

default viaの右側がデフォルトゲートウェイ(ルーター)のIPです。

デフォルトゲートウェイだけ抽出

ip route | grep default | awk '{print $3}'

自分のIPとゲートウェイをセットで表示

echo "My IP: $(hostname -I | awk '{print $1}')"
echo "Gateway: $(ip route | grep default | awk '{print $3}')"

【方法⑧】GUIでIPアドレスを確認(Ubuntu Desktop)

CLIが苦手な方向けの方法です。

GNOME 設定アプリから確認

  1. 画面右上のシステムメニューをクリック
  2. **「設定」または「Settings」**を選択
  3. 左メニューから**「ネットワーク」または「Wi-Fi」**
  4. 接続中の項目の右側にある歯車アイコンをクリック
  5. 詳細」タブまたは「IPv4」タブで以下を確認:
    • IPv4アドレス
    • サブネットマスク
    • デフォルトルート(ゲートウェイ)
    • DNS

トップバーから素早く確認(Ubuntu 22.04以降)

右上のネットワークアイコンをクリック→接続名横の矢印→「接続情報」または「詳細

gnome-control-center を直接起動

gnome-control-center network

グローバルIP(外部から見える自分のIP)を確認する

NAT環境では、Ubuntu自体のIPと外部から見えるIPが異なるため、専用のサービスを使います。

主要なグローバルIP確認コマンド

# ifconfig.me(最も有名)
curl ifconfig.me

# ifconfig.io
curl ifconfig.io

# checkip.amazonaws.com(AWS提供)
curl checkip.amazonaws.com

# ipinfo.io(地理情報付き)
curl ipinfo.io

# icanhazip.com
curl icanhazip.com

# 詳細情報JSON形式
curl ipinfo.io/json

digコマンドでDNS経由(curlより高速)

dig +short myip.opendns.com @resolver1.opendns.com

OpenDNSのリゾルバが「あなたのIPは何か」を返す特別な仕組みです。

IPv6を含むグローバルIP取得

curl -6 ifconfig.me  # IPv6のみ
curl -4 ifconfig.me  # IPv4のみ

wget の場合

wget -qO- ifconfig.me

curlがインストールされていない環境で利用できます。


MACアドレスもあわせて確認する

# 全インターフェースのMACアドレス
ip link show

# 特定インターフェースだけ
ip link show enp0s3

# MACアドレスのみ抽出
cat /sys/class/net/enp0s3/address

サブネットマスク・ブロードキャストアドレスを確認

ip a/24のような表記がサブネット情報です。明示的に確認するには:

ip -4 addr show enp0s3 | grep "inet "

CIDR表記/24255.255.255.0 を意味します。換算表:

CIDRサブネットマスクホスト数
/24255.255.255.0254
/23255.255.254.0510
/22255.255.252.01022
/16255.255.0.065534
/8255.0.0.016777214

DNSサーバーのIPを確認

# systemd-resolved経由
resolvectl status | grep "DNS Servers"

# /etc/resolv.conf を直接確認(参考程度)
cat /etc/resolv.conf

# nmcli経由
nmcli dev show | grep DNS

⚠️ Ubuntu 18.04以降の/etc/resolv.confsystemd-resolvedのスタブを指すため、127.0.0.53が表示されることが多いです。実際のDNSresolvectl statusで確認してください。


接続中の他デバイス(ARPテーブル)

LAN内の他デバイスのIP・MACアドレス一覧:

ip neigh
# または
arp -a

LAN内の機器棚卸しに有用です。


Ubuntu Server特有の確認方法

ヘッドレス環境でのIP確認

GUIなしで運用する場合、初回ログイン直後のメッセージにIPが表示されています:

System information as of ...
  System load:  0.04
  IPv4 address for enp0s3: 192.168.1.100

表示されなかった場合:

ip a | grep inet

SSH接続元IPの確認

サーバーに自分以外のユーザーがSSH接続中の場合、それらの接続元IPも確認できます:

# 現在のSSHセッション一覧
who
# または
w

実行結果例:

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    192.168.1.50     09:42    0.00s  0.05s  0.01s w

WSL2でのIP確認

Windows Subsystem for Linux 2 は、Windowsホストと異なる仮想ネットワークを持ちます。

WSL2内部のIP

ip a
hostname -I

WSL2は再起動するたびに新しいIPが割り当てられる点に注意してください。

Windowsホスト側のIP(WSL内から見る)

ip route show | grep -i default | awk '{ print $3}'

Windows側のIP(cmd / PowerShellから)

ipconfig

WSL2の固定IP設定

WSL2のIPは再起動で変わるため、固定したい場合は.wslconfigの設定が必要です。Microsoft公式ガイドはMicrosoft Learn – WSL Networkを参照してください。


Dockerコンテナ内でのIP確認

コンテナ内に入って確認する場合:

docker exec -it <container_name> ip a
# または
docker exec -it <container_name> hostname -i

ホストから見たコンテナのIP

docker inspect <container_name> | grep IPAddress

または1行で:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>

docker network 経由での確認

docker network ls
docker network inspect bridge

クラウド環境でのIP確認(AWS / GCP / Azure)

クラウドVMでは、内部IPと外部IPが完全に分離されているため、メタデータサービス経由で確認します。

AWS EC2

# 内部IP(プライベート)
curl http://169.254.169.254/latest/meta-data/local-ipv4

# 外部IP(パブリック)
curl http://169.254.169.254/latest/meta-data/public-ipv4

IMDSv2を使う場合(推奨):

TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
  http://169.254.169.254/latest/meta-data/local-ipv4

詳細はAWS公式 – EC2インスタンスメタデータを参照。

Google Cloud(GCP)

# 内部IP
curl -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip

# 外部IP
curl -H "Metadata-Flavor: Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip

Microsoft Azure

# 内部IP
curl -H "Metadata:true" \
  "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/privateIpAddress?api-version=2021-02-01&format=text"

# 外部IP
curl -H "Metadata:true" \
  "http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2021-02-01&format=text"

プログラミング言語からIPを取得する

Python

import socket

# ホスト名から取得
hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
print(f"Hostname: {hostname}, IP: {ip}")

# UDPソケットでデフォルトルートのIPを取得(より確実)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
print(f"Local IP: {local_ip}")
s.close()

Bash(シェルスクリプトでの定型処理)

#!/bin/bash
# よく使うIP取得スニペット集

# プライマリIP
PRIMARY_IP=$(hostname -I | awk '{print $1}')

# デフォルトルートのIP(より確実)
PRIMARY_IP=$(ip route get 8.8.8.8 | awk 'NR==1 {print $7}')

# グローバルIP
GLOBAL_IP=$(curl -s ifconfig.me)

# 全インターフェースのIP
ALL_IPS=$(ip -4 -br a | awk '$2=="UP" {print $3}')

echo "Primary: $PRIMARY_IP"
echo "Global: $GLOBAL_IP"
echo "All: $ALL_IPS"

Node.js

const os = require('os');

const interfaces = os.networkInterfaces();
for (const name of Object.keys(interfaces)) {
    for (const iface of interfaces[name]) {
        if (iface.family === 'IPv4' && !iface.internal) {
            console.log(`${name}: ${iface.address}`);
        }
    }
}

用途別:使い分けクイックリファレンス

やりたいこと推奨コマンド
詳細にすべて確認ip a
IPだけシンプルにhostname -I
簡潔な1行表示ip -br a
IPv4のみip -4 a
特定インターフェースip a show enp0s3
グローバルIPcurl ifconfig.me
GUI(Desktop)設定→ネットワーク→歯車
デフォルトゲートウェイip route | grep default
DNS設定resolvectl status
MAC アドレスip link show
LAN内他デバイスip neigh
WSL2内ip a
Dockerコンテナdocker inspect
AWS EC2外部IPメタデータAPIから取得
シェルスクリプトip route get 8.8.8.8

トラブルシューティング

「ip コマンドが見つかりません」と出る

ほぼあり得ませんが、iproute2パッケージが破損している可能性:

sudo apt install --reinstall iproute2

IPアドレスが169.254.x.xと表示される

DHCPからIP取得に失敗し、Windows系の**APIPA(自動プライベートIP)**が振られた状態です。対処:

# DHCP再取得
sudo dhclient -r
sudo dhclient

# またはインターフェース再起動
sudo ip link set enp0s3 down
sudo ip link set enp0s3 up

# NetworkManager 経由
sudo systemctl restart NetworkManager

hostname -I で何も表示されない

ネットワークインターフェースが起動していないか、IPが割り当てられていません:

# インターフェース状態を確認
ip link show

# state DOWN なら起動
sudo ip link set enp0s3 up

IPv6だけ表示されてIPv4が出ない

DHCPv4が失敗している可能性:

# netplan設定を確認
cat /etc/netplan/*.yaml

# DHCPv4が有効になっているか確認
# dhcp4: true があるか確認

# 反映
sudo netplan apply

接続できない時の段階的切り分け

# 1. IPが取れているか
ip a

# 2. デフォルトルートがあるか
ip route

# 3. ゲートウェイに到達するか
ping -c 3 $(ip route | grep default | awk '{print $3}')

# 4. DNSが引けるか
nslookup google.com

# 5. インターネット到達確認
ping -c 3 8.8.8.8

IPアドレスの監視・自動化スクリプト

IP変更を通知するスクリプト

#!/bin/bash
# IPが変更されたらSlackに通知する例

LAST_IP_FILE="/var/tmp/last_ip"
CURRENT_IP=$(curl -s ifconfig.me)
LAST_IP=$(cat $LAST_IP_FILE 2>/dev/null || echo "")

if [ "$CURRENT_IP" != "$LAST_IP" ]; then
    echo "$CURRENT_IP" > $LAST_IP_FILE
    # Slack Webhook URLは要設定
    curl -X POST -H 'Content-type: application/json' \
        --data "{\"text\":\"Global IP changed: $LAST_IP -> $CURRENT_IP\"}" \
        $SLACK_WEBHOOK_URL
fi

cron に登録すれば、グローバルIP変更を自動監視できます。

定期的にIPをログ記録

# crontab -e で追加
*/5 * * * * echo "$(date) $(hostname -I)" >> /var/log/ip_history.log

よくある質問(FAQ)

Q1. ip aifconfig のどちらを使うべきですか?

ip aを使ってください。 ifconfigは古いコマンドで、最新のUbuntuではデフォルト未インストールです。新しい機能(IPv6、namespace、policy routing等)に対応していないため、新規スクリプトではipコマンド系を使うのが推奨です。

Q2. hostname -I の結果が複数表示されます

複数のネットワークインターフェース(有線+Wi-Fi、Docker仮想ブリッジ等)があるためです。最初のIPだけ取得するには:

hostname -I | awk '{print $1}'

ただし「最初のIP」が必ずしもメインIPとは限りません。明確にメインIPを取得したい場合:

ip route get 8.8.8.8 | awk 'NR==1 {print $7}'

Q3. 「グローバルIP」と「自分のIP」は同じですか?

多くの場合、異なります。 家庭・企業ネットワークではNAT越しでルーターが代表アドレスを使うため、Ubuntu本体のIPは192.168.x.x等のプライベートIPで、外部から見えるのはルーターのグローバルIPです。

Q4. WSL2のIPが毎回変わって困ります

WSL2の仕様で、Windowsホスト再起動のたびにIPが変動します。Windows 11 23H2以降では「mirroredモード」を使うと改善されます。.wslconfigに以下を追加:

[wsl2]
networkingMode=mirrored

詳細はMicrosoft Learn – WSL Networkingを参照してください。

Q5. Dockerコンテナ内のIPがホストから見えないのですが?

docker run時にデフォルトのbridgeネットワークを使った場合、コンテナのIP(例: 172.17.0.2)はホストからアクセスできます。外部から見える形にするには-pオプションでポートをマッピングしてください:

docker run -p 8080:80 nginx

Q6. ifconfigを使い続けてもいいですか?

動作はしますが、新しい機能を活用できず、将来的に削除される可能性があります。net-tools自体がnon-essential扱いなので、長期的にはipコマンドへの移行を強く推奨します。

Q7. ローカルIPを固定にしたいです

netplanの設定ファイルを編集します:

network:
  version: 2
  ethernets:
    enp0s3:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

sudo netplan applyで反映。詳細はNetplan公式を参照。

Q8. グローバルIP取得サービスの推奨は?

用途次第ですが:

  • シンプル: ifconfig.me または icanhazip.com
  • 詳細情報込み: ipinfo.io/json
  • 高信頼性: checkip.amazonaws.com(AWS提供)
  • DNS経由(高速): dig +short myip.opendns.com @resolver1.opendns.com

レート制限のあるサービスもあるので、頻繁な取得が必要ならローカルでのテストが必要です。

Q9. IPv6を完全に無効化したいです

/etc/sysctl.confに追加:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

反映:

sudo sysctl -p

⚠️ 一部アプリケーション(特にDocker)でIPv6を前提とした動作があるため、無効化は慎重に。

Q10. 自分のIPがVPN接続中かどうか分かりますか?

VPN接続時はip aにVPNインターフェース(例: tun0wg0)が表示されます:

ip a | grep -E 'tun|wg|ppp'

グローバルIPもVPN側のIPに変わるため、curl ifconfig.meの結果で接続前後を比較すれば判別できます。


参考リンク・関連資料

Ubuntu / iproute2 公式

Netplan / NetworkManager

systemd-networkd / DNS

WSL2 / クラウド環境

Docker

IPアドレス基礎知識


まとめ

UbuntuでのIPアドレス確認は、「どのIPが必要か」と「環境がDesktop/Server/WSL2/Docker/Cloudのどれか」によって最適手順が変わります。

  • 基本のCLI: ip a(詳細)/ hostname -I(簡潔)/ ip -br a(一覧)
  • GUI(Desktop): 設定→ネットワーク→歯車アイコン
  • グローバルIP: curl ifconfig.me または dig +short myip.opendns.com @resolver1.opendns.com
  • ネットワーク管理: nmcli(Desktop)/ netplan get(Server)/ resolvectl(DNS)
  • WSL2: 通常のip a+ Windows側との対応に注意
  • Docker: docker inspect でコンテナIP確認
  • クラウド: 各クラウドのメタデータAPI利用

これらの知識は、SSHサーバー設定・開発環境セットアップ・ネットワークトラブル対応・自動化スクリプトの作成など、エンジニアの日常業務すべてで必要です。本記事をブックマークしておけば、必要な情報をいつでもすぐ参照できます。


本記事は2026年6月時点の情報をもとに、Ubuntu 20.04 / 22.04 / 24.04 LTS および 25.04 / 25.10 での動作確認に基づき作成しています。Ubuntuのバージョンによってデフォルトのコマンド構成が異なる場合があるため、お使いの環境に応じてご確認ください。