ツール

nslookup ではホスト名が正しく解決されるのに、同じ Mac から curl が exit 6(Could not resolve host)で失敗するときは、macOS の system resolver が壊れています。多くはネットワーク切替(テザリング → WiFi など)の後で古い DNS サーバ参照が残ったケースです。sudo killall -HUP mDNSResponder で解決キャッシュをリセットし、WiFi を入れ直せば復旧します。

まず nslookup と curl の違いで切り分ける

nslookup/etc/resolv.conf の最初の DNS サーバに直接問い合わせます。curl(や Simulator の WKWebView、ブラウザ)は macOS の mDNSResponder 経由で解決します。この 2 経路のどちらか片方だけが壊れることが実際に起きます。

$ nslookup example.com
Server:  192.168.43.1
Address: 192.168.43.1#53
Non-authoritative answer:
Name:  example.com
Address: 93.184.216.34

$ curl -o /dev/null -w '%{http_code}\n' https://example.com/
000
$ echo $?
6

この状態は resolver が新しいネットワーク環境に追従できていないサインです。Server: 192.168.43.1 はテザリング系ネットワークで割り当てられがちな DNS で、WiFi に切り替えた後も参照が残ることがあります。

復旧は 2 ステップ

キャッシュをリセットしてから、ネットワーク接続を貼り直します。順番はどちらが先でも構いませんが、DNS キャッシュを消しただけでは resolver 内部の参照が更新されないことがあるため、両方やります。

# DNSキャッシュフラッシュ
sudo killall -HUP mDNSResponder

# WiFi 切って入れ直し (メニューバーの WiFi アイコンから、または)
sudo ifconfig en0 down && sleep 2 && sudo ifconfig en0 up

復旧確認は curl を再度実行して HTTP コードが返るかで見ます。200 でも 404 でもよく、000 でないことを確認します。

Simulator や WebView が -1003 で落ちる時も同じ原因

iOS Simulator の NSURLErrorDomain -1003(指定されたホスト名のサーバが見つかりません)は、Simulator が Mac の system resolver をそのまま使う仕様なので同じ経路で詰まります。curl と Simulator と WebView が同時に落ちて nslookup だけが通るなら、原因はこれで確定します。

手順を覚えるより、nslookupcurl の症状差を判断基準として頭に入れておくのが早いです。「curl だけ落ちる」「Simulator だけ落ちる」を見た瞬間に system resolver を疑えるかどうかで、切り分けの時間が変わります。