自分のパソコン・サーバのグローバルIPアドレス(パブリックIP)、プライベートIPアドレス(ローカルIP)をコマンドで確認する方法について説明しています。環境はmacOS、CentOS7、Ubuntu 22.04 LTS、ec2(amazon Linux2,Amazon Linux 2023)などのLinux OSです。
※ 本ページはプロモーションが含まれています。
自分のPCや使用しているサーバのIPアドレスを確認するコマンドについてまとめています。確認するIPアドレスは、グローバルIP(パブリックIP)とプライベートIP(ローカルIP)の両方です。
・OS環境は、macとLinuxのターミナルコマンドで試しています。
OS:macOS Big Sur(バージョン11.6)、CentOS7.9、Ubuntu 22.04 LTS、AWSのec2(AMIはAmazon Linux 2、Amazon Linux 2023)
グローバルIPアドレスをコマンドで確認したい場合、グローバルIPを返してくれるサイトにcurlでHTTPアクセスすれば簡単に取得できます。ですので、グローバルIPをcurlコマンドで確認したい場合は、OS環境は関係ありません。
グローバルIPを返してくれるサイトは、例えば、ipecho.net/plain、ifconfig.io、ipinfo.ioなどがあります(2023/6/12時点)。
実際に試した例です。
$ curl ifconfig.io
128.43.***.***
$ curl ipecho.net/plain
128.43.***.***
また、ipinfo.ioはデータをJSONで返してきます。
$ curl ipinfo.io
{
"ip": "128.43.***.***",
"hostname": "***.***.net",
"city": "Tokyo",
"region": "Tokyo",
"country": "JP",
"loc": "3*.****,13*.****",
"org": "*** Corp.",
"postal": "1**-****",
"timezone": "Asia/Tokyo",
"readme": "https://ipinfo.io/missingauth"
}
ですので、JSONデータをjqに渡してIPアドレスだけを出力するように整形してあげるのが良いと思います。$ curl -s ipinfo.io | jq -r '.ip'
128.43.***.***
curlの-s(--silent)オプションはサイレントモードです。curlの取得結果を処理するためにパイプで別のコマンドに渡したい場合、通信時間の進捗データやエラーメッセージが出力される事がありますが、その情報が不必要で非表示にしたい時に使ったりします。
macOS環境でプライベートIPアドレス(ローカルIP)をコマンドで確認したい場合についてです。CentOS7環境の場合は、こちらの方を参考にしてください。
macOSでプライベートIPを確認できるコマンドもいくつかあります。
まずは、ifconfigコマンドです。ifconfigだけだと多くのネットワークインタフェースの情報が表示されるので、inetというワードでgrepします。
$ ifconfig | grep inet
〜
inet 192.168.11.4 netmask 0xffffff00 broadcast 192.168.11.255
〜
次に、ipconfigコマンドです。
$ ipconfig getifaddr en0
192.168.11.4
(*en0はインタフェース名です。複数あれば、en1、en2と続いていくと思います。)
次に、networksetupコマンドです。
$ networksetup -getinfo Wi-Fi
DHCP Configuration
IP address: 192.168.11.4
Subnet mask: 255.255.255.0
Router: 192.168.11.1
Client ID:
IPv6: Automatic
IPv6 IP address: none
IPv6 Router: none
Wi-Fi ID: **:**:**:**:**:**
(*Wi-Fiはネットワーク名です。networksetupコマンドはルータのIPアドレスの情報もわかります。)
ちなみに、macOSで画面(GUI)でプライベートIPアドレスやネットワーク名を確認したい場合、「システム環境設定」->「ネットワーク」を選択して、対象のネットワークを選択したら、詳細ボタンを押します。
すると、選択したネットワークの詳細ウインドウが開くので、TCP/IPタブを選択すると使っているパソコンのプライベートIP(ローカルIP)がわかります。
次はAWSのec2で、プライベートIPアドレスとグローバルIPアドレスをコマンドで確認します。
ssh接続したec2インスタンス上では、curlコマンドでec2インスタンスのメタデータを取得して、そのメタデータの中にプライベートIPアドレスやグローバルIPアドレスの情報があるので確認する事ができます。
(*メタデータとは、ec2インスタンス(仮想マシンサーバ)の属性などの付帯的情報の事です。)
グローバルIPアドレス(パブリックIPアドレス)を確認します(Amazon Linux 2で実行)。
$ curl http://169.254.169.254/latest/meta-data/public-ipv4
54.235.***.***
今度はプライベートIPアドレス(ローカルIPアドレス)を確認します。
$ curl http://169.254.169.254/latest/meta-data/local-ipv4
10.0.0.31
取得できるメタデータはIPアドレス以外にも色々ありますが、その一覧情報を知りたい時はこんな感じです(他にもインスタンスID、インスタンスタイプ、ホスト名などの情報を確認できる事がわかる)。
$ curl http://169.254.169.254/latest/meta-data/
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
events/
hostname
identity-credentials/
instance-action
instance-id
instance-life-cycle
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
services/
あと、curlで"http://169.254.169.254/latest/meta-data/~"にアクセスしてメタデータを取得できるのは、Amazon Linux 2ではできたけど、Amazon Linux 2023ではできませんでした。
けど、ec2-metadataコマンドならAmazon Linux 2・amazon Linux 2023どちらでも、ec2インスタンスのメタデータを取得・確認する事ができました(というかec2-metadataの方がメタデータの一覧情報を一度に表示してくれるので良い)。
$ ec2-metadata
ami-id: ami-0d3*********************
ami-launch-index: 0
ami-manifest-path: (unknown)
ancestor-ami-ids: not available
block-device-mapping:
ami: xvda
root: /dev/xvda
instance-id: i-0c67***************
instance-type: t3.nano
local-hostname: ip-10-0-0-31.ap-northeast-1.compute.internal
local-ipv4: 10.0.0.31
kernel-id: not available
placement: ap-northeast-1a
partition: aws
product-codes: not available
public-hostname: not available
public-ipv4: 54.235.***.***
public-keys:
keyname:hogekeypair
index:0
format:openssh-key
key:(begins from next line)
ssh-rsa
~
Linux CentOS7環境でプライベートIPアドレス(ローカルIP)をコマンドで確認したい場合についてです。macOS環境の場合は、こちらの方を参考にしてください。
CentOSでプライベートIPを確認できるコマンドはいくつかあります。
まずは、ipコマンドです。
$ ip a
〜
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.44.10/24 brd 192.168.44.255 scope global noprefixroute eth1
〜
次に、hostnameコマンドです。
$ hostname -I
10.0.2.15 192.168.44.10
次に、nmcliコマンドです(nmcliはUbuntu22.04、ec2のamazon Linux2には入っていませんでした)。
$ nmcli
〜
eth1: 接続済み to System eth1
〜
inet4 192.168.44.10/24
route4 192.168.44.0/24
〜
ちなみにnmcliコマンドは、ネットワークのインタフェース一覧表示だけでなく、その接続状況やIPアドレスの設定や接続設定などでも使えるコマンドです。