はじめに (対象読者・この記事でわかること)
この記事は、「今使っている回線のグローバルIPが知りたい!」と思ったことがある方、また、サーバーの遠隔デバッグやVPN切替の検証、ルーターのポート開放テストを手軽に行いたい方向けです。
curl や PowerShell の基礎的な知識があれば、OSを問わず1コマンドで自分のグローバルIPを取得できるようになります。また、社内プロキシ環境下でコマンドが失敗する理由と回避策も解説するので、同じエラーに悩まされる時間を大幅に削減できます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- ターミナル(コマンドプロンプト、PowerShell、ターミナル.app)の起動とコマンド実行
- curl / wget の基礎的な使い方(HTTP GET を打てるレベルでOK)
- グローバルIPとプライベートIP(RFC1918)の違いをある程度理解していること
なぜ「自分のグローバルIP」を調べるのが面倒なのか
インターネットに接続するたびにISPやクラウドプロバイダーから割り当てられるグローバルIPアドレスは、「ブラウザで『myip』と検索して表示されたサイトを見る」という方法でも確認可能です。しかし、本番サーバーのCI/CDパイプラインや、無人運用のスクリプトの中でブラウザを開くわけにはいきません。
また、IPv4/IPv6のデュアルスタック環境では「IPv4側だけでなくIPv6アドレスも同時に知りたい」という要件も増えています。そこで活躍するのが、外部サービスにHTTP(S)で問い合わせて自身のIPを返してもらう「IP Echo Service」です。代表的なサービスは以下の通りです。
| サービス | エンドポイント | 特徴 |
|---|---|---|
| ifconfig.me | https://ifconfig.me |
シンプル、IPv4/IPv6両対応 |
| ipinfo.io | https://ipinfo.io/ip |
国・都市情報もJSONで取得可能 |
| icanhazip.com | https://icanhazip.com |
ドメインが覚えやすい |
これらを curl で叩くだけで、ブラウザを開かずともスクリプトに組み込めるわけです。
curl/wget一発で取得:OS別実践ガイド
ここからは、Windows / macOS / Linuxそれぞれの環境で、最小限の依存関係でグローバルIPを取得する方法を紹介します。どの例もコピペで動作し、標準出力に改行付きのIPが表示されます。
Windows 10/11(PowerShell 7以降)
PowerShell 7 以降では curl がエイリアスではなく実体の curl として動作するため、以下の1行でOKです。
Powershell# IPv4 を取得 curl -s https://ifconfig.me # IPv6 を取得(-6 オプションで強制) curl -s -6 https://ifconfig.me
コマンドプロンプト(cmd.exe)を使う場合は、PowerShell のエイリアスが邪魔をするため、curl.exe と拡張子を明示すると確実です。
Cmdcurl.exe -s https://ifconfig.me
macOS / Linux(Bash/Zsh)
ターミナルで以下を実行します。
Bashcurl -s https://ifconfig.me # IPv4 curl -s -6 https://ifconfig.me # IPv6
curl が入っていない最小構成のコンテナ(Alpine 等)では wget で代替できます。
Bashwget -qO- https://ifconfig.me
WSL 利用時の注意:Windows側かLinux側か
WSL(Windows Subsystem for Linux)では、Windowsホスト側のIPを見たいのか、WSL内部のIPを見たいのかでコマンドを変えます。
- Windowsホスト側のグローバルIP → PowerShell 上で curl を実行
- WSL 内部から見たグローバルIP → WSLターミナル上で curl を実行
WSL は仮想アダプタ経由でWindowsとNAT接続されるため、両者でグローバルIPが異なることはほぼありませんが、プロキシ設定やVPNクライアントがWindows側だけに入っている場合、WSLとWindowsで出口IPが異なることがあるので注意が必要です。
JSON レスポンスをパースして国コードも取得する
ipinfo.io を使うと、IPだけでなく location や国コードも取得できます。
Bashcurl -s https://ipinfo.io/json | jq -r '.ip + " (" + .country + ")"' # 出力例:203.0.113.42 (JP)
jq が入っていない環境では、PowerShell の ConvertFrom-Json でもOK。
Powershell(Invoke-RestMethod https://ipinfo.io/json).ip
社内プロキシで失敗する:エラーと対策
社内NWでプロキシを経由していると、上記 curl が 407 Proxy Authentication Required で失敗することがあります。これは、 curl がプロキシ環境変数(http_proxy / https_proxy)を見に行くため、認証なしプロキシでない限り、NTLM認証で弾かれるためです。
エラーメッセージ例
curl: (56) Received HTTP code 407 from proxy after CONNECT
解決策1:プロキシを一時的に無効化
Bash# bash unset http_proxy https_proxy curl -s https://ifconfig.me
Powershell# PowerShell Remove-Item Env:http_proxy,Env:https_proxy curl -s https://ifconfig.me
解決策2:プロキシ認証情報を含める
プロキシURLにID/パスを埋め込む(セキュリティには注意)
Bashexport https_proxy=http://user:pass@proxy.corp.com:8080 curl -s https://ifconfig.me
解決策3:プロキシを経由せず直接行く(Split-Tunnel)
多くの企業では、社内のPACファイルで「外部IP系サービスは直結」が許可されています。curl --noproxy '*' を使うと、プロキシを無視して直結できます。
Bashcurl --noproxy '*' -s https://ifconfig.me
まとめ
本記事では、curl/wget一発で自分のグローバルIPを取得する方法をOS別に紹介しました。
- PowerShell 7 以降なら curl がネイティブで使える
- プロキシ環境下では
--noproxy '*'や環境変数の一時解除で回避 - IPv6 も
-6オプションで簡単に確認可能
この知識があれば、CI/CD のジョブや、VPN切替の自動化スクリプトに組み込む際に、ブラウザを開かずとも自分の出口IPをリアルタイムで取得できます。
次回は、取得したIPをSlack/Teamsに自動投稿し、ファイアウォールのホワイトリスト運用を効率化する方法を紹介します。
参考資料
