4.

Linux で内部 IP アドレスを確認するコマンド 8 種(ip / ifconfig / hostname)

編集
この記事の要点
  • モダン Linux の標準は ip addr show(短縮 ip a
  • 旧コマンド ifconfignet-tools パッケージで利用可、デフォルト未インストールのディストリ多数
  • 1 行で取得: hostname -I(IPv4 のみスペース区切り)、hostname -i(hosts ファイル参照、非推奨)
  • 特定インターフェース: ip -4 addr show eth0/sbin/ifconfig eth0
  • ルーティング: ip route で gateway、ip route get 8.8.8.8 で外向き使用 IF を確認
  • スクリプト用: ip -j addr show で JSON 出力、jq 連携

結論: まずこの 3 つ

# 1. 全インターフェースの IP
ip addr show
ip a              # 短縮形

# 2. IPv4 だけスペース区切りで(スクリプト用)
hostname -I
# 192.168.1.10 172.17.0.1 10.8.0.1

# 3. ルーティングと gateway
ip route
# default via 192.168.1.1 dev eth0
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10

ip コマンド(推奨)

Linux 2.0 時代の ifconfig は非推奨化され、iproute2 パッケージの ip コマンドに置き換わりました。

# 全インターフェース
ip addr show
ip a

# IPv4 のみ
ip -4 addr show
ip -4 a

# IPv6 のみ
ip -6 addr show

# 特定インターフェース
ip addr show eth0
ip a show dev wlan0

# ブリッジ / VLAN / ループバックも全部
ip addr show | grep "inet "

# JSON で出力(jq でパース可)
ip -j addr show | jq '.[].addr_info[] | select(.family == "inet") | .local'

# UP / DOWN 状態
ip link show
# 1: lo:  mtu 65536 qdisc noqueue state UNKNOWN
# 2: eth0:  mtu 1500 ...

# ルーティング
ip route show
ip r

hostname コマンド

# 自ホストの IPv4 をスペース区切り(ループバックは含まない)
hostname -I
# 192.168.1.10 172.17.0.1

# 短縮ホスト名
hostname
# webserver01

# FQDN
hostname -f
# webserver01.example.com

# /etc/hosts を引いた IP(非推奨、誤る)
hostname -i
オプション意味備考
-Iすべての非ループバック IPスクリプト推奨
-i/etc/hosts を見て解決した IP誤った結果のことも多い
-Aすべての FQDN(全 IP に対する逆引き)DNS 依存
-fFQDN/etc/hostname + /etc/hosts

ifconfig(旧式)

CentOS 7 / Ubuntu 18.04 以降は標準で入っていません。必要なら:

# インストール
sudo apt install net-tools         # Ubuntu / Debian
sudo yum install net-tools         # CentOS / RHEL

# 全インターフェース
ifconfig
# eth0: flags=4163  mtu 1500
#         inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255

# 特定インターフェース
ifconfig eth0

# IPv4 のみ抽出
ifconfig eth0 | grep 'inet ' | awk '{print $2}'

# ループバック以外
/sbin/ifconfig | grep "inet " | grep -v 127.0.0.1

nmcli (NetworkManager)

RHEL / CentOS / Fedora 系で標準:

# デバイス一覧と接続状態
nmcli device
# DEVICE  TYPE      STATE      CONNECTION
# eth0    ethernet  connected  System eth0
# wlan0   wifi      connected  homewifi

# 詳細情報
nmcli device show eth0
# IP4.ADDRESS[1]:   192.168.1.10/24
# IP4.GATEWAY:      192.168.1.1
# IP4.DNS[1]:       8.8.8.8

# 接続別
nmcli connection show

外向きで使われる IP(NAT 越えの理解)

# 8.8.8.8 へ出るとき使う IF と送信元 IP
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.10 uid 1000

# グローバル IP(インターネット側から見た自分)
curl -s ifconfig.me
curl -s https://api.ipify.org
curl -s https://ipinfo.io/ip
# → 203.0.113.42 のようなグローバル IP

# DNS 経由でも取れる
dig +short myip.opendns.com @resolver1.opendns.com

シェルスクリプト用 1 行抽出

# eth0 の IPv4 だけ取得(一番堅い)
ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

# 別の方法(awk)
ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1

# JSON + jq
ip -j -4 addr show eth0 | jq -r '.[0].addr_info[0].local'

# hostname 一発(ループバック除外)
hostname -I | awk '{print $1}'

# シェル変数に
MY_IP=$(hostname -I | awk '{print $1}')
echo "私の IP は $MY_IP です"

各インターフェースの種類

名前意味
loループバック(127.0.0.1)
eth0 / ens33 / enp0s3有線 LAN(systemd-networkd 系命名)
wlan0 / wlp2s0無線 LAN
docker0 / br-xxxDocker のブリッジ
tun0 / wg0VPN(OpenVPN / WireGuard)
virbr0libvirt / KVM ブリッジ

FAQ

Q: hostname -i127.0.1.1 が返る
A: Debian/Ubuntu 系は /etc/hosts に 127.0.1.1 hostname を書く慣習があり、それが返っています。使うべきは hostname -I(大文字 I)。

Q: Docker コンテナ内で取れる IP は何?
A: コンテナの仮想 IP(172.17.0.x 等)。ホストの IP は ip route show default の gateway 側、もしくは host.docker.internal

Q: グローバル IP を Linux 内から知りたい
A: NAT 配下では Linux 内には現れません。curl ifconfig.mecurl ipinfo.io/ip で外部サービス経由で取得します。

関連コマンド

  • ip neigh / arp -n — ARP テーブル
  • ss -tlnp — リスニングポート一覧
  • ip -s link — 送受信パケット統計
  • ethtool eth0 — リンク速度、デュプレックス
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. クラス
  2. グローバルIPアドレス
  3. プライベートIPアドレス
  4. 内部IPアドレスの確認方法(Linux)
  5. 外部IPアドレスの確認方法(Linux)
  6. IP制限をかける方法