27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

curlでhostsファイルを書き換えずに名前解決する

Last updated at Posted at 2023-04-03

ローカル環境やテスト環境にホスト名やドメイン名でアクセスしたい場合、hostsファイルに設定を書き加えることがよくありますが、curlでちょっと確認したいだけといった場合は、いちいちhostsファイルを書き換えなくても、--resolveオプションで指定できます。

hostsファイルを書き換える例:

/etc/hosts
# ローカルホストをmyapp.example.comでアクセスできるようにする
127.0.0.1       localhost myapp.example.com

# 開発用のVMをfoobar.example.comでアクセスできるようにする
192.168.56.123  foobar.example.com

--resolveオプション

curlの--resolveオプションを使用すると、その場限りでマッピングを指定できます。

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

例えばローカルホストにhttp://myapp.example.comでアクセスしたい場合、次のようにします。

$ curl -v --resolve myapp.example.com:80:127.0.0.1 http://myapp.example.com

今回は-vオプションを指定したので、どのような処理が行われているのか確認してみましょう。

* Added myapp.example.com:80:127.0.0.1 to DNS cache
* Hostname myapp.example.com was found in DNS cache
*   Trying 127.0.0.1:80...
* Connected to myapp.example.com (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: myapp.example.com
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Server: SimpleHTTP/0.6 Python/3.9.6
< Date: Thu, 30 Mar 2023 06:50:49 GMT
< Content-type: text/html; charset=utf-8
< Content-Length: 1304
<
以下レスポンスボディ

myapp.example.comとして処理しつつも127.0.0.1に接続していることがわかると思います。

先頭2行を見た感じ、curlの持つDNSキャッシュにエントリを追加する、みたいな仕組みなんですかね(詳しい実装内容は知りません)。

どのような場合に使うのか

例に挙げたような開発環境の場合は、ブラウザでアクセスしたいことも多いと思うので、結局hostsファイルを書き換えることになるのですが、例えば次のようなケースで有用だったりします。

  • テスト環境のサーバーに本番環境のドメイン名でアクセスする
  • サーバー移転やドメイン切り替え時に、(DNSを実際に切り替える前に)切り替え後の場合のアクセスを確認する
  • CDNやProxy等を経由せずに直接アクセスして検証する
  • TLSのSNI(Server Name Indication)の動作確認

Hostヘッダではダメなこともある

ところで、こんな難しいオプションを使わなくても、次のようにHostヘッダを指定すればいいのでは? と思うかもしれません。

$ curl --header 'Host: myapp.example.com' http://127.0.0.1/

HTTPの場合は実はこれでも大丈夫なことが多いです。
ですが、HTTPSでSNI(Server Name Indication)を使用している場合は、TLSハンドシェイクの時点でホスト名を指定する必要があるため、HTTPヘッダではダメなのです(HTTPヘッダはTLS接続後の話なので)。

27
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?