[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[For 25 graduates] We have started recruiting for AI x virtual interview!

[For 25 graduates] We have started recruiting for AI x virtual interview!

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Successor to CentOS] AlmaLinux OS server construction/migration service

[Successor to CentOS] AlmaLinux OS server construction/migration service

[For WordPress only] Cloud server “Web Speed”

[For WordPress only] Cloud server “Web Speed”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Low cost] Wasabi object storage construction and operation service

[Low cost] Wasabi object storage construction and operation service

[Reservation system development] EDISONE customization development service

[Reservation system development] EDISONE customization development service

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Suitable for local companies in China] China cloud / server construction, operation and maintenance

[Suitable for local companies in China] China cloud / server construction, operation and maintenance

[YouTube] Beyond official channel “Biyomaru Channel”

[YouTube] Beyond official channel “Biyomaru Channel”

グローバルIPアドレスをコマンド(curl/dig等)で確認する方法

皆様こんにちは。
寒くなると布団から出られなくなる システムソリューション部所属の なか です。

ブログに何を書くか悩んでいると、ふと最近「グローバルIPアドレスの確認方法って人によって微妙に違うな」
「コマンドの内容も微妙に違う」という事に気が付きました。

なので今回は「グローバルIPアドレスをコマンド(curl/dig/nslookup)で確認する方法」を主眼に説明していきたいと思います。

といっても「そもそもコマンドで確認できるの?」「curl以外にも方法あるの?」
と思う人もいらっしゃるかと思います。

一応よくあるブラウザでの方法も合わせて説明します。

実行環境

● Linux環境
・OS:Ubuntu 20.04.5 LTS (WSL2環境)
・Shell:bash
・ロケールを日本語に変更

● Windows環境
・OS:Windows11 (バージョン:21H2)
・Shell:コマンドプロンプト
・言語設定を日本語に変更

一般的なブラウザでの確認方法

まず、一般的な方法の説明です。

インフラエンジニアでも、そうでない方でも
とりあえず自分が使っているPCのグローバルIPを確認するときに使うのは
IP確認サイトにブラウザでアクセスする方法が多いかと思います。

※検索上位に上がる有名な物として主に下記の2サイト様かと思います。

○「CMAN」 様
https://www.cman.jp/network/support/go_access.cgi

○「確認くん - UGTOP」 様
https://www.ugtop.com/spill.shtml

これらのIP確認サイトにアクセスすると、現在使用しているグローバルIP等が表示されます。

原理

原理としてはシンプルです。

クライアント(ユーザー)がブラウザを使ってWEBサーバーにアクセスする際、
HTTP(S)プロトコルを使用してサーバーにHTTPリクエストを送ります。

この際、ブラウザが送信する「HTTPリクエスト」は概ね4つの構造に分かれています
(詳細はこれだけで1本記事がかけるので割愛します)。

  • 通信プロトコルやメソッドを指定する「リクエスト行」
  • リクエストを送った側の情報等を含んだ「ヘッダー行」
  • 空行
  • 「メッセージボディ」

この「ヘッダー行」の中には「リクエストヘッダ」と呼ばれる、
アクセスをリクエストしたクライアント(ユーザー)のIPアドレス等々の情報が記載されています。

要するに、IP確認サイトではこのアクセスした人が送ってきたリクエストヘッダの情報を
アクセスした本人に提示することでグローバルIPアドレスを教えてくれるわけです。

この原理は後述のコマンドでも利用していますので頭の片隅に置いて貰えますと幸いです。

curlコマンドでの確認方法(Linux&Windows)

● curl

コマンドを使って確認する方法といえば、恐らく100人中95人(憶測)はcurlコマンドだと思う定番の方法です。

このコマンド自体は様々な通信プロトコルでデータの送受信が行える素晴らしいコマンドで、
一般的にはWEBサーバーが正常に稼働しているかをコマンドで確認する際の用途で使うことが多いと思います。

最近のLinuxの主要ディストリビューションでは標準導入されており、
Windowsでも10( 2018年 Ver.1803(RS3)~)から標準導入されています。

curl inet-ip.info
xxx.xxx.xxx.xxx
 
curl ifconfig.co
xxx.xxx.xxx.xxx
 
curl httpbin.org/ip
{
  "origin": "xxx.xxx.xxx.xxx"
}
 ※json形式で出力

使い方としては主に上記のようになります。

「WEBサイトにリクエストを送っている?」と気が付いたかと思いますが、
その通りで上記で説明していた「リクエストヘッダ」を使った方法と同じ原理です。

微妙に違うのはドメイン名の部分

curlコマンドでIP確認サイトにHTTPリクエストを送って、
その中のリクエストヘッダ情報からIPアドレスのみを返答してもらっています。

他にも同じ用途のサイトは複数ありますので、その選定はドメイン名の好みかと思います。

この確認に利用するサイトが人によって違うのが「人によって微妙に違う」正体かと思います。

結論として、「curlはグローバルIPを内部で確認するコマンドではない」事を意識しておいて下さい。
あくまで外部サービスを利用している形です。

dig・nslookupコマンドでの確認方法(Linux・Windows)

● dig (Linux)
● nslookup (Windows)

ドメインの確認にお馴染みのdigとnslookupコマンドです。

上記2つのコマンドは名前もツールも違う物ではありますが、
今回の使用方法としては概ね同じ形式なので合わせて説明いたします。

このコマンドはDNSサーバーに問い合わせてDNSレコードの応答をもらうツールですが、
実は自分のグローバルIPを教えてくれるDNSサーバーがいくつか存在しています。

  • Google
  • Cisco(OpenDNS)
  • Cloudflare

例えば上記の特定のDNSサーバーにおいて、特定の問い合わせをすると問い合わせた側のグローバルIPを返答してくれます。

これら機能は本来その当該DNSを使ったサービスを利用しているかの確認などに使われる物らしく、
あまり大体的に周知されている訳ではないようです。

今回は当該企業や関連企業の公式ドキュメントや社員投稿のフォーラムなどを確認した所、
その存在や利用方法等について少しですが記述がなされておりました。

公に存在が開示されていると判断した「Cisco(OpenDNS)」のDNSサーバーを利用した確認方法になります。

●ubuntu(bash)
 
dig myip.opendns.com @208.67.222.222 +short
xxx.xxx.xxx.xxx

「dig」の場合は「+short」オプションが使えるため、グローバルIPのみを表示させる事ができます。

 
●Windows(CMD)
 
nslookup myip.opendns.com 208.67.222.222
サーバー:  dns.opendns.com
Address:  208.67.222.222
権限のない回答:
名前:    myip.opendns.com
Address:  xxx.xxx.xxx.xxx

「nslookup」だと短縮オプションがないですが、「dig」のフル表示よりかは短いため見やすいかと思います。

Cisco社のコミュニティに社員の方が投稿したナレッジに記載がありました。
※digのshortオプションは筆者が追加して使っていますが、本筋の使い方自体はナレッジと変わりません

Umbrella: Umbrella の DNS サーバーでのみ使える特殊な DNS リクエスト

余談:GoogleのDNS

ちなみにですが、Googleにも実は公開ドキュメントに少し記述がありました。

ただ、こちらは求めている結果を完璧に得られるコマンドの説明では無かったのと
Ciscoと違ってTXTレコードで返答される形式のために使用するコマンドが少し長くなるので、

今回は解説は割愛いたします。

curl と dig & nslookup どっちが便利なの

どちらも「コマンドを実行したクライアント(グローバルIP)」という同じ回答を得られます。

ですので、お好みの方法で問題ないです。

ただこれでは納得される回答になりませんよね。

実際そこまで大きな優劣は無いと考えますが、差を言うのであれば dig & nslookup のほうが 筆者は安定はしているとは考えます。

curl の方法は、問い合わせる先のWEBサーバーが稼働していなければ結果を得られません。

この記事を書く際にいくつかIP確認サービスのサイトにアクセスしましたが、
「429 Too Many Requests」のエラーコードを出して結果が確認できなかったサイトがありました。

ですが、dig や nslookup はDNSに問い合わせる方法です。

そう……GoogleやCisco(OpenDNS)が管理しているDNSサーバーは基本的に安定稼働していますので安心です。
というか停止したら大惨事です。

問い合わせる先にサービスの安定性を考えた時には、
1WEBサーバーと大企業のDNSサーバーでは明らかに後者のほうが安定稼働しています。

余談:実は内部的には dig & nslookup の方が速い

体感できる程の差はないですが ”内部的”な実行速度は dig & nslookup のほうが速いです。

これは curl が 通信プロトコルに応答を確認する TCP を使っているのに対して、
dig & nslookup は 一方的に送る UDP を使っているので速度差があります。

おわりに

「極端な差はないので使いやすいやり方を使えばいいです」「しいて言うなら dig & nslookup の方が速い」

サーバーのグローバルIPを確認したり等、使う場面は結構ある物ですのでこの記事が多少でも参考になりましたら幸いです。

長文となりましたが、ここまで読んで頂きありがとうございました!

参考資料

HTTP の概要
https://developer.mozilla.org/ja/docs/Web/HTTP/Overview

curl shipped by Microsoft (curl公式サイト)
https://curl.se/windows/microsoft.html

Umbrella: Umbrella の DNS サーバーでのみ使える特殊な DNS リクエスト

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
13
読み込み中...
13 票, 平均: 1.00 / 113
33,188
X facebook はてなブックマーク pocket
[2024.6.30 CentOS support ended] CentOS server migration solution

[2024.6.30 CentOS support ended] CentOS server migration solution

[For 25 graduates] We have started recruiting for AI x virtual interview!

[For 25 graduates] We have started recruiting for AI x virtual interview!

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

The person who wrote this article

About the author

Naka Tomo

Beyond mid-career in 2022 Belongs to
the System Solutions Department
LPIC-3 I have a 304 and AWS SAA I only
have three choices for regular drinks: milk, cola, and black tea.