Linux / ネットワーク / IP を確認する方法

Linuxに設定されたIP(Internet Protocol)アドレスはip addressで確認します。宛先ごとの送信元候補はip route get 宛先のsrcで確認できますが、インターネット側で見えるアドレスとは異なる場合があります。NAT(Network Address Translation)・プロキシ・VPN(Virtual Private Network)を経由する場合は外部側の対応も調べます。

ip -brief address
ip route get 1.1.1.1

1つのサーバーにはループバック、プライベートIPv4、パブリックIPv4、リンクローカルIPv6、グローバルIPv6など複数のアドレスが同時に存在することがあります。したがって「自分のIP」はどのネットワークと通信するかによって変わります。

最も速くIPアドレスを確認する方法

すべてのインターフェースを簡単に見る

ip -brief address

-briefはインターフェースの名前、状態、アドレスを1行ずつ表示します。loは自身と通信するループバックインターフェースであり、127.0.0.1と::1は外部デバイスから接続するためのアドレスではありません。

IPv4アドレスのみを見る

ip -4 address show

scope globalのIPv4アドレスに絞るには次を使います。このscopeにはプライベートIPv4も含まれ、インターネットで使うパブリックIPだけを抽出する指定ではありません。

ip -4 address show scope global

IPv6アドレスのみを見る

ip -6 address show

IPv6には、リンク内でのみ有効なscope linkアドレスと、より広い範囲で使用するscope globalアドレスが一緒に表示されることがあります。さらに、一時的なプライバシー保護アドレスも複数存在する可能性があるため、アドレスのscope、temporary、dynamicなどの属性も合わせて確認してください。

ip address出力の読み方

ip address showは、ネットワークインターフェースとそのインターフェースに接続されたプロトコルアドレスを詳細に表示します。コマンドの文法とアドレスの属性は、ip-addressマニュアルで確認できます。

ip address show
表示項目 意味 確認する内容
UP インターフェースが管理上有効になっている 実際のリンクと通信が正常であるという意味とは異なります。
LOWER_UP デバイスの下位層リンクがアップしている ケーブル・仮想リンクの状態を判断する手がかりです。
inet IPv4アドレスとプレフィックス長 192.0.2.10/24のように表示されます。
inet6 IPv6アドレスとプレフィックス長 リンクローカルアドレスとグローバルアドレスを区別する必要があります。
scope アドレスが有効な範囲 host、link、globalなどがあります。
valid_lft アドレスの有効寿命 動的アドレスは時間が経つと変更されたり削除されたりする可能性があります。

特定のネットワークインターフェースを確認する

インターフェース名を見つける

ip -brief link

環境によって eth0、ens3、enp1s0、wlan0 のように名前が異なります。ドキュメントやスクリプトで特定の名前を推測せず、実際のシステムの一覧をまず確認してください。

選択したインターフェースのアドレスを見る

ip address show dev ens3

ens3 は例です。実際のインターフェース名に置き換えて使用します。IPv4のscope globalに絞る場合は、条件を併せて指定できます。

ip -4 address show dev ens3 scope global

実際の外部通信に使用する IP を確認する

経路確認で src を確認する

複数のアドレスがある場合、宛先に応じて選択されるインターフェースや送信元アドレスが異なることがあります。ip route getで特定の宛先に対するルーティングの決定を確認してください。

ip route get 1.1.1.1

出力のdevは使用するインターフェース、viaは次のゲートウェイ、srcはこの条件でカーネルが選ぶ送信元です。宛先へパケットを送る疎通試験ではなく、アプリケーションが別の送信元を指定する場合などには結果が異なる可能性があります。詳細はip-routeマニュアルを参照してください。

デフォルトゲートウェイの確認

ip route show default

複数のデフォルトルートがある場合、metric、ポリシールーティングのルールや宛先に応じて実際の経路は異なることがあります。ip route getの結果を併せて確認する理由です。

IPv6ルートの確認

ip -6 route get 2606:4700:4700::1111

アドレスが設定されているだけではIPv6接続の成功は保証されません。経路、ファイアウォールと相手側サービスを確認し、名前で接続するときはDNS(Domain Name System)の応答も調べます。

hostname -Iで簡単に確認

一部のLinuxディストリビューションでは、次のコマンドでホストに設定されたアドレスを空白で区切って出力できます。

hostname -I

短くて便利ですが、インターフェース名、プレフィックス長、scopeや選択経路は示しません。loopbackやIPv6のリンクローカルアドレスも除外されます。詳しくはhostnameのマニュアルを確認し、用途に応じてip addressとip route getを併用してください。

hostname -iは名前解決の結果を表示するため、/etc/hostsやDNS設定の影響を受け、インターフェースに直接設定されたアドレスを確認する場合とは異なります。似たようなオプションを混同しないことが重要です。

プライベートIPとパブリックIPの区別

ローカルインターフェースアドレス

ip addressが表示するアドレスは、該当Linuxネットワークネームスペースのインターフェースに設定されたアドレスです。家庭用ルーターやクラウドNATの背後にある場合、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16の範囲のプライベートIPv4が表示されることがあります。

インターネットで見えるアドレス

NATを通過すると、外部サービスにはルーター、クラウドゲートウェイ、VPNまたはプロキシのパブリックIPが表示されることがあります。このアドレスはローカルコマンドだけで確定することはできず、ネットワーク機器やクラウド管理画面で確認する方法が最も明確です。

外部IP検証用のウェブサービスを利用することもできますが、リクエスト時間と送信元アドレスはそのサービスに送信されます。信頼できるサービスを選択し、自動化依存関係、IPv4·IPv6の分類、そして潜在的な障害を考慮してください。

ポートが開いているかどうかは別の問題です

パブリックIPを知っているからといって、サーバーのサービスがインターネットからアクセスできるとは限りません。NATのポート転送、クラウドセキュリティグループ、ホストファイアウォール、サービスの受信アドレスとポートを必ず確認してください。

ss -lntup

プロセス情報の閲覧には管理者権限が必要な場合があります。ssで待ち受けと接続を確認し、公開前に認証、暗号化、更新状況と必要最小限の許可範囲を点検します。

スクリプトにおけるIPアドレスの扱い

JSON出力の使用

ipのJSON(JavaScript Object Notation)出力をパーサーで処理すると、表示文字列の位置に依存するgrepの組み合わせより安定して扱えます。

ip -j -4 address show scope global

JSONパーサーではインターフェースごとの要素とaddr_info配列を順に処理し、アドレスが複数ある場合や存在しない場合も扱います。ipの版による違いは対象のディストリビューションで確認します。

1つのアドレスだけを無条件に選ばないこと

マルチホームサーバー、VPN、コンテナ、一時的なIPv6アドレスの環境では、「最初のアドレス」がアプリケーションに必要なアドレスである保証はありません。宛先、アドレスファミリ、インターフェイス、スコープ条件を明確にした上で選んでください。

コンテナとネットワークネームスペース

コンテナ内でip addressを実行すると、通常はそのコンテナのネットワークネームスペースのアドレスが表示されます。ホストのインターフェイスアドレスや外部NATアドレスとは異なる場合があります。

ホスト、コンテナ、KubernetesのPod、サービス、Ingress、外部ロードバランサーはそれぞれ異なるアドレスを持つことがあります。障害を診断する際は、コマンドをどのネームスペースで実行したかを記録し、通信経路の各層を区別してください。

ifconfigを使ってもよいですか?

ifconfigは古い文書でよく見かけますが、最近のLinuxディストリビューションではデフォルトでインストールされていない場合があり、現代的なネットワーク機能をすべて表現することは難しいです。新しい文書やスクリプトではiproute2のip address、ip link、ip routeを優先的に使用することをおすすめします。

既存のシステム運用手順がifconfigに依存している場合、すぐに削除するのではなく、出力と動作の差異を検証したうえで段階的に移行してください。

よくある質問

127.0.0.1はサーバーのIPですか?

サーバー自身を指すIPv4ループバックアドレスです。同じネットワーク上の他の機器から、このアドレスでサーバーに接続することはできません。

アドレスが複数表示される場合、どれを使えばいいですか?

接続しようとする相手と経路によります。同じ内部ネットワークでは該当インターフェースのプライベートアドレスを、特定の外部宛に出る発信元アドレスはip route get 宛先のsrcを確認してください。

ip addressにグローバルIPが表示されないのはなぜですか?

サーバーがNAT、ロードバランサ、VPNまたはプロキシの背後にあるためかもしれません。ネットワーク機器やクラウドコンソールで外部アドレスのマッピングを確認してください。

IPアドレスだけがわかればSSHで接続できますか?

いいえ。SSHサーバーは適切なアドレスとポートで受信している必要があり、ルーティング・NAT・ファイアウォール・セキュリティグループが接続を許可し、有効な認証手段も必要です。

まとめ

インターフェースのアドレスは ip -brief address、IPv4・IPv6 の詳細情報は ip -4 address と ip -6 address で確認します。宛先で実際に使用する送信元アドレスは ip route get 宛先 の src の値がより正確な手がかりです。

ローカルアドレスとインターネット上で見えるパブリックアドレスは NAT とプロキシのために異なる場合があります。常にアドレスの範囲、実行したネットワークネームスペース、実際の通信宛先を一緒に明示してください。