メインコンテンツへスキップ
  1. ブログ/

curlの--resolveオプションでDNSを使わずにリクエストを送る方法

Linux Curl コマンド DNS
目次

curlの–resolveオプションでDNSを使わずにリクエストを送る方法
curlの–resolveオプションでDNSを使わずにリクエストを送る方法

コマンド早見表
#

解説は不要という方は、以下のコマンドをそのままコピーしてご利用ください。

  • 特定のIPアドレスへリクエストを送る
curl --resolve ホスト名:ポート番号:IPアドレス https://ホスト名
  • HTTPSで動作確認する
curl --resolve example.com:443:192.168.1.1 https://example.com
  • HTTPで動作確認する
curl --resolve example.com:80:192.168.1.1 http://example.com

–resolveオプションとは
#

--resolve オプションは、指定したホスト名とIPアドレスの対応をcurl内部のDNSキャッシュへ登録し、通常の名前解決を行わずにリクエストを送るためのオプションです。

そのため、公開DNSやローカルのDNS設定を変更することなく、任意のIPアドレスへ接続することができます。

例えば、サーバーの移行作業やデプロイ前に「DNSが切り替わる前の状態で新しいサーバーの動作を確認したい」という場面で役立ちます。

具体的な利用シーンについては後述の「実用例」で詳しくご紹介します。

/etc/hosts を編集する方法でも同様のことができますが、--resolve はコマンド単位で指定できるため、ファイルを書き換える必要がなく手軽に利用することができます。

基本的な使い方
#

--resolve オプションの指定形式は以下となります。

curl --resolve ホスト名:ポート番号:IPアドレス URL

各項目の説明は以下となります。

項目 説明
ホスト名 対応付けたいホスト名(例:example.com)
ポート番号 接続するポート番号(HTTPSは443、HTTPは80)
IPアドレス リクエストを送る先のIPアドレス

例えば、example.com への接続を 192.168.1.1 に向けてHTTPSでリクエストを送る場合は以下のコマンドとなります。

curl --resolve example.com:443:192.168.1.1 https://example.com

実用例
#

ここでは、実際にどのようなケースで --resolve が活用されるかをご紹介します。

ローカル検証環境での動作確認
#

WSL や VirtualBox などでローカルに検証環境を構築している場合、--resolve を使うことでDNSや /etc/hosts を変更せずに検証環境へリクエストを送ることができます。

例えば、VirtualBox で立てたサーバー(IPアドレス:192.168.56.10)に対して example.com として動作確認したい場合は以下のコマンドとなります。

curl --resolve example.com:80:192.168.56.10 http://example.com

WSLの場合も同様に動作しているWebサーバーのIPアドレスを指定します。

curl --resolve example.com:80:172.20.100.10 http://example.com

※ 記載のIPアドレスは例となります。実際にはVirtualBoxやWSL上のWebサーバーのIPアドレスを指定してください。

ステージング環境への接続確認
#

アプリケーションの開発現場では、本番環境とは別にステージング環境を用意しているケースが多くあります。

しかし、DNSは本番環境のIPアドレスを返すため、通常の curl コマンドではステージング環境へ直接リクエストを送ることができません。

このような場合にも --resolve を利用することで、DNSを切り替えることなくステージング環境へリクエストを送ることができます。

/etc/hosts を編集する方法では確認後に戻し忘れるリスクがあります。

一方で --resolve オプションによるリクエストはコマンド単位で完結するため一時的に確認したい場合などにおいて安全な方法となります。

curl --resolve example.com:443:ステージング環境のIPアドレス https://example.com

レスポンスヘッダーも合わせて確認したい場合は -I オプションを組み合わせます。

curl -I --resolve example.com:443:ステージング環境のIPアドレス https://example.com

ロードバランサー配下の特定サーバーを直接叩く
#

ロードバランサーを経由せず、配下の特定サーバーに直接リクエストを送りたい場合にも活用することができます。

障害発生時の調査や特定サーバーに絞った動作確認など、ロードバランサーによる振り分けを意図的に回避したい場面で役立ちます。

curl --resolve example.com:443:バックエンドサーバーのIPアドレス https://example.com

SSL証明書の確認
#

SSL証明書が正しく設定されているかを、DNSの切り替え前に確認したい場合にも利用できます。

-v オプションを組み合わせることで、TLSハンドシェイクやサーバー証明書の情報を確認することができます。

curl -vI --resolve example.com:443:192.168.1.1 https://example.com

リプレイスやデプロイ前の動作確認
#

新しいサーバーへの移行作業では、DNSの切り替え前に新サーバーで正しくレスポンスが返るかを確認したい場面があります。

--resolve を使うことで、DNSを切り替えることなく新サーバーへ直接リクエストを送ることができます。

curl --resolve example.com:443:新サーバーのIPアドレス https://example.com

–resolveと/etc/hostsの違い
#

同様の操作は /etc/hosts にホスト名とIPアドレスを追記することでも実現できます。

ただし、両者には以下のような違いがあります。

方法 影響範囲 後処理
--resolve そのコマンドのみ 不要
/etc/hosts システム全体 追記した行の管理が必要

一時的な確認作業であれば --resolve の方が手軽で、作業後に /etc/hosts を戻し忘れるリスクもないため安全な方法となります。

関連記事

【超入門】curlコマンド -d オプションの使い方
Linux ネットワーク コマンド Curl
Linuxのsortコマンドで重複行を削除する方法(sort -u / uniq)
Linux コマンド Sort Uniq
Linuxのrmdirで中身ごと削除できない場合に削除する方法(rm -r)
Linux コマンド Rm Rmdir
grepでバイナリファイルを除外する方法|-Iオプションの使い方
Grep コマンド AlmaLinux Linux
lsofとは?Linuxでファイルオープン数を調べる基本コマンド解説
Linux コマンド Lsof
【初心者向け】AlmaLinux 10 で Knot DNS 権威サーバーを構築する方法
DNS AlmaLinux Linux