curlコマンドで、接続先IPアドレスを指定する方法

目次

こんにちは。ごえです。今回はcurlコマンドで接続する際に、接続先サーバーのIPアドレスを指定する方法を紹介します。

curlでCDN配下のHTTPS接続先を指定して確認する

CloudFrontなどのCDNが前段にある環境で、DNSを変更せずに特定のIPアドレスへHTTPS接続を試したい場合は、curlの`--resolv`オプションが便利です。

curl -I -v https://example.com/ --resolv example.com:443:203.0.113.10

-I (大文字のアイ) オプション:HTTPレスポンスヘッダーを表示する
-v(小文字のブイ) オプション:詳細表示(実際に接続したIPアドレス等)

証明書エラーを一時的に無視する場合は、`-k`を追加します。

curl -k -I -v https://example.com/ --resolv example.com:443:203.0.113.10

(203.0.113.10 は例示アドレスです。)

想定している環境

Webサーバーの前段にCDNやロードバランサーなどがある環境を想定します。

CloudFront

ロードバランサー

EC2

上記の構成において、CloudFront、ロードバランサー、EC2のすべてにSSL証明書が設置されていると仮定します。

SSL証明書の更新をした際、ブラウザにURLを入力してサイトを確認すると、更新されたかどうか確認できるのは一番外側のCloudFrontのみです。
CloudFrontだけ確認しても、もしかしたらEC2に設置されているSSL証明書を更新し忘れている可能性があります。
CloudFront配下のロードバランサーとEC2に設置されたSSL証明書が正しく更新されたかを確認することはできません。

そんな時に便利なのが、curlコマンドの「--resolv」オプションです。

ホスト名とポート番号、IPアドレスを指定してアクセスすることができます。

--resolv の動作

--resolvオプションの指定形式は次のとおりです。

--resolv ホスト名:ポート番号:接続先に指定したいIPアドレス

今回の例では、`example.com:443`の接続先を`203.0.113.10`へ固定しています。

URLには`https://example.com/`を指定したままなので、接続先IPだけを変更しつつ、Hostヘッダーには`example.com`が使用されます。

このため、前段にCloudFrontがあっても配下のEC2に直接アクセスすることができます。
(もちろんEC2に紐づくセキュリティーグループで443ポートの接続を許可する必要はあります)

主な用途

・DNS切り替え前の疎通確認
・CDN配下のサーバーに設置した証明書有効期限のチェック
・特定の接続先IPに対する動作確認
・hostsファイルを変更せずに一時的なテストを行う

hostsファイルを変更しても可能ですが、接続先IPアドレスを変えながら何度も接続確認をする場合は
「--resolv」オプションが便利です。


よろしければ参考にしてください。
最後までお読みいただきありがとうございます。