web-dev-qa-db-ja.com

OS Xで、DHCPを介して取得したDNSサーバーのリストに127.0.0.1を追加するにはどうすればよいですか?

Dnsmasqを使用して、その構成を使用して特定の既知のドメインを解決しようとしていますが、残りの要求はDHCPによって割り当てられた通常のDNSサーバーに渡されます。これを機能させることができません。ネットワークパネルからDNSを127.0.0.1に設定する場合、DHCPで割り当てられたDNSサーバーをdnsmasqの構成にハードコーディングする必要があります。ただし、別のネットワークを使用している場合、たとえば職場では、クライアントでは、これらのアドレスは異なります。ネットワークを変更するたびに再構成する必要があります。

127.0.0.1およびDHCPを介して割り当てられたDNSサーバーを使用するようにOS Xを構成するにはどうすればよいですか?

それが不可能な場合、DHCPを介してアップストリームDNSサーバーを取得するようにdnsmasqに指示するにはどうすればよいですか?

これが私がこれまでに知っていることです。

  1. OS Xの/etc/resolv.confは動的であり、ネットワーク設定で設定した内容、またはDHCPを使用した内容に応じて変化します。再接続するたびに変更されます。オフラインになると削除されます。したがって、127.0.0.1を使用するとすぐに、これは/etc/resolv.confに反映され、以前にDHCPによって割り当てられたDNSアドレスを見つけることができる場所があるかどうかわかりません。

  2. OSXは/etc/resolv.conf.headを使用しません。

  3. OS Xは、DHCPが提供するリストの前にDNSサーバーを追加できる/etc/dhclient.confを使用しません。

  4. /etc/resolver/tld.confは、tldの一致に基づいてDNSサーバーを使用しようとするため、解決策ではありません(.devなどを使用する場合に適しています)。

編集:ネットワークDNS設定のスクリーンショットがあります ここ 私が望むもののように見えますが、その記事の著者がどのように達成したのかわかりません。

まず、127.0.0.1を使用すると、DHCPによって割り当てられたDNSサーバーが機能しなくなります。 OS Xに複数のDNSサーバーが構成されている場合、それらを順番に試行するのではなく、ラウンドロビンのようなものを実行します。つまり、さまざまな要求を多かれ少なかれランダムにさまざまなサーバーに送信します。最終結果:dnsmasqで処理したいルックアップの一部は、代わりに通常のサーバーに送信され(間違った結果が得られ)、通常のサーバーに送信したいルックアップの一部はdnsmasqに送信されます(失敗します)。良くない。

DHCPが提供するDNSサーバーを使用するようにdnsmasqに指示することは可能かもしれませんが、それを行うためのクリーンな方法がわかりません。代わりに、特別に処理するドメインの通常のDNS構成を上書きするDNS構成を使用することをお勧めします。これには2つのオプションがあります。

  1. Dnsmasqをスキップし、特別に処理するホストを/ etc/hostsに配置します(たとえば、 この記事 を参照)。
  2. / etc/resolver /ファイルを使用して、特定のドメインのクエリを127.0.0.1に送信し、一般的な(DHCP提供の)DNSサーバーをオーバーライドします( / etc/resolverのmanページ および このMacOS Xのヒントの記事 。基本的に、/ etc/resolverフォルダーを作成し、オーバーライドするドメインごとにファイルをそのフォルダーに配置します。たとえば、/ etc/resolver /somedomain.comには「nameserver127.0」が含まれます。 0.1 "。
5
Gordon Davisson

ゴードンの答えを出発点として使用して、Web開発プロジェクトのホスト名を作成するという私の目的のためにこれを解決することができました。これはOSX 10.9(Mavericks)でテストされました。

テストサイトに_.dev_サフィックスを使用しています(例:_project1.dev_、_project2.dev_)。このアプローチにより、任意の数の_.dev_ドメインを作成できますが、_/etc/resolver_に各ドメインのファイルを作成する必要はありません。これは、ゴードンの答えに対する小さな改善です。接尾辞ごとに1回だけファイルを作成する必要があります。

これは、職場のネットワーク、ホームネットワーク、またはVPNのいずれにいても機能します。

  1. [ネットワーク設定]ペインで、[詳細]、[DNS]に移動し、追加されたカスタムDNSサーバーをすべて削除して、DHCPで割り当てられた値を使用するだけです。
  2. _Sudo mkdir /etc/resolver/_
  3. _Sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolver/dev'_
  4. まだ行っていない場合は、以下を_/usr/local/etc/dnsmasq.conf_に追加します(自作でdnsmasqをインストールしたと仮定します。それ以外の場合は場所が異なる場合があります)。

    _address=/dev/127.0.0.1
    _

追加のサフィックス(例:_project1.loc_)を使用する場合は、手順3と4を繰り返し、両方の手順でdevをサフィックスに置き換えます。

DigHost、またはnslookupを使用してホスト名を解決しようとすると失敗しますが、ホスト名はWebブラウザーまたはたとえばcurlで解決されます。 _curl http://project1.dev_は期待どおりに機能します。

1
Jimothy